#pine-script
Вопрос:
Пожалуйста, ознакомьтесь с приведенным ниже кодом. У меня есть два входа. Первый предназначен для случаев, когда EMA13 пересекает EMA50, а второй вход определяет бары с большим объемом. Я хотел бы узнать, как можно сделать следующее:
- Как мы можем показать на графике (без использования встроенной функции смещения) любой бар или бары с большим объемом, появившиеся на предыдущем баре или два бара назад, до того, как EMA13 пересечет EMA50? Причина, по которой я хотел бы сделать это без использования функций смещения и построения вместе, чтобы сдвинуть полосу влево, заключается в том, что я предполагаю, что сдвиг будет косметическим, и фактическое значение не будет перемещено. Таким образом, я не могу использовать его для функции alertcondition, если я использую смещение.
- Как мы можем создать условие оповещения (не функцию оповещения), которое будет основано на следующих событиях?
- 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, который позволял бы возвращать переменную из меню ввода. Ура!