ダブルハル移動平均取引戦略 (Dual Hull Moving Average Trading Strategy) は,ダブルハル移動平均を取引信号として使用する定量的な取引戦略である.単一の移動平均線を使用する伝統的な技術分析アプローチを基に,クロスオーバーポイントで長および短の決定を下すため,ダブルハル移動平均線に置き換える.
ダブル・ハル・ムービング・平均取引戦略の核心は,ダブル・ハル・ムービング・平均 (DHMA) である.DHMAは,異なる平均価格値を表現する中間線,上部線,下部線という3つの線で構成される.公式は以下のとおりである.
中間レール:モード (modeSwitch, src, len)
上部レール:HULL[0]
下鉄:HULL [2]
ここでMode関数は,HMA,EHMA,THMAなどの異なるHull MA変数から選択できます. srcは価格ソースを表し,lenは周期パラメータです.
戦略は DHMA のミドルレールを基準として使用し,価格関係を決定し,取引信号を生成します.
つまり,現在のバーの閉じる価格がミドルレールの値以上であれば,次のバーでロングを;閉じる価格が以下の場合は,次のバーでロングを閉じる.
"ダブル・ハル"移動平均取引戦略には以下の利点があります.
サポート/レジスタンス効果とトレンド追跡の改善のために,単一の移動平均線の代わりにトリプルバンドメカニズムを使用します.
一般的なMAsと比較して,Hull移動平均は遅延が少なく,価格変化によりうまく反応します.
簡単に理解するために伝統的な技術分析技術を採用し,アルゴ取引に適しています
論理はシンプルで明確で 実行が簡単で 高周波アルゴリズム取引に適しています
異なる製品と時間枠の最適化のために,カスタマイズ可能なハルMAタイプとパラメータ.
この戦略には多くの利点がありますが,いくつかのリスクも伴います.
市場が動揺している間 騒音の取引をフィルタリングするために微調整するパラメータ
この戦略は主にトレンドをフォローし,平坦な期間に効果が低下する.トレンド強さの追加フィルターは役立つかもしれない.
ハルクMAsは,特に短期的には,まだ一定の遅れがあります.パラメータ最適化とコンボインジケーターは,これを軽減することができます.
頻繁なシグナルが過剰な取引につながります. ポジションのサイズと取引頻度を管理してください.
戦略を最適化するための主な側面は以下の通りです.
ハルMA型とパラメータを最適化して,異なる製品に対するミドルレールの感度を微調整する.
トレーリングストップやインクリメンタルストップ・ロスのようなストップ・ロスのメカニズムを追加して,単一の取引損失額を制御します.
他の指標と組み合わせてトレンドの方向性と強さを決定し,罠を避ける.例えばMACD,KDなど.
取引数や利益比に基づく戦略活性化条件を追加し,サイクル終了数を制御し,出口を減らす.
複数のタイムフレームの組み合わせ 騒音を避けるため,より高いTFを用いることで,全体的な傾向を決定する.
入力論理を改良し 入り口の確実性を高めるために 入り口をキャンドルパターンで確認します
概要すると,ダブルハル移動平均取引戦略は,迅速に対応する,トレンドをフォローするハル移動平均を活用した定量的なアプローチで,取引シグナルを構築する.従来のMAと比較して,より迅速な応答とより良い追跡能力を持っています.戦略論理はシンプルで明確で,アルゴリズム取引のために自動化するのが簡単です.まだノイズやトレンドフォローの制限のリスクがあります.パラメータチューニング,ストップ損失,その他の指標を組み合わせるなどの技術が,実用的なパフォーマンスを向上させることができます.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close) src = input(close, title="Source") modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)") switchColor = input(true, "Color Hull according to trend?") candleCol = input(false,title="Color candles based on Hull's Trend?") visualSwitch = input(true, title="Show as a Band?") thicknesSwitch = input(1, title="Line Thickness") transpSwitch = input(40, title="Band Transparency",step=5) //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length) //SWITCH Mode(modeSwitch, src, len) => modeSwitch == "Hma" ? HMA(src, len) : modeSwitch == "Ehma" ? EHMA(src, len) : modeSwitch == "Thma" ? THMA(src, len/2) : na //OUT HULL = Mode(modeSwitch, src, length) MHULL = HULL[0] SHULL = HULL[2] //COLOR hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800 //PLOT ///< Frame Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) if HULL[0] > HULL[2] and testPeriod() strategy.entry("long", strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.close("long")