ダブルハル移動平均クロスオーバーモメンタムクオンツ戦略

HMA WMA 移动平均线 交叉信号 趋势跟踪 动量策略 买卖信号
作成日: 2025-08-04 10:57:42 最終変更日: 2025-08-04 10:57:42
コピー: 0 クリック数: 160
2
フォロー
319
フォロワー

ダブルハル移動平均クロスオーバーモメンタムクオンツ戦略 ダブルハル移動平均クロスオーバーモメンタムクオンツ戦略

概要

双ヘル移動平均の交差移動量策略は,ヘル移動平均 (Hull Moving Average,HMA) をベースにしたトレンド追跡システムである.この戦略は,標準のHMAと平滑版のHMA (HMA3) の関係を利用して,市場トレンドの変化を識別し,ブル・ベア・マーケットの条件下で継続と反転の高い確率を生成する.この二つの異なる平滑度の移動平均を比較することによって,この戦略は,価格の変動量に敏感なまま,市場騒音を効果的に減らすことができる.システムは,交差論理によって明確な多空信号を生成し,TradingView戦略エンジンを用いて取引決定を自動化する.

戦略原則

この戦略の核心原則は,二つの異なる計算方法のヘル移動平均の間の相対的な位置とその交差状況を比較することである.具体的実施方法は以下の通りである.

  1. 標準HMA ((変数a): ウィリアム・ハルが開発した原始アルゴリズムを使用して,3段階の計算プロセスを経てより敏感な移動平均を実現する.

    • 計算周期がlength である WMA
    • 計算周期はlength/2のWMAで
    • 短周期WMAの2倍を長周期WMAから減算すると,原始HMAが得られます.
    • 原始HMAを周期√lengthのWMA平滑にする
  2. 滑らかなHMA3 ((変数b):より複雑な滑らかなアルゴリズムを使用して,複数のWMA組合せで実現:

    • length/2を基本周期pとして使用
    • 3つの異なる周期のWMA (p/3,p/2,p) を加重平均として組み合わせる
    • 結果に対して周期pのWMA平滑
  3. 信号生成の論理:

    • bがaを下から通過すると,[1] < a[1]) の場合,購入シグナルを生成する
    • aがbの線を下から通過すると,[1] < b[1]) のとき,出売シグナルを生成する.
  4. 戦略の実行論理:

    • 買入シグナルが表示されたとき,空頭ポジションを平らにして,多頭ポジションを開きます.
    • 売り込み信号が出たとき,多頭ポジションをクリアし,空頭ポジションを開きます.

戦略には,トレンドの方向に合わせて変色する移動平均や明確な買入シグナルマーカーなどの視覚的な構成要素も含まれ,トレーダーが市場状態を直感的に理解するのを助けます.

