Стратегия Bollinger Bands и EMA Trend Following сочетает в себе два технических индикатора, Bollinger Bands и Exponential Moving Average (EMA), для выявления потенциальных краткосрочных ценовых движений на рынке. Bollinger Bands используются для измерения волатильности цен, а EMA используется для оценки направления тренда. Когда закрывающая цена пересекает EMA и превышает верхнюю полосу, это указывает на потенциальное продолжение восходящего тренда, запуская длинную позицию.
Основа этой стратегии заключается в сочетании полос Боллинджера и EMA для выявления потенциальных торговых возможностей. Полосы Боллинджера состоят из трех линий: средней полосы (обычно простая скользящая средняя), верхней полосы (средняя полоса плюс определенное количество стандартных отклонений) и нижней полосы (средняя полоса минус определенное количество стандартных отклонений).
Торговая логика этой стратегии следующая:
Стратегия Bollinger Bands и EMA Trend Following предлагает трейдерам систематический подход к отслеживанию краткосрочных движений цен на рынке путем сочетания индикатора волатильности и индикатора тренда. Сила стратегии заключается в ее способности эффективно идентифицировать и отслеживать рыночные тенденции при одновременном использовании методов управления рисками и размещения позиций. Однако стратегия также сталкивается с такими рисками, как чувствительность параметров, шум рынка, изменение тренда, и должна быть улучшена и оптимизирована с помощью оптимизации параметров, подтверждения тренда, динамической остановки потери и получения прибыли, оптимизации размещения позиций и многовременного анализа.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands and EMA Strategy", overlay=true) // Bollinger Bands Inputs bb_length = input.int(20, minval=1, title="Bollinger Bands Length") bb_mult = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev") bb_src = input(close, title="Bollinger Bands Source") bb_offset = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500) // EMA Inputs ema_period = input.int(9, minval=1, title="EMA Period") ema_src = input(close, title="EMA Source") ema_offset = input.int(0, title="EMA Offset", minval=-500, maxval=500) // Calculate Bollinger Bands bb_basis = ta.sma(bb_src, bb_length) bb_dev = bb_mult * ta.stdev(bb_src, bb_length) bb_upper = bb_basis + bb_dev bb_lower = bb_basis - bb_dev // Plot Bollinger Bands plot(bb_basis, "BB Basis", color=color.blue, offset=bb_offset) p1 = plot(bb_upper, "BB Upper", color=color.red, offset=bb_offset) p2 = plot(bb_lower, "BB Lower", color=color.green, offset=bb_offset) fill(p1, p2, title="BB Background", color=color.rgb(33, 150, 243, 95)) // Calculate EMA ema_value = ta.ema(ema_src, ema_period) // Plot EMA plot(ema_value, title="EMA", color=color.orange, offset=ema_offset) // Strategy Conditions long_condition = ta.crossover(close, ema_value) and close > bb_upper short_condition = ta.crossunder(close, ema_value) and close < bb_lower // Define Stop Loss and Take Profit Levels stop_loss_pct = input.float(0.5, title="Stop Loss (%)") take_profit_pct = input.float(1.0, title="Take Profit (%)") stop_loss_level_long = close * (1 - stop_loss_pct / 100) take_profit_level_long = close * (1 + take_profit_pct / 100) stop_loss_level_short = close * (1 + stop_loss_pct / 100) take_profit_level_short = close * (1 - take_profit_pct / 100) // Calculate Position Size Based on Risk Per Trade risk_per_trade = input.float(1.0, title="Risk Per Trade (%)") capital_at_risk = strategy.equity * risk_per_trade / 100 risk_per_unit_long = math.abs(close - stop_loss_level_long) risk_per_unit_short = math.abs(close - stop_loss_level_short) position_size_long = capital_at_risk / risk_per_unit_long position_size_short = capital_at_risk / risk_per_unit_short // Enter Long and Short Trades if long_condition strategy.entry("Long", strategy.long, qty=position_size_long) strategy.exit("Take Profit", "Long", limit=take_profit_level_long) strategy.exit("Stop Loss", "Long", stop=stop_loss_level_long) if short_condition strategy.entry("Short", strategy.short, qty=position_size_short) strategy.exit("Take Profit", "Short", limit=take_profit_level_short) strategy.exit("Stop Loss", "Short", stop=stop_loss_level_short)