二重移動平均クロスオーバーとハル移動平均定量戦略の組み合わせ

HMA MA WMA
作成日: 2024-11-29 16:53:05 最終変更日: 2024-11-29 16:53:05
コピー: 2 クリック数: 514
1
フォロー
1617
フォロワー

二重移動平均クロスオーバーとハル移動平均定量戦略の組み合わせ

概要

この戦略は,ハル移動平均 (Hull Moving Average, HMA) の交差信号に基づいて取引する. 2つのHMAラインの高速と遅さを計算し,交差する際に取引信号を生成する. HMAは,移動平均の特殊な組み合わせを重み付けることで遅滞を減らすための高度な移動平均指標であり,より迅速で滑りやすい市場トレンド信号を提供します.

戦略原則

戦略の核心は,異なる周期のHMAの交差点を利用して市場動向の転換点を捉えることである.HMAの計算プロセスは,3つのステップで構成される:最初に半周期のWMAを計算し,その後,完全な周期のWMAを計算し,最後に,これらの2つのWMAの特殊な組み合わせを使用して,元の周期の平方根のWMAとして周期を再計算する.速いHMA (デフォルト9サイクル) がゆっくりとしたHMA (デフォルト16サイクル) を上方へ渡るとき,多行シグナルを生成し,速いHMAがゆっくりとしたHMAを下方へ渡るとき,空行シグナルを生成する.

戦略的優位性

  1. 信号反応の迅速性:HMAは,特別な計算方法によって,従来の移動平均の遅延を大幅に削減し,市場トレンドの転換をより早く捉えることができる.
  2. 雑音フィルター: 2つの均線の交差確認により,市場雑音を効果的にフィルターし,偽信号を低減する.
  3. パラメータの柔軟性: 戦略は,異なる市場環境に対応して,早速と遅速の周期パラメータを調整することができます.
  4. 視覚的明瞭性:戦略は,分析と最適化に役立つように,グラフに平均線と取引シグナルの両方を明確に表示します.

戦略リスク

  1. 横軸の振動状況下では,頻繁に交差する取引が過剰取引と連続的なストップ損失を引き起こす可能性があります.
  2. 遅滞リスク:HMAは従来の平均線よりも遅滞が小さいが,依然として一定の遅滞があり,最適な入場点を逃す可能性がある.
  3. パラメータの感受性: パラメータの異なる組み合わせは,非常に異なる取引結果をもたらす可能性があり,慎重なパラメータ最適化が必要である.
  4. 偽の突破リスク: 市場が偽の突破を起こし,誤った取引シグナルを引き起こす可能性があります.

戦略最適化の方向性

  1. トレンドフィルター導入: ADXまたはトレンド強度指標を追加し,トレンドが明確である場合にのみ取引を行う.
  2. オプティマイズされた止損機構:ATRまたは波動率に基づく止損戦略のような動的止損を設計する.
  3. 取引確認条件の追加: 交差量,動量指標などの合成が補助的な確認信号である.
  4. パラメータ自律化:市場の変動に基づく動的パラメータ調整メカニズムの開発.
  5. リスク管理の最適化:ポジション管理と資金管理モジュールを追加.

要約する

これは,HMA交差に基づく量化取引戦略で,従来の移動平均の遅れを減らすことによってよりタイムリーな取引信号を提供している.戦略は簡潔に設計され,容易に理解し,実行できますが,実際のアプリケーションでは,市場環境の適応性とリスク管理に注意が必要です.継続的な最適化と改善により,この戦略は,健全な取引システムになる可能性があります.

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Hull Moving Average Crossover", overlay=true)


fastLength = input.int(9, "Fast HMA Length", minval=1)
slowLength = input.int(16, "Slow HMA Length", minval=1)


hma(src, length) =>
    wma1 = ta.wma(src, length / 2)
    wma2 = ta.wma(src, length)
    ta.wma(2 * wma1 - wma2, math.floor(math.sqrt(length)))


fastHMA = hma(close, fastLength)
slowHMA = hma(close, slowLength)


plot(fastHMA, color=color.blue, title="Fast HMA")
plot(slowHMA, color=color.red, title="Slow HMA")


longCondition = ta.crossover(fastHMA, slowHMA)
shortCondition = ta.crossunder(fastHMA, slowHMA)


if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)


plotshape(longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)