戦略的優位性

  1. 市場騒音の減少:双HMAシステムは,短期的な価格変動を効果的にフィルターし,偽信号を減らす一方で,真のトレンドの転換に対する感受性を保ちます.標準のHMAは,従来の移動平均よりもすでに敏感であり,平らなHMAとの組み合わせは,信号の質をさらに向上させます.

  2. トレンドの早期発見: ハル移動平均アルゴリズムの特性により,この戦略は,従来の移動平均よりも早くトレンドの変化を認識することができ,その結果,より良い入場時間を提供します.

  3. 明確なビジュアルフィードバック:戦略は,直感的なカラーコード ((牛市は緑で,熊市は赤) と買入シグナルマークを提供し,トレーダーに市場の状態を迅速に評価できるようにする.

  4. 完全な取引メカニズム: 戦略は,信号だけでなく,完全なポジション管理ロジックを含み,ポジションの自動処理,開設と平和のポジション,真の自動取引を実現します.

  5. フレキシブルなパラメータ構成:ユーザーは,異なる取引スタイルと市場環境に対応するために,個人好みや市場の特徴に応じてHMAの長さと価格源を調整できます.

  6. 計算効率が高い:複雑な多指標システムと比較して,この戦略は比較的単純な数学計算を使用し,過度に適合するリスクを軽減しながら,実行効率を維持する.

戦略リスク

  1. 振動市場の偽信号:双HMAシステムが騒音を軽減したにもかかわらず,明確なトレンドがない横軸市場では,連続した損失取引につながる頻繁な交差信号が生じることがあります.波動率指数やトレンド強度確認などの追加のフィルタリング条件の追加を検討することができます.

  2. 落後性問題:HMAは従来の移動平均よりも落後性があるが,移動平均に基づくいかなるシステムにも一定の落後性があり,激しい波動の市場において最適な入場点または出場点を逃す可能性がある.

  3. パラメータの感受性:戦略の性能は選択されたHMA長さのパラメータに大きく依存し,異なる市場と時間枠では異なる最適パラメータが必要になる可能性があります.特定の市場環境の最適なパラメータを決定するために,全面的な反省を行うことをお勧めします.

  4. 停止メカニズムの欠如:現在の戦略の実現には,統合された停止機能がなく,トレンドが突然逆転した場合には,大幅な撤退を引き起こす可能性があります.ATRベースの停止または時間停止などの停止条件を追加することを考慮する必要があります.

  5. 単一の指標依存:戦略はHMA指標のみに依存し,多次元的な市場分析が欠如し,特定の市場条件下で不良なパフォーマンスを発揮する可能性があります.戦略の安定性を高めるために,動量指標や波動率指標などの他のタイプの指標と組み合わせることを考慮してください.

戦略最適化の方向性

  1. トレンドフィルターを追加:ADX ((平均方向指数) のような追加のトレンド確認指標を導入し,強いトレンドが存在すると確認された場合にのみ取引を実行し,横軸市場の頻繁な取引を避ける.実施方法は:ADX値が特定の値 (例えば25) よりも大きい場合にのみHMAクロスシグナルを考慮する.

  2. 統合波動率適応機構:市場波動率の動向に基づいてHMAパラメータを調整し,高波動率環境ではより長い周期を使用し,低波動率環境ではより短い周期を使用する.これはATR (真波動幅の平均値) を計算してHMA長さのパラメータにマッピングすることで実現できる.

  3. スマート・ストップ・メカニズムの実現:ATRベースのストップを追加するか,HMAの逆のモバイル・セット・ストップを追跡するなど,モバイル・ストップを使用し,既得利益を保護し,潜在的な損失を制限する.

  4. 取引量確認の導入:取引量指標を信号生成ロジックに組み込み,取引量増加に伴って購入信号を要求し,信号の信頼性を高めます.取引量がn日平均値より高いかどうかを確認できます.

  5. ポジション管理の最適化: ポジションのサイズをリスクに基づく調整を実現し,固定された割合の投入ではなく.ATRに基づいて各取引のリスクを計算することができ,各取引のリスクが一致することを保証する.

  6. タイムフィルターを追加:市場の時間特性を考慮し,アジアの昼食時間や米国の非農産物データの発表前後の波動的な期間のような,低効率な取引の時期を避ける.

  7. リコール入場ロジックを追加:トレンドの方向が確認された後に,交差点で直接入場するのではなく,小さなリコールを待つことで,よりよい入場価格を得ることができる.これは,価格とHMAの間の距離を検出することによって実現できる.

要約する

双ヘル移動平均交差動量定量策略は,精巧に設計されたトレンド追跡システムであり,二つの計算方法のHMA指標の関係を利用して,明確な多空信号を提供する.標準的なHMAと平滑版HMA3の相対的な位置と交差を比較することによって,策略は,価格動量変化に対する感受性を維持しながら,市場騒音を効果的に軽減することができる.策略の優点は,明確な信号生成論理,直感的な視覚的フィードバック,そして完全な取引機構にある.

しかし,この戦略は,波動的な市場の偽信号が多く,パラメータが非常に敏感で,ストップメカニズムが欠如するなどのリスクにも直面しています.トレンドフィルターを追加し,波動率適応メカニズムを統合し,スマートストップを実現し,取引量確認などの最適化方向を導入することで,戦略の安定性と収益性を大幅に向上させることができます.最も重要なことに,トレーダーは,自身のリスク承受能力と取引目標に基づいて,戦略を全面的に反省し,パラメータを数値的に最適化し,特定の市場環境に最も適した配置を見つけます.

全体として,これは,中長期のトレンドを追跡するトレーダーに適した,より複雑な取引システムの中核的な構成要素として使用できる,基礎がしっかりした,スケーラビリティが良好な量化戦略の枠組みです.

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

//@version=6
strategy("HMA Strat", shorttitle="HMAstrat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

// === INPUTS ===
length = input.int(24, minval=1, title="HMA Length")
src = input.source(hl2, "Source")
showSignals = input.bool(true, "Show Buy/Sell Signals")

// === FUNCTIONS ===
hma(_src, _length) =>
    wma1 = ta.wma(_src, _length)
    wma2 = ta.wma(_src, _length / 2)
    rawHMA = 2 * wma2 - wma1
    ta.wma(rawHMA, math.round(math.sqrt(_length)))

hma3(_src, _length) =>
    p = _length / 2
    ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)

// === HMA CALCULATIONS ===
a = hma(src, length)
b = hma3(src, length)

// === COLOR LOGIC ===
isBull = b > a
colorLine = isBull ? color.lime : color.red
fillColor = color.new(colorLine, 80)

// === PLOTTING ===
p1 = plot(a, color=colorLine, linewidth=1)
p2 = plot(b, color=colorLine, linewidth=1)
fill(p1, p2, color=fillColor)

// === SIGNALS ===
crossUp = b > a and b[1] < a[1]
crossDown = a > b and a[1] < b[1]

plotshape(showSignals and crossUp, title="Buy Signal", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.green, text="Buy")
plotshape(showSignals and crossDown, title="Sell Signal", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.red, text="Sell")

// === STRATEGY LOGIC ===
// Close opposite position before opening a new one
if crossUp
    strategy.close("Short")
    strategy.entry("Long", strategy.long)

if crossDown
    strategy.close("Long")
    strategy.entry("Short", strategy.short)