ダブルEMAクロスオーバー戦略は,典型的なトレンドフォロー戦略である.異なる期間の2つのEMAラインを使用し,そのクロスオーバーに基づいて取引信号を生成する.速いEMAが遅いEMAの上を横切ると,購入信号が生成される.速いEMAが遅いEMAの下を横切ると,販売信号が生成される.この戦略は,中長期のトレンドを追跡し,トレンド開始段階で取引機会を捕捉することができる.
この戦略の主な要素は次のとおりです.
ここで,より速いEMAの長さは12で,より遅いEMAは26です.
速度が速い EMA は反応が速く,速度が遅い EMA は安定しています.
EMAのクロスオーバー状況を決定し,取引シグナルを生成する. 速い EMAが遅い EMAを超えると,購入シグナルが生成される. 速い EMAが遅い EMAを下回ると,販売シグナルが生成される.
シグナルに基づいて取引を行う.ロングに行くとき,既存のショートポジションはロングポジションを開く前に最初に閉鎖される.その逆.
ストップ・ロスのポイントを設定します. ストップ・ロスは,価格が前回の低値を下回る場合,設定されます.
エグジット・トレードはシグナルに基づいて行われます. 速いEMAが遅いEMAを下回るとロングポジションは閉鎖されます. 速いEMAが遅いEMAを下回るとショートポジションは閉鎖されます.
論理は単純で直感的です. EMAクロスオーバーはトレンドの方向性と強さを決定します.より速い EMAは短期的な価格変化に迅速に対応し,より遅い EMAは長期的トレンドに安定して反応します.二つのラインのクロスオーバーはトレンドの変化を検出する古典的な方法です.
この戦略の利点は次のとおりです.
EMAとクロスオーバーは,効果的な指標とシグナルとして認識されています.
中長期の動向を効果的に追跡し,機会を早期に把握できる
二重EMAの設定は,短期間の市場変動による騒音を回避します.
明確なエントリールールを,退出ルールを,ストップ・ロスのルールを 保持するポジションはありません.
簡単なパラメータ調節 初心者向けに適しています
バックテストの結果は良好で リアルタイム取引も可能です 単独でも他の戦略と組み合わせても使用できます
この戦略のリスクは
双 EMA クロスオーバー 誤った信号とウィップソーを生成する傾向があります 誤った信号をフィルタリングするためにパラメータを調整する必要があります
変動やトレンドの逆転をうまく処理できない 他の指標からの確認が必要です
双 EMA 戦略は高値を追求し低値を売る傾向があります.ポジションのサイズと利益を取ることは制御されるべきです.
バックテスト結果は,ある程度オーバーフィットされる可能性があります.パラメータの感度が強度のためにテストされるべきです.
適切なストップ・ロスのレベルを設定する必要があります.
トランザクションコストは実際の収益性に影響を及ぼす可能性があります.異なる製品に対する取組因子は考慮されるべきです.
戦略を改善する方法:
ウォークフォワード最適化と機械学習を使用して EMA 期間パラメータを最適化して最適な組み合わせを見つけます
ADX,CCIなどのトレンドフィルター指標を追加して 不確実なトレンドで取引を避ける.
実際の取引がシグナルを誘導していることを確認するために バランス・ボリュームに取引量などのボリューム指標を追加します
動的ストップ損失を導入し,市場の変動に基づいてストップを自動的に調整します.
関連製品を組み合わせて,リスク管理のために関連性を利用する.
パラメータ最適化,機能エンジニアリング,シグナルフィルタリングなどのための機械学習を導入します
取引コストを考慮し ストップとサイズを調整して 取引頻度を減らす
適応性を向上させるために,製品の特徴に基づいてパラメータをカスタマイズします.
安定性を向上させるための他の戦略と組み合わせた複合戦略枠組みを設計する.
これらの改善により リアルタイム取引の戦略は より堅牢で 収益性が高まります
この戦略は,二重EMAクロスオーバーを使用して取引信号を生成し,中長期のトレンドを効果的に追跡することができます.利点は,そのシンプルさと良いバックテストの結果にあります.これは初心者が使用しやすくします.しかし,リスクは存在し,パラメータ最適化,指標を追加,ダイナミックストップ,取引コストの最適化などを通じて管理されるべきです.この戦略は,スタンドアロンの使用または,実践性を高めるために他者と組み合わせることができます.
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(true,"UseStopLoss") window() => time >= timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false stopLoss = input(20, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) if (longEMA) strategy.entry("LongId", strategy.long, when=window()) if (shortEMA) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)