この戦略は,マルチタイムフレーム指数関数移動平均値 (EMA) と200期EMAフィルターに基づくトレンドフォロー戦略である.主なアイデアは,異なるタイムフレームでEMAを使用して市場のトレンド方向を特定し,トレンドが上昇し,価格が200期EMAを超えるとロングポジションを確立することである.これは,強い上昇傾向の間にのみ取引を行うことを保証し,定義されたストップ・ロストとテイク・プロフィートメカニズムでリスクを管理しながら持続的な上昇動きを捉えることを目的としている.
この戦略は5分,15分,30分という3つのタイムフレームを使用し,それぞれに速いEMAと遅いEMAを計算する.各タイムフレームの速いEMAと遅いEMAを比較することで,トレンド方向を決定することができる. 3つのタイムフレームからのトレンド信号は,組み合わせたトレンド信号を得るために合計される. 組み合わせたトレンド信号が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")