이 전략은 다중 시간 프레임 기하급수적 이동 평균 (EMAs) 과 200 기간 EMA 필터를 기반으로 한 트렌드 추적 전략이다. 주요 아이디어는 시장 트렌드 방향을 식별하고 트렌드가 상승하고 가격이 200 기간 EMA 이상으로 긴 포지션을 설정하기 위해 다른 시간 프레임에서 EMA를 사용하는 것입니다. 이것은 강력한 상승 추세 중만 거래가 이루어지는 것을 보장하며, 정의된 스톱 로스 및 영업 메커니즘으로 위험을 관리하면서 지속적인 상승 움직임을 포착하는 것을 목표로합니다.
이 전략은 5분, 15분, 30분 3개의 시간 프레임을 사용하며, 각각에 대한 빠르고 느린 EMA를 계산한다. 각각의 시간 프레임에 대한 빠르고 느린 EMA를 비교함으로써 트렌드 방향을 결정할 수 있다. 세 가지 시간 프레임의 트렌드 신호는 결합된 트렌드 신호를 얻기 위해 합쳐진다. 결합된 트렌드 신호가 3일 (모든 시간 프레임에서 상승세를 나타낸다) 이며 현재 폐쇄 가격은 5분 시간 프레임에서 200개 기간 EMA를 넘어서면, 전략은 긴 포지션을 입력한다. 결합된 트렌드 신호가 3개 이하로 떨어지거나 가격이 5분 200개 기간 EMA를 떨어지면 포지션은 닫힌다.
이 전략은 트렌드 필터로서 200주기 EMA를 사용하여 여러 시간 프레임에서 EMA를 비교하여 트렌드 방향을 결정합니다. 트렌드가 분명히 상승하고 가격이 장기 이동 평균보다 높을 때 긴 포지션을 설정하여 강력한 상승 추세를 포착하는 것을 목표로합니다. 엄격한 입출장 조건과 고정 스톱 로스 및 영리 수준은 위험을 관리하는 데 도움이됩니다. 그러나 전략은 트렌드 전환점에 느리게 반응할 수 있으며 고정 스톱 로스 및 영리 수준으로 인한 갑작스러운 시장 변동성에 대처하는 데 한계가 있습니다. 미래에는 더 많은 시간 프레임을 도입하고, 스톱 로스 및 영업 수익 수준을 최적화하고, 추가 거래 신호를 통합하고, 매개 변수를 최적화함으로써 전략의 적응력과 견고성을 향상시킬 수 있습니다. 이것은 위험을 통제하면서 시장 기회를 더 잘 잡을 수있게합니다.
/*backtest start: 2023-05-17 00:00:00 end: 2024-05-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Multi-Timeframe Trend Following with 200 EMA Filter - Longs Only", shorttitle="MTF_TF_200EMA_Longs", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=1) // Inputs fast_length = input.int(9, title="Fast EMA Length", minval=1) slow_length = input.int(21, title="Slow EMA Length", minval=1) filter_length_200 = input.int(200, title="200 EMA Length", minval=1) stop_loss_perc = input.float(1.0, title="Stop Loss Percentage", minval=0.1) / 100 take_profit_perc = input.float(3.0, title="Take Profit Percentage", minval=0.1) / 100 // Calculate EMAs for 5-minute, 15-minute, and 30-minute timeframes ema_fast_5min = request.security(syminfo.tickerid, "5", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on) ema_slow_5min = request.security(syminfo.tickerid, "5", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on) ema_fast_15min = request.security(syminfo.tickerid, "15", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on) ema_slow_15min = request.security(syminfo.tickerid, "15", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on) ema_fast_30min = request.security(syminfo.tickerid, "30", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on) ema_slow_30min = request.security(syminfo.tickerid, "30", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on) // Calculate 200 EMA for the 5-minute timeframe ema_200_5min = ta.ema(close, filter_length_200) // Determine the trend for each timeframe trend_5min = ema_fast_5min > ema_slow_5min ? 1 : -1 trend_15min = ema_fast_15min > ema_slow_15min ? 1 : -1 trend_30min = ema_fast_30min > ema_slow_30min ? 1 : -1 // Combine trend signals combined_trend = trend_5min + trend_15min + trend_30min // Define entry and exit conditions with 200 EMA filter enter_long = combined_trend == 3 and close > ema_200_5min exit_long = combined_trend < 3 or close < ema_200_5min // Plot EMAs for the 5-minute timeframe plot(ema_fast_5min, color=color.blue, linewidth=2, title="Fast EMA 5min") plot(ema_slow_5min, color=color.red, linewidth=2, title="Slow EMA 5min") plot(ema_200_5min, color=color.green, linewidth=2, title="200 EMA 5min") // Strategy execution if (enter_long) strategy.entry("Long", strategy.long, stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc)) if (exit_long) strategy.close("Long")