Состояние после предупреждения, когда условие изменяется с истинного на ложное. В настоящее время предупреждает, если какое-либо из условий истинно. Не когда меняется

Это часть скрипта pine для TradingView. В сценарии после «//Условие» я хочу, чтобы предупреждение генерировалось только тогда, когда условие изменяется с длинного на короткое или с короткого на длинное. Не конец каждой свечи, как сейчас, так как всегда выполняется одно условие. Это было изменено на исследование.

threshold = input(title="Threshold", type=float, defval=0.0014, step=0.0001)

buying  = l3_0 > threshold ? true : l3_0 < -threshold ? false : buying[1]
///// T edit
selling = l3_0 > -threshold ? true : l3_0 < threshold ? false : 
selling[1] //// T edit END

hline(0, title="base line")
bgcolor(l3_0 > 0.0014 ? green : l3_0 < -0.0014 ? red : gray, transp=20)
bgcolor(buying ? green : red, transp=20)
plot(l3_0, color=silver, style=area, transp=75)
plot(l3_0, color=aqua, title="prediction")

/////     Stragegy     
/////////////////////////////////////////////////////
//longCondition = buying
//if (longCondition)
    //strategy.entry("Long", strategy.long)

//shortCondition = buying != true
//if (shortCondition)
    //strategy.entry("Short", strategy.short)

///// Оповещения ///////////////////////////////////////////// ///////////alertcondition(условие, заголовок, сообщение)

//Condition
long  = l3_0 > 0.0014
short = l3_0 < -0.0014


alertcondition(long, title = "ANN Long", message= "ANN Long")
alertcondition(short, title = "ANN Short", message= "ANN Short")

person Trevor Hammond    schedule 24.05.2019    source источник
comment
Какой язык вы здесь используете? Можете ли вы попытаться подробно описать, чего вы хотите достичь?   -  person kiyah    schedule 24.05.2019
comment
Это сосновый скрипт   -  person Trevor Hammond    schedule 24.05.2019
comment
Пожалуйста, добавьте этот тег к своему вопросу (или примите мое редактирование), чтобы людям было легче найти ваш вопрос.   -  person kiyah    schedule 24.05.2019
comment
В сценарии после '//Условие' я хочу, чтобы предупреждение генерировалось, когда условие изменяется с длинного на короткое - с короткого на длинное.   -  person Trevor Hammond    schedule 24.05.2019
comment
Привет, Зит. Я получаю ограничение до 150 писем. Есть ли способ обойти это?   -  person Trevor Hammond    schedule 24.05.2019
comment
Вы должны описать это в описании, а не в заголовке   -  person kiyah    schedule 24.05.2019
comment
Спасибо, Зит. Первый раз пользователь на stackoverflow   -  person Trevor Hammond    schedule 24.05.2019


Ответы (1)


Давайте рассмотрим небольшой пример с использованием MACD. Мы хотим открывать длинную позицию всякий раз, когда delta равен >= 0, и короткую позицию, когда delta равен <0. Кроме того, мы хотели бы оставаться в нашей позиции до тех пор, пока не сработает противоположный сигнал (входим один раз и ждем противоположного сигнала).

Ваш код выглядит следующим образом:

//@version=3
study("My Script", overlay=true)

// Get the inputs
MACDLengthMACD = input(title="MACD Length", defval=9, minval=1, maxval=100)
fastLengthMACD = input(title="MACD Fast Length", defval=12, minval=1, maxval=100)
slowlengthMACD = input(title="MACD Slow Length", defval=26, minval=1, maxval=100)

// Standard MACD calculations
MACD = ema(close, fastLengthMACD) - ema(close, slowlengthMACD)
aMACD = ema(MACD, MACDLengthMACD)
deltaMACD = MACD - aMACD

buySignal = (deltaMACD >= 0)
sellSignal= (deltaMACD < 0)

plotshape(series=buySignal, text="BUY", style=shape.triangleup, location=location.belowbar, color=green, size=size.small)
plotshape(series=sellSignal, text="SELL", style=shape.triangledown, location=location.abovebar, color=red, size=size.small)

В этом случае вы получите несколько сигналов ПОКУПКИ или ПРОДАЖИ, потому что buySignal и sellSignal будут true, пока их условия true.

введите описание изображения здесь

Однако эти сигналы должны быть true только для одного бара, чтобы вызвать только один сигнал ПОКУПКИ или ПРОДАЖИ. Для этого вы можете использовать другую переменную (isLong, isShort в приведенном ниже коде) и использовать оператор ссылки на историю [], чтобы определить, были ли вы ранее ДЛИННЫМИ или КОРОТКИМИ.

Затем запускайте сигнал на ПОКУПКУ только в том случае, если у вас еще нет ДЛИННОЙ позиции, и активируйте сигнал на ПРОДАЖУ только в том случае, если вы уже не в ШОРТНОЙ позиции. Таким образом, вы получите только один сигнал на ПОКУПКУ или ПРОДАЖУ.

//@version=3
study("My Script", overlay=true)

// Get the inputs
MACDLengthMACD = input(title="MACD Length", defval=9, minval=1, maxval=100)
fastLengthMACD = input(title="MACD Fast Length", defval=12, minval=1, maxval=100)
slowlengthMACD = input(title="MACD Slow Length", defval=26, minval=1, maxval=100)

// Standard MACD calculations
MACD = ema(close, fastLengthMACD) - ema(close, slowlengthMACD)
aMACD = ema(MACD, MACDLengthMACD)
deltaMACD = MACD - aMACD

// Deternine if we are currently LONG
isLong = false
isLong := nz(isLong[1], false)

// Determine if we are currently SHORT
isShort = false
isShort := nz(isShort[1], false)

// Buy only if the buy signal is triggered and we are not already long
buySignal = not isLong and (deltaMACD >= 0)

// Sell only if the sell signal is triggered and we are not already short
sellSignal= not isShort and (deltaMACD < 0)

if (buySignal)
    isLong := true
    isShort := false

if (sellSignal)
    isLong := false
    isShort := true

plotshape(series=buySignal, text="BUY", style=shape.triangleup, location=location.belowbar, color=green, size=size.small)
plotshape(series=sellSignal, text="SELL", style=shape.triangledown, location=location.abovebar, color=red, size=size.small)

Это приведет к:

введите описание изображения здесь

person Baris Yakut    schedule 24.05.2019
comment
Это именно то, что я искал. Спасибо, что опубликовали это 2 года назад. До сих пор работает и помогает людям. - person Robbie Smith; 26.06.2021
comment
Рад, что вы нашли это полезным @RobbieSmith - person Baris Yakut; 27.06.2021