Нужна помощь в изучении ошибки и преобразовании Pinescript V3 в V4

#pine-script

#pine-script

Вопрос:

Я создаю стратегию на Tradingview, используя индекс объема торговли. Это просто. Покупайте, когда объем достигает HHV (самый высокий объем), и продавайте, как и наоборот.

Однако я новичок в этом pinescript. Я адаптирую пример стратегии kodify в pinescript V3 по стратегии определения размера позиции в текущую версию 4. Однако, похоже, запуск find для BTC / USD, как показано на прилагаемой фотографии.BTC / USD, но не в случае с EURO / USD с ошибкой исследования в виде прикрепленной фотографии EURO / USD

Не могли бы вы, пожалуйста, помочь мне в 2 частях

  1. Как я мог исправить эту ошибку исследования
  2. Как я мог преобразовать строки 115 и 116 в версии 4

Большое, большое спасибо!

 //@version=4
// Step 1) Define strategy settings
strategy(title='Yotyord - TVI', overlay=false,pyramiding=0,initial_capital=100000,commission_type=strategy.commission.cash_per_contract,commission_value=25,slippage=2)

//Session Input Options
smooth = input(title='Signal Smoothness, (<0 to hide):', type=input.integer, defval=4)
length = input(10,title='Highest High Volume')

// Position sizing inputs
usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
maxRisk = input(title="Max Position Risk %", type=input.float, defval=2, step=.25)
maxExposure = input(title="Max Position Exposure %", type=input.float, defval=10, step=1)
marginPerc = input(title="Margin %", type=input.integer, defval=10)

// Stop inputs
atrLen = input(title="ATR Length", type=input.integer, defval=10)
stopOffset = input(title="Stop Offset Multiple", type=input.float, defval=4, step=.25)

// Step 2) Calculate strategy values

//Writing Trade Volume Index graph (TVI)

f_tvi()=>

    float _direction = na
    float _return_tvi = na

    _min_tick=syminfo.mintick
    _price_change = close - open  
  
    if _price_change > _min_tick 
        _direction :=1
    if _price_change  < -_min_tick 
        _direction :=-1
    if abs(_price_change) <= _min_tick
        _direction :=_direction[1]
                
   
    if na(_return_tvi[1]) 
        _return_tvi :=   volume
    else if _direction > 0
        _return_tvi := _return_tvi[1]   volume
            
    else if _direction < 0
        _return_tvi :=  _return_tvi[1] - volume 
            
    else
        _return_tvi[1]

      
TVI=f_tvi()



tradeWindow = time <= timenow - (86400000 * 3)

stopValue = atr(atrLen) * stopOffset

//Get ATR Values
atrValue = atr(atrLen)

// Calculate position size
riskEquity = (maxRisk * 0.01) * strategy.equity
riskTrade  = stopValue * syminfo.pointvalue

maxPos = ((maxExposure * 0.01) * strategy.equity) /
     ((marginPerc * 0.01) * (close * syminfo.pointvalue))

posSize = usePosSize ? min(floor(riskEquity / riskTrade), maxPos) : 1


//Buy when TVI = HHV and Sell When TVI = LLV
hhV = highest(TVI,length)
llV = lowest(TVI,length)

BuySig = hhV == TVI ? hhV : na
SellSig = llV == TVI ? llV : na
eLong = hhV == TVI
eShort = llV == TVI


plotshape(BuySig, style=shape.circle,title = "Buy Signal",color = color.green,location=location.absolute)
plotshape(SellSig, style=shape.circle,title = "Sell Signal",color = color.red,location=location.absolute)

// Step 3) Output strategy data
plot(TVI,color=color.white,title='TVI')  
plot(hhV , color=color.green, title="HHV")
plot(llV , color=color.red, title="LLV")


// Step 4) Determine long trading conditions
enterLong = eLong and tradeWindow

longStop = 0.0
longStop := enterLong ? close - (stopOffset * atrValue) :
     longStop[1]

// Step 5) Code short trading conditions
enterShort = eShort and tradeWindow

plotshape(enterLong, style=shape.circle,
     title = "Enter Long",
     location = location.belowbar,
     color = color.green)

plotshape(enterShort, style=shape.circle,
     title = "Enter Short",
     location=location.abovebar,
     color = color.red)

shortStop = 0.0
shortStop := enterShort ? close   (stopOffset * atrValue) :
     shortStop[1]

//plot(series=strategy.position_size > 0 ? longStop : na,color=color.green, linewidth=2, style=shape.circle)
//plot(series=strategy.position_size < 0 ? shortStop : na,color=color.red, linewidth=2, style=shape.circle)


// Step 6) Submit entry orders
if (enterLong)
    strategy.entry(id="EL", long=true,qty=posSize)

if (enterShort)
    strategy.entry(id="ES", long=false,qty=posSize)



// Step 7) Send exit orders
if (strategy.position_size > 0)
    strategy.exit(id="XL", from_entry="EL", stop=longStop)

if (strategy.position_size < 0)
    strategy.exit(id="XS", from_entry="ES", stop=shortStop)

strategy.close_all(when=not tradeWindow)
  

Ответ №1:

Есть инструкция, как автоматически преобразовать Pine из v3 в v4.

Комментарии:

1. Спасибо, однако я все еще не мог найти, почему это может быть торговля на BTCUSD, но не на EURUSD

2. Причина кроется в commission_value (25 за контракт). Для BTCUSD существует около 0.000 контрактов xxx, и комиссия небольшая, но для EURUSD существуют тысячи контрактов, а общая комиссия за ордер огромна ==> strategy.equity стал отрицательным, и ваша формула вычисляет отрицательный размер.