Давайте рассмотрим небольшой пример с использованием MACD. Мы хотим идти long всякий раз, когда delta
равен >= 0
, и идти short всякий раз, когда 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)
Это приведет к: