#pine-script
#pine-script
Вопрос:
Я создаю стратегию на Tradingview, используя индекс объема торговли. Это просто. Покупайте, когда объем достигает HHV (самый высокий объем), и продавайте, как и наоборот.
Однако я новичок в этом pinescript. Я адаптирую пример стратегии kodify в pinescript V3 по стратегии определения размера позиции в текущую версию 4. Однако, похоже, запуск find для BTC / USD, как показано на прилагаемой фотографии.BTC / USD, но не в случае с EURO / USD с ошибкой исследования в виде прикрепленной фотографии EURO / USD
Не могли бы вы, пожалуйста, помочь мне в 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 стал отрицательным, и ваша формула вычисляет отрицательный размер.