Я пишу исследование (не стратегию) с оповещениями о нижней 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)