2本のEMA移動平均線とATRインジケーターを組み合わせてフィルタリングするトレンドフォロー戦略
概要
この戦略は、ダブルEMA(指数平滑移動平均線)を用いてゴールデンクロスで買い、デッドクロスで売りを行う古典的なトレンドフォロー戦略です。さらにATR指標とADX指標を追加フィルターとして使用し、強いトレンド時には追跡し、レンジ相場時にはリスクをコントロールします。
戦略の原理
本戦略は主に以下の要素に基づいています:
-
短期の8期間EMA線と長期の20期間EMA線を用いてゴールデンクロスとデッドクロスのシグナルを生成します。EMA線自体がトレンドフォロー特性を持ちます。
-
ATR指標は直近の価格変動幅を示します。ATR指標を正規化することで、EMA線クロスのフィルター条件を動的に調整し、強いトレンド追跡時には条件を緩め、レンジ相場時にはフィルターを強化してリスクをコントロールします。
-
ADX指標はトレンドの強さを判定します。ADX値が30を超えると強いトレンドとみなし、その際には早期に損切りで防御します。
-
上昇・下降トレンドを判断して買い・売りのタイミングを決定します。強気相場ではゴールデンクロスで買い、弱気相場ではデッドクロスで売ります。
-
出来高フィルター:出来高が増加したタイミングでエントリーします。
-
USD指数で米ドルの強弱を簡易判断し、ドルが強い場合はストップロスと利食いの幅を広げます。
-
スーパートレンド指標と組み合わせて全体の相場の流れを判断し、買い・売りのタイミングを補助します。
本戦略はトレンド指標とレンジ指標を十分に組み合わせ、パラメータを動的に調整することで、トレンドを追跡しながらリスクをコントロールします。
戦略の利点
-
ダブルEMA線システムでトレンドを判断。EMAは平滑化効果があり、偽のブレイクアウトを効果的にフィルターできます。
-
ATR指標でEMA線クロスのフィルター条件を動的に調整し、戦略が様々な市場環境に柔軟に対応できます。
-
ADX指標と出来高を補助判断指標として用いることで、レンジ相場での損失を回避します。
-
USD指数とスーパートレンド指標で大きなトレンドを判断し、判断精度を高めます。
-
リスク管理パラメータが米ドルの強弱に応じて自動調整され、ドル高時にはストップロスと利食いの幅が拡大します。
-
シンプルで直感的なゴールデンクロス・デッドクロスの売買シグナルとストップロス・利食い戦略を用いており、実装とバックテストが容易です。
戦略のリスク
-
ダブルEMA線システムではトレンド転換点の判断に遅れが生じる可能性があります。
-
ATRパラメータの選択が適切でないと、過度に攻撃的または保守的になる恐れがあります。
-
ADX指標のパラメータ最適化が必要で、ADXの高値判断を誤るとトレンドを見逃す可能性があります。
-
USD指数およびスーパートレンド指標の判断が誤るリスクがあります。
-
ストップロスの幅が小さすぎると損失が拡大し、大きすぎるとポジションが拘束される恐れがあります。
最適化のポイント
-
MACDなどの他の指標を組み合わせてトレンド転換点を判断することも検討できます。
-
より多くの過去データを用いてATRパラメータ空間を学習し、最適なパラメータ範囲を見つけます。
-
異なるADXパラメータをテストし、ADX高値の判断を最適化します。
-
USD指数と市場全体の動向を判断するための変数を増やします。
-
バックテストデータから最適なストップロス幅を算出します。
-
ストップロスを移動ストップロスやボラティリティストップロスに変更することも検討します。
-
ポジションサイズや保有期間の最適化を継続します。
まとめ
本戦略は古典的なダブルEMA線システムと複数の補助指標を統合し、パラメータを自動最適化することで、比較的完成度の高いトレンドフォロー戦略を実現しています。市場環境の変化に柔軟に対応し、トレンドを追跡しながらリスクをコントロールします。ただし、ストップロスや指標パラメータについてはさらなるテストと最適化が必要であり、より安定した収益を得るために改善が求められます。本戦略の考え方は参考にし、改良を加える価値があります。
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)
// Initialize variables to track if a buy order has been placed and number of periods since the last buy- 1

