この戦略は,低リスク取引を実装するためにモメンタム・ダブル・ムービング・エベレア・クロスオーバー方法を使用している. 異なる期間の2つのムービング・エベレア,高速線とスローラインを使用して,クロスオーバーに基づいてエントリーと出口信号を決定する. この戦略の目標は,トレンドの変化を把握し,主要なトレンド中に長期的利益を生むことである.
この戦略は,速いWMAラインと遅いWMAラインのクロスオーバーに基づいて取引信号を生成する. 速いラインの期間は,遅いラインの半分の期間である. 速いラインが下からスローラインを越えると買い信号が生成される. 速いラインが上からスローラインを下に越えると売れ信号が生成される. 偽信号をフィルタリングするために,また,2つの移動平均の違いに基づいてモメントインジケーターを組み込む. モメントインジケーターが形状要件を満たすと同時にMAクロスオーバーが発生するときにのみ取引信号が生成される.
具体的には,鍵となる論理は以下のとおりです.
価格入力とパラメータを定義する:OHLC価格データを取得する.パラメータを定義する.
二重MAを計算する: 2期MA n2ma,z期MA nmaを計算する.
MA差を計算する: 2つのMAの差を計算する.
モメントインジケーターを計算する:周期sqnでdiff - n1,n2,n3の移動平均を計算する.
クロスオーバーを決定する: n1 を n2 の上に緑色で,他の場合は赤色でマークする.
グラフ形:グラフn1とn2
シグナルを識別する: n1,n2,n3が同じ方向に並ぶときに信号を生成する.
入口と出口:スローラインとモメントインジケーターが一致する時,スローラインとモメントインジケーターが一致する時,スローラインとモメントインジケーターが一致する時,ショート.
この戦略は2つのMAクロスオーバーとモメントインジケーターを組み合わせることで,誤った信号を効果的にフィルタリングし,トレンド変化の開始時にのみ取引を生成し,良い戦略パフォーマンスを生み出します.
MAクロスオーバーは,トレンドの変化を検出し,トレンドから利益を得ます.
短期の変動に惑わされないように 誤った信号をフィルターします
大規模なトレンド変化による取引のみで,不必要な取引頻度が減少します.
パラメータ最適化は 異なる製品の特性に適しています
ピラミッド構造を許せば 利益サイクルが伸びます
また,注意すべきリスクもいくつかあります.
ダブルMAクロスオーバーは 傾向の変化を検出するのに遅れがあり 最適なタイミングを逃している可能性があります
モメントインジケーターのパラメータの設定が不適切であれば 信号が悪い可能性があります
長期と短期間の保持の間には不均衡がある.
この戦略には 不安定な市場状況にうまく対応するメカニズムがない.
過度に最適化される危険性があり,パラメータの段階的な最適化が必要です.
解決法
価格変動を早期に検出するために他の主要指標を追加することを検討してください.
最良の組み合わせを見つけるために 運動量指標のパラメータを最適化します
制御保持期間に変動指標を追加する.
単一の損失を減らすためにポジションのサイズを制限する.
過剰な最適化防止のためにパラメータの強度をテストする.
戦略は以下の点で改善できる:
各製品に最適なパラメータを見つけるために,様々な種類のMAをテストする.
MACDやボリンジャー帯などの指標を追加して 傾向の変化を判断します
ターニングポイントを正確に決定するために 入力のタイミングを最適化します
利潤を固定するために 尾行停止を使用して出口を最適化します
製品特性に応じてパラメータ最適化を行う.
適切なパラメータの組み合わせを見つけるために 機械学習を使用します
リスク制御のための動的位置サイズメカニズムを構築する.
戦略評価のための シェープ比率,利益因子などの 定量指標を追加します
バックテストエンジンを用いて過去のデータでのパフォーマンスを評価する.
概要すると,このモメンタムダブルMA戦略は,MAクロスオーバーとモメンタムを使用して主要なトレンド逆転点を特定し,低リスク取引を可能にします.安定した利益と簡単な実装などの利点がありますが,パラメータ最適化やリスク管理などの改善の問題もあります.市場状況により良く適応するために,エントリー/エグジットタイミング,ダイナミックポジションサイジングなどの分野を精製することができます.広範な検証と評価は,強力な戦略パフォーマンスを確保するために重要です.全体的に,この戦略は定量的な取引にシンプルで効果的なアプローチを提供します.しかし,一貫した投資リターンを生み出すために継続的な最適化と検証が必要です.
/*backtest start: 2022-11-10 00:00:00 end: 2023-11-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //OCTOPUS Indicator Strategy strategy("FAVEL corp. Indicator Strategy", shorttitle="FAVEL corp. Monarch", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=420, default_qty_value=20, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) z=input(defval=60,title="HullMA cross") p=input(ohlc4,title="Price data") n2ma=2*wma(p,round(z/2)) nma=wma(p,z) diff=n2ma-nma sqn=round(sqrt(z)) n2ma1=2*wma(p[1],round(z/2)) nma1=wma(p[1],z) diff1=n2ma1-nma1 sqn1=round(sqrt(z)) n2ma2=2*wma(p[2],round(z/2)) nma2=wma(p[2],z) diff2=n2ma2-nma2 sqn2=round(sqrt(z)) n1=wma(diff,sqn) n2=wma(diff1,sqn) n3=wma(diff2,sqn) c=n1>n2?green:red n1e=plot(n1, color=c, linewidth=1, offset=2) n2e=plot(n2, color=c, linewidth=1, offset=2) fill(n1e, n2e, color=c, transp=75) plot(cross(n1, n2) ? n1 : na, style = circles,color=c, linewidth = 4) closelong = p<p[1] and n1<n3 if (closelong) strategy.close("BUY") closeshort = p>p[1] and n1>n3 if (closeshort) strategy.close("SELL") longCondition = strategy.opentrades<1 and n1>n2 and p>p[1] and n1>n3 if (longCondition) strategy.entry("BUY",strategy.long) shortCondition = strategy.opentrades<1 and n1<n2 and p<p[1] and n1<n3 if (shortCondition) strategy.entry("SELL",strategy.short)