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

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

person user2337231    schedule 07.01.2020    source источник
comment
Примечание. Это работает в сочетании с функцией security(), чтобы длинные и короткие условия выполнялись только тогда, когда действителен индикатор более высокого таймфрейма. При удалении этой более высокой проверки TF я думаю, что пирамида работает. Но при удалении пирамидального колпачка (вышеприведенный код) и разрешении неограниченного стекирования работает более высокая проверка tf security(). Так что я совсем застрял.   -  person user2337231    schedule 07.01.2020


Ответы (1)


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

//@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)

введите здесь описание изображения

person PineCoders-LucF    schedule 07.01.2020
comment
Спасибо за ваше время! Да, я изолировал пирамидинг, и он отлично работает. Я также изолировал тикер безопасности для более высоких данных TF, и он отлично работает. Но когда они объединены, это не работает. Чтобы быть точным, условие безопасности является длинным, только когда macd остается положительным (50 EMA > 200 EMA) на 1-часовом TF, и только коротким, когда macd остается отрицательным (50 EMA ‹ 200 EMA) на 1-часовом TF. Как только элементы безопасности и пирамиды объединены, сюжеты работают не так, как ожидалось. Любые идеи? - person user2337231; 07.01.2020
comment
Не видел вашего комментария перед ответом. Что касается более высокого TF, то без кода, который компилируется, очень сложно помочь. Если вы не хотите или слишком сложно делиться кодом здесь, используйте ту же технику, которую мы использовали для построения маркеров, которые позволят вам проверить ваши элементарные условия, а затем, если составные условия, которые вы создаете с ними, соответствуют их состояниям. - person PineCoders-LucF; 08.01.2020