Эта стратегия сочетает в себе полосы Боллинджера и 5-дневный экспоненциальный скользящий средний (EMA) для генерации торговых сигналов. Когда цена превышает верхнюю полосу Боллинджера и закрывается ниже 5-дневной EMA, открывается короткая позиция. И наоборот, когда цена превышает нижнюю полосу Боллинджера и закрывается выше 5-дневной EMA, открывается длинная позиция. Кроме того, когда появляется обратный сигнал, стратегия закрывает текущую позицию и открывает новую позицию в противоположном направлении. Стратегия направлена на захват волатильности рынка и изменений тренда, используя полосы Боллинджера для измерения относительного уровня цен и EMA в качестве фильтра тренда для генерации торговых сигналов.
Комбинируя полосы Боллинджера и EMA, эта стратегия может эффективно улавливать тренды и возможности волатильности, подходящие для средне- и долгосрочных торговых стратегий. Однако следует обратить внимание на оптимизацию параметров, контроль позиций и управление рисками. Она также должна быть объединена с другими техническими индикаторами и фундаментальным анализом для лучшей производительности. На производительность стратегии могут влиять рыночные условия и требуют корректировки и оптимизации на основе фактических ситуаций.
/*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("Bollinger Bands and EMA Strategy", overlay=true) // Define the Bollinger Bands length = input.int(20, title="BB Length") src = input(close, title="BB Source") mult = input.float(2.0, title="BB Multiplier") basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Plot Bollinger Bands plot(upper, "Upper Band", color=color.red) plot(lower, "Lower Band", color=color.green) plot(basis, "Middle Band", color=color.blue) // Use plot instead of hline for basis // Define the 5-period EMA ema5 = ta.ema(close, 5) // Plot the 5 EMA plot(ema5, "5 EMA", color=color.orange) // Generate signals var float entry_price = na var string trade_direction = "none" if (na(close[1])) trade_direction := "none" // Condition for entering a short trade if (open > upper and close < ema5) if (trade_direction != "short") strategy.entry("Short", strategy.short) entry_price := close trade_direction := "short" // Condition for entering a long trade if (open < lower and close > ema5) if (trade_direction != "long") strategy.entry("Long", strategy.long) entry_price := close trade_direction := "long" // Close short trade on a long signal if (trade_direction == "short" and open < lower and close > ema5) strategy.close("Short") strategy.entry("Long", strategy.long) entry_price := close trade_direction := "long" // Close long trade on a short signal if (trade_direction == "long" and open > upper and close < ema5) strategy.close("Long") strategy.entry("Short", strategy.short) entry_price := close trade_direction := "short" // Close trades when opposite signal is generated if (trade_direction == "long" and open > upper and close < ema5) strategy.close("Long") trade_direction := "none" if (trade_direction == "short" and open < lower and close > ema5) strategy.close("Short") trade_direction := "none"