Я уже несколько дней пользуюсь pinescript и ищу поддержку у местного сообщества.
В моей стратегии есть условия для автоматизации оповещения buy
или sell
.
Я использую 3 индикатора различий вместе. Меня заблокировал индикатор UT BOT
buy
или sell
.В настоящее время предупреждение должно работать как:
Подайте оповещение о покупке, ЕСЛИ:
Подайте предупреждение о продаже, ЕСЛИ:
Краевой случай:
Просить:
Пожалуйста, прокрутите код до конца, чтобы увидеть мои попытки:
//@version=5
strategy(title='Combined indicators', shorttitle='COMBIND', overlay=true)
// UT BOT indicator START
// Inputs
a = input(1, title='Key Vaule. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')
// ******** My Logic *********
// First Approach: Fails to trigger Alert if conditions are met after the chart continues plotting, because the `buy/sell` signal was flashed x candles ago
// send Bot alert
if sell and close < signal and stcRed // only focus on the sell variable here
alert("UT Sell+ LIN REG bellow + STC is RED", alert.freq_once_per_bar_close)
if buy and close > signal and stcGreen // only focus on the buy variable here
alert("UT Buy + LIN REG above + STC is GREEN", alert.freq_once_per_bar_close)
// Second Approach: Change State of buy and sell variables via a boolean check. It fails because once set to true, these will trigger alerts on every single bar close.
var bool buy_signal = false
var bool sell_signal = false
if buy
buy_signal := true
sell_signal:= false
if sell
sell_signal := true
buy_signal := false
log.info("Buy is: " + str.tostring(buy_signal))
log.info("Sell is: " + str.tostring(sell_signal))
// send Bot alert
if sell_signal and close < signal and stcRed
alert("UT Sell+ LIN REG bellow + STC is RED", alert.freq_once_per_bar_close)
if buy_signal and close > signal and stcBuy
alert("UT Buy + LIN REG above + STC is GREEN", alert.freq_once_per_bar_close)
Без правильного решения стратегия ошибочна и очень подвержена потерям. См. реальный сценарий на изображениях ниже.
Просто используйте переменную var
, чтобы отслеживать это.
var ut_was_long = false
if (buy) // New buy signal from UT Bot
ut_was_long := true
else if (sell)
ut_was_long := false
Он будет сохранять свое значение между каждой итерацией, поэтому вы можете использовать этот флаг, чтобы выяснить, каким был последний сигнал.
это хороший призыв. То есть я, по сути, отслеживаю состояние покупки и продажи на каждой итерации? Будет ли это, если/иначе, возвращаться на каждой последующей свече, пока условие остается истинным?
Он сохранит свое значение, если вы специально не присвоите ему новое значение. Таким образом, если вы не получите сигнал на покупку или продажу, он сохранит свою ценность.
Я бы это сделал, изменив переменные UT BOT выше и ниже. От пересечения до >, чтобы условия продажи и покупки сработали, пока условие одно и то же.
выше = ema > xATRTrailingStop
ниже = xATRTrailingStop > ema
Затем для оповещений ботов я бы сделал несколько переменных продажи и покупки.
// отправляем оповещение боту
SellBot = продать и закрыть <сигнал и stcRed // здесь сосредоточьтесь только на переменной продажи
buyBot = купить и закрыть > signal и stcGreen // здесь фокусируемся только на переменной buy
//Тогда я бы использовал этот код, чтобы предотвратить дальнейшее срабатывание оповещения, поскольку условие остается тем же
если SellBot и не SellBot[1]
alert("UT Sell+ LIN REG bellow + STC is RED", alert.freq_once_per_bar_close)
if buyBot, а не buyBot[1] // здесь фокусируемся только на переменной buy
alert("UT Buy + LIN REG above + STC is GREEN", alert.freq_once_per_bar_close)
Это был бы мой подход к этому вопросу
спасибо за предложение, что означает sellBot and not sellBot[1]
и что он делает в этом контексте?
Это предотвратит повторение оповещения каждый раз. Это означает, что если значение SellBot неверно на предыдущем баре [1] и верно на текущем баре, сработает предупреждение. но это не сработает, если на предыдущей панели уже было верно.
@PineCoders-LucF не уверен, что вы готовы дать мне некоторое представление об этом блокировщике.