Давайте рассмотрим небольшой пример с использованием 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
.
![введите описание изображения здесь](https://i.stack.imgur.com/j5trH.png)
Однако эти сигналы должны быть 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)
Это приведет к:
![введите описание изображения здесь](https://i.stack.imgur.com/CHom0.png)
person
Baris Yakut
schedule
24.05.2019