Условие оповещения, основанное на предыдущем или 2 барах назад до пересечения EMA13/50

#pine-script

Вопрос:

Пожалуйста, ознакомьтесь с приведенным ниже кодом. У меня есть два входа. Первый предназначен для случаев, когда EMA13 пересекает EMA50, а второй вход определяет бары с большим объемом. Я хотел бы узнать, как можно сделать следующее:

  1. Как мы можем показать на графике (без использования встроенной функции смещения) любой бар или бары с большим объемом, появившиеся на предыдущем баре или два бара назад, до того, как EMA13 пересечет EMA50? Причина, по которой я хотел бы сделать это без использования функций смещения и построения вместе, чтобы сдвинуть полосу влево, заключается в том, что я предполагаю, что сдвиг будет косметическим, и фактическое значение не будет перемещено. Таким образом, я не могу использовать его для функции alertcondition, если я использую смещение.
  2. Как мы можем создать условие оповещения (не функцию оповещения), которое будет основано на следующих событиях?
  • EMA13 пересекает EMA50, и
  • Должен быть бар или два бара с высокой громкостью, в предыдущем баре или в последних 2 барах, предшествующих пересечению EMA13/50.

Большое спасибо

 //@version=4
study(title="High volume with EMA13/50", shorttitle="High vol EMA13/50", overlay = true )
EMA13 = input(13, minval=1)
EMA50 = input(50, minval=1)

xPrice = close
xEMA13 = ema(xPrice, EMA13)
xEMA50 = ema(xPrice, EMA50)

plot(xEMA13, color=color.red, title="EMA 13")
plot(xEMA50, color=color.purple, title="EMA 50")

// Bar with high volume
smalength=input(21, "length", minval=1)
avrg=sma(volume,smalength)
volu1 = volume > avrg*1.5 and close>open
colu1=#006400
color = volu1 ? colu1 : na
barcolor(color)
plotshape(volu1 ? low : na, title="Bar with high volume", text="HighnVolumen", style=shape.labelup, location=location.belowbar, color=colu1, textcolor=color.white, size=size.tiny)

EMA13crossesoverEMA50 = crossover(xEMA13, xEMA50)

plotshape(EMA13crossesoverEMA50 ? low : na, title="EMA13crossesoverEMA50", text="EMA(13,50)nCrossovern", style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, size=size.tiny)

// Question :1
// How can we show, on the chart, any bar or bars with high volume occurring in the previous bar, or two bars ago, before EMA13 crossses over EMA50?
// input for bar or bars with high volume that occur any time: "volu1"
// input for EMA13 crosses over EMA50: "EMA13crossesoverEMA50 "


// Question: 2
// How can we create an alertcondition (not the alert function), which will be based on the following events?
// First condition: EMA13 crossover over EMA50
// Second condition: There must be a bar or bar with high volume, in the last 2 bars preceding the EMA13/50 crossover

//alertcondition(condition, title="High Volume happened in the last 2 bars before EMA13/50 crossover", message="High volume before EMA13/50 crossover")
 

Ответ №1:

Как насчет чего-то подобного, мой друг? мы можем ссылаться на предыдущие бары, используя [] после вашего состояния. например: (volu1[1] или volu1[2]) проверит, было ли ваше условие громкости истинным на один бар ранее или 2 бара назад. Мы можем добавить это к вашему кресту и распечатать этикетку и предупреждение только в том случае, если все будут удовлетворены:

 //@version=4
study(title="High volume with EMA13/50", shorttitle="High vol EMA13/50", 
overlay = true )
EMA13 = input(13, minval=1)
EMA50 = input(50, minval=1)

xPrice = close
xEMA13 = ema(xPrice, EMA13)
xEMA50 = ema(xPrice, EMA50)

plot(xEMA13, color=color.red, title="EMA 13")
plot(xEMA50, color=color.purple, title="EMA 50")

// Bar with high volume
malength=input(21, "length", minval=1)
avrg=sma(volume,smalength)
volu1 = volume > avrg*1.5 and close>open
colu1=#006400
color = volu1 ? colu1 : na
barcolor(color)

EMA13crossesoverEMA50 = crossover(xEMA13, xEMA50)

highCross = EMA13crossesoverEMA50 and (volu1[1] or volu1[2]) // volume on previous bar or bar before that 

plotshape(volu1 and not highCross ? low : na, title="Bar with high volume", text="HighnVolumen", style=shape.labelup, location=location.belowbar, color=colu1, textcolor=color.white, size=size.tiny)

plotshape(highCross ? low : na, title="High Volume Cross", text="HighnCrossn", style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, size=size.tiny)

alertcondition(highCross, title="High Volume happened in the last 2 bars before EMA13/50 crossover", message="High volume before EMA13/50 crossover")
 

обратите внимание, что если мы хотим проверить одну и ту же полосу креста, то мы просто скажем и volu1 и т. Д. Вы сказали предыдущую полосу, поэтому я сделал это 1 назад, но вы можете изменить это

Ура и удачи вам в торговле и кодировании

Комментарии:

1. Спасибо. Это работает! Я думаю, что я просто рассуждал слишком сложным образом и совершенно забыл об объединении кроссовера EMA13/50 с » volu1[1] или volu1[2]». Я посмотрел на диаграмму, и она иллюстрирует формы графиков с таким условием.

2. Не беспокойтесь! иногда все, что вам нужно, — это сделать шаг назад. Несколько более сложным способом было бы использовать цикл for, который позволял бы возвращать переменную из меню ввода. Ура!