ダブル・ムービング・アベア HullMA・クロスオーバー・トレンド戦略は,ダブル・ムービング・アベアのクロスオーバーをベースとしたトレンドフォロー戦略である.重量化ムービング・アベア (WMA) ラインを使用してダブル・ムービング・アベアシステムを構築し,クロスオーバー時に取引信号を生成する.この戦略には,信号をさらにフィルタリングするために価格ブレイク検証も組み込まれている.
HullMAクロスオーバートレンド戦略は,wma1,wma2,wma3を含む異なる期間の3つのWMAラインを使用する.wma2とwma3は二重移動平均システムを構築する.wma3の上のwma2の交差は上昇信号を与え,wma3の下のwma2の交差は下落信号を与える.wma1は補助基準線として機能する.wma2は,wma3の上のwma2の交差が上昇信号を与える.wma2は,wma3の上のwma2の交差が上昇信号を与える.wma2は,wma3の上のwma2の交差が上昇信号を与える.wma3は,wma3の上のwma2の交差信号を与える.
さらに,この戦略はシグナル検証を強化するためにハル移動平均を使用している.特に,2期WMA倍率 (n2ma) とn期WMA (nma) の差を計算する.差が上昇するときにのみ,牛シグナルが有効であると確認される.差が落ちるときにのみ,ベアシグナルが有効であると確認される.
この戦略には,価格検証も含まれます.価格が前日よりも高くなったときのみ,牛シグナルがロングオーダーに有効であることが確認されます.価格が前日よりも低いときのみ,ベアシグナルがショートオーダーに有効であることが確認されます.
HullMAのクロスオーバー・トレンド戦略は,ダブル・ムービング・アベア・クロスオーバーと価格検証を組み合わせ,誤った信号を効果的にフィルタリングすることができます.これが最大の強みです.また,様々な期間の3つの移動平均線を使用して,戦略は早期に異なるレベルのトレンドを把握できます.ストップ・ロスのメカニズムはかなり安定し,信頼性があります.
HullMAクロスオーバートレンド戦略は,トレンドフォローする戦略として,レンジ・バインド市場では比較的多くの取引とスライプコストを生むことができる.さらに,ダブル・ムービング・平均クロスオーバーシステムは過度に敏感になり,横向トレンド中に誤った信号を発信する傾向がある.移動平均パラメータを調整するか,それに応じて追加のフィルターを課すことが推奨される.
HullMAの二重移動平均のクロスオーバートレンド戦略は,次の側面で改善できる:
最適なパラメータ組み合わせを見つけるために移動平均パラメータを最適化
偽のブレイクを排除するために,ボリュームや波動性などのフィルターを追加します
信号の質を改善するための補足的な検証として他の指標を組み込む
移動平均期パラメータを動的に最適化
概要すると,デュアル・ムービング・平均HullMA・クロスオーバートレンド戦略は,安定かつ信頼性の高いトレンドフォロー戦略である.デュアル・ムービング・平均クロスオーバーと価格検証を組み合わせて高品質の信号を生成する.パラメータ調整とフィルターを追加することで,誤った信号をさらに削減し,より良いパフォーマンスを達成することができる.中長期のトレンドを捉えるのに適しており,定量的な取引のための堅固な選択である.
/*backtest start: 2023-02-25 00:00:00 end: 2024-02-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("ZendicatoR", overlay=true) dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001) keh=input(title="Double HullMA Cross",defval=7, minval=1) che1=input(title="MA 1",defval=34,minval=1) che2=input(title="MA 2",defval=144,minval=1) che3=input(title="MA 3",defval=377,minval=1) amnt=input(title="TP ($)",defval=4200,minval=1) wma1=wma(close,che1) wma2=wma(close,che2) wma3=wma(close,che3) tms=10000000000000 A=request.security(syminfo.tickerid, 'D', close)*tms B=request.security(syminfo.tickerid, 'D', close[1])*tms C=A>B?green:red D=wma2>wma3?green:red plot(wma1,style=line,color=C,linewidth=4) p1=plot(wma2,style=line,color=D) p2=plot(wma3,style=line,color=D) fill(p1, p2, color=D, transp=75) n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma,sqn=round(sqrt(keh)) n2ma1=2*wma(close[2],round(keh/2)) nma1=wma(close[2],keh) diff1=n2ma1-nma1,sqn1=round(sqrt(keh)) n1=wma(diff,sqn)*tms n2=wma(diff1,sqn)*tms closelong = A*tms<B*tms and n2*tms>n1*tms and strategy.openprofit>amnt if (closelong) strategy.close("Long") closeshort = A*tms>B*tms and n1*tms>n2*tms and strategy.openprofit>amnt if (closeshort) strategy.close("Short") longCondition = A*tms>B*tms and n1*tms>n2*tms if (longCondition) strategy.entry("Long",strategy.long) shortCondition = A*tms<B*tms and n1*tms<n2*tms if (shortCondition) strategy.entry("Short",strategy.short)