Получить последний сигнал покупки или продажи

Я уже несколько дней пользуюсь pinescript и ищу поддержку у местного сообщества.

В моей стратегии есть условия для автоматизации оповещения buy или sell. Я использую 3 индикатора различий вместе. Меня заблокировал индикатор UT BOT

  • Мне нужно найти способ узнать, когда и был ли последний мигающий сигнал индикатора buy или sell.
  • Для справки, это два других индикатора, которые есть в моей стратегии: свечи линейной регрессии и stc

В настоящее время предупреждение должно работать как:

Подайте оповещение о покупке, ЕСЛИ:

  • Индикатор UT Bot посылает сигнал на покупку
  • Индикатор STC горит зеленым цветом
  • Свеча линейной регрессии закрывается выше сигнальной белой линии.

Подайте предупреждение о продаже, ЕСЛИ:

  • Индикатор UT Bot посылает сигнал на продажу
  • Индикатор STC красный.
  • Свеча линейной регрессии закрывается ниже сигнальной белой линии.

Краевой случай:

  • Оповещение не сработает, когда индикатор UT Bot мигает «Купить» или «Продать», но условия STC и свечей линейной регрессии не выполнены.

Просить:

  • При выполнении других условий (STC и линейная регрессия): найдите в истории свечу, где и по какому сигналу (покупка или продажа) последний раз мигал индикатор UT Bot... затем выполните соответствующее оповещение().

Пожалуйста, прокрутите код до конца, чтобы увидеть мои попытки:

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

Без правильного решения стратегия ошибочна и очень подвержена потерям. См. реальный сценарий на изображениях ниже.

@PineCoders-LucF не уверен, что вы готовы дать мне некоторое представление об этом блокировщике.

Null isTrue 09.05.2024 03:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
233
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Просто используйте переменную 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

Он будет сохранять свое значение между каждой итерацией, поэтому вы можете использовать этот флаг, чтобы выяснить, каким был последний сигнал.

это хороший призыв. То есть я, по сути, отслеживаю состояние покупки и продажи на каждой итерации? Будет ли это, если/иначе, возвращаться на каждой последующей свече, пока условие остается истинным?

Null isTrue 15.05.2024 01:41

Он сохранит свое значение, если вы специально не присвоите ему новое значение. Таким образом, если вы не получите сигнал на покупку или продажу, он сохранит свою ценность.

vitruvius 15.05.2024 02:14

Я бы это сделал, изменив переменные 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] и что он делает в этом контексте?

Null isTrue 15.05.2024 01:38

Это предотвратит повторение оповещения каждый раз. Это означает, что если значение SellBot неверно на предыдущем баре [1] и верно на текущем баре, сработает предупреждение. но это не сработает, если на предыдущей панели уже было верно.

Daniel Licon 21.05.2024 18:34

Другие вопросы по теме