Pinescript / TradingView: установить максимальную пирамиду (несколько стековых записей в одном направлении), но больше 1 - PullRequest
0 голосов
/ 07 января 2020

Я пишу исследование (не стратегию) с оповещениями о нижней 5-минутной TF, которые допускают несколько входов (и одно закрытие) в одном и том же направлении. В идеале, максимум 3 длинных или 3 коротких перед закрытием или иное ожидание противоположного входа или закрытия. (обратите внимание, я не ищу код, который ограничивает 1 вход / выход одновременно). Это то, что я до сих пор далека от того, что предложили веб-исследования, но по какой-то причине это, похоже, не работает (в моих диаграммах графики появляются очень редко) - я думаю, что я точно определил это в условии функции security () на основе более высоких данных TF. Когда вы изолируете пирамиду, она выглядит хорошо. Когда изолируется функция безопасности, чтобы проверить, передаются ли данные, она отображается нормально. Пожалуйста, дайте мне знать, если есть альтернативная логика max-pyramiding c или как заставить ее работать с данными с более высоким TF. Спасибо заранее, любая помощь приветствуется.

// == ORDER CONDITIONS ==
longCond = security(tickerid,'60',someHFCond1)
shortCond = security(tickerid,'60',someHFCond2)

// Count your long short conditions for more control with Pyramiding

sectionLongs = 0
sectionLongs := nz(sectionLongs[1])

sectionShorts = 0
sectionShorts := nz(sectionShorts[1])

if longCond
    sectionLongs := sectionLongs + 1
    sectionShorts := 0

if shortCond
    sectionLongs := 0
    sectionShorts := sectionShorts + 1

// Pyramiding
pyrl = input(3,title="Max Pyramiding (stackable entries, default=3)",minval=1)
longCondition = longCond and sectionLongs <= pyrl 
shortCondition = shortCond and sectionShorts <= pyrl 

// Get the price of the last opened long or short
last_open_longCondition = na
last_open_shortCondition = na
last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])
last_open_shortCondition := shortCondition ? close : nz(last_open_shortCondition[1])

// Check if your last position was a long or a short
last_longCondition = na
last_shortCondition = na
last_longCondition := longCondition ? time : nz(last_longCondition[1])
last_shortCondition := shortCondition ? time : nz(last_shortCondition[1])

in_longCondition = last_longCondition > last_shortCondition
in_shortCondition = last_shortCondition > last_longCondition

// Take profit
Ltakeprofit = last_open_longCondition * (1+profittarget)
Stakeprofit = last_open_shortCondition * (1-profittarget)
long_tp = high[1] > Ltakeprofit and longCondition == 0 and in_longCondition  == 1 and not longCondition[1]
short_tp = low[1] < Stakeprofit and shortCondition == 0 and in_shortCondition == 1 and not shortCondition[1]

// Create a single close for all the different closing conditions.
long_close = long_tp or long_sl ? 1 : 0
short_close = short_tp or short_sl ? 1 : 0

// Get the time of the last close
last_long_close = na
last_long_close := long_close ? time : nz(last_long_close[1])
last_short_close = na
last_short_close := short_close ? time : nz(last_short_close[1])

// Alerts & Signals
bton(b) => b ? 1 : 0
plotshape(longCondition , title="buy alert", color=green, textcolor=green, transp=0, 
          style=shape.triangleup, location=location.belowbar, size=size.small,text="LONG",offset=0)
plotshape(shortCondition, title="sell alert", color=red, textcolor=red, transp=0, 
          style=shape.triangledown, location=location.abovebar, size=size.small,text="SHORT",offset=0)
plotshape(long_tp and last_longCondition > nz(last_long_close[1]), text ="Close", title="Take Profit Long", style=shape.triangledown, 
   location=location.abovebar, color = green, size=size.tiny, editable = false, transp = 0,offset=0) 
plotshape(short_tp and last_shortCondition > nz(last_short_close[1]) , text ="Cover", title="Take Profit Short", style=shape.triangleup, 
   location=location.belowbar, color = red, size=size.tiny, editable = false, transp = 0,offset=0)

1 Ответ

0 голосов
/ 07 января 2020

Это показывает, что ваш пирамидальный элемент управления работает отлично:

//@version=4
study("", "", true)
// == ORDER CONDITIONS ==
barUp = close > open
longCond = barUp and barUp[1]
shortCond = not barUp and not barUp[1]

// Count your long short conditions for more control with Pyramiding

sectionLongs = 0
sectionLongs := nz(sectionLongs[1])

sectionShorts = 0
sectionShorts := nz(sectionShorts[1])

if longCond
    sectionLongs := sectionLongs + 1
    sectionShorts := 0
    label.new(bar_index, low - tr, tostring(sectionLongs, "▲\n#"), xloc.bar_index, yloc.price, color.green, label.style_none, color.green, size.large)

if shortCond
    sectionLongs := 0
    sectionShorts := sectionShorts + 1
    label.new(bar_index, na, tostring(sectionShorts, "#\n▼"), xloc.bar_index, yloc.abovebar, color.maroon, label.style_none, color.maroon, size.large)

// Pyramiding
pyrl = input(3,title="Max Pyramiding (stackable entries, default=3)",minval=1)
longCondition = longCond and sectionLongs <= pyrl 
shortCondition = shortCond and sectionShorts <= pyrl 

bgcolor(longCondition ? color.lime : shortCondition ? color.red : na)
plotchar(sectionLongs, "sectionLongs", "", location.top)
plotchar(sectionShorts, "sectionShorts", "", location.top)

enter image description here

...