Эта стратегия использует 5-дневную экспоненциальную скользящую среднюю (EMA) и полосы Боллинджера (BB) для выявления потенциальных торговых возможностей на рынке. Когда цена выходит выше верхней полосы Боллинджера или ниже нижней полосы Боллинджера, и выполняются определенные условия, стратегия генерирует сигналы покупки или продажи. Стратегия направлена на захват значительных движений цен на рынке при использовании стоп-лосса и целевых уровней цен для управления рисками и максимизации доходности.
Основой этой стратегии является использование 5-дневной EMA и Болинджерской полосы для определения рыночных тенденций и волатильности. Когда цена превышает верхнюю полосу Болинджера, и предыдущий максимум свечей находится выше 5-дневной EMA, стратегия генерирует сигнал продажи. И наоборот, когда цена превышает нижнюю полосу Болинджера, и предыдущий минимум свечей находится ниже 5-дневной EMA, стратегия генерирует сигнал покупки.
После того, как сделка введена, стратегия устанавливает уровень стоп-лосса и уровень целевой цены. Стоп-лосс размещается в противоположном направлении от цены входа, чтобы ограничить потенциальные потери. Уровень целевой цены рассчитывается на основе фиксированного числа пунктов (например, 1000 пунктов), чтобы зафиксировать ожидаемую прибыль. Если цена достигает уровня стоп-лосса или уровня целевой цены, стратегия закрывает торговлю и выходит из позиции.
Стратегия EMA и Bollinger Bands Breakout использует два широко используемых технических индикатора для фиксирования значительных движений цен на рынке. Стратегия имеет четкие условия входа, меры управления рисками и цели прибыли, что делает ее легкой для понимания и реализации.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nifty Bank Strategy", overlay=true) // Parameters lengthEMA = 5 lengthBB = 20 multBB = 1.5 targetPoints = 1000 // Calculate 5-day EMA ema5 = ta.ema(close, lengthEMA) // Calculate Bollinger Bands (length 20, multiplier 1.5) basis = ta.sma(close, lengthBB) dev = multBB * ta.stdev(close, lengthBB) upperBB = basis + dev lowerBB = basis - dev // Define strategy variables var float entryPrice = na var float stopLoss = na var float targetPrice = na var bool inTrade = false var bool isLong = false var float triggerHigh = na var float triggerLow = na var float triggerClose = na if not inTrade // Short Entry Trigger Condition if low > ema5 and low > upperBB and high > upperBB triggerLow := low triggerHigh := high triggerClose := close label.new(bar_index, high, "Waiting for short trigger", color=color.yellow) // Long Entry Trigger Condition else if high < ema5 and high < lowerBB and low < lowerBB triggerHigh := high triggerLow := low triggerClose := close label.new(bar_index, low, "Waiting for long trigger", color=color.yellow) // Check for Short Entry if not inTrade and na(triggerClose) == false and close < triggerClose if low < triggerLow entryPrice := close stopLoss := triggerHigh targetPrice := entryPrice - targetPoints strategy.entry("Short", strategy.short) label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down) inTrade := true isLong := false triggerLow := na triggerHigh := na triggerClose := na // Check for Long Entry if not inTrade and na(triggerClose) == false and close > triggerClose if high > triggerHigh entryPrice := close stopLoss := triggerLow targetPrice := entryPrice + targetPoints strategy.entry("Long", strategy.long) label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up) inTrade := true isLong := true triggerLow := na triggerHigh := na triggerClose := na // Manage Short Trade if inTrade and not isLong if high >= stopLoss strategy.close("Short", comment="SL Hit") label.new(bar_index, high, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if low <= targetPrice strategy.close("Short", comment="Target Hit") label.new(bar_index, low, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Manage Long Trade if inTrade and isLong if low <= stopLoss strategy.close("Long", comment="SL Hit") label.new(bar_index, low, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if high >= targetPrice strategy.close("Long", comment="Target Hit") label.new(bar_index, high, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Plotting plot(ema5, color=color.orange, title="5-day EMA") plot(upperBB, color=color.red, title="Upper Bollinger Band") plot(lowerBB, color=color.purple, title="Lower Bollinger Band") // Plot trade entry and exit points plotshape(series=inTrade and isLong ? entryPrice : na, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal") plotshape(series=inTrade and not isLong ? entryPrice : na, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")