適応型移動平均グリッド定量取引戦略

SMA MA GRID ATR volatility MEAN REVERSION
作成日: 2025-07-02 14:08:13 最終変更日: 2025-07-02 14:08:13
コピー: 0 クリック数: 584
2
フォロー
319
フォロワー

適応型移動平均グリッド定量取引戦略 適応型移動平均グリッド定量取引戦略

概要

適応均等格子量化取引戦略は,均等格子と格子取引の理念に基づいた量化戦略である.この戦略は,価格の単純な移動平均 (SMA) を市場動向の中心線として計算し,中央線の下に一定割合の格子ラインを設定する.これらの格子線の間の価格が波動するときに,戦略は,価格が下の格子線に触れたときに買入し,上の格子線に触れたときに売出する.この取引方法は,価格が波動するが,全体的に均等線の周りに振動する市場の環境で特に適しています.

戦略原則

自適応均線格子定量取引戦略の核心原則は,市場価格の平均値回帰特性に基づいている. 戦略は以下のステップで実現する.

  1. 価格の単純な移動平均 ((SMA) を計算し,市場の中間基準となる. 300時間の移動平均がコードで使用され,短期的な変動をフィルタリングするのに十分な周期である.
  2. 移動平均に基づいて,上下偏差率 (この例では3%) を設定し,グリッド取引の上下境界を決定する.
  3. ユーザが設定した格子線数 ((最大15本) に応じて,上下境界の間に均等に分布する格子線。
  4. 取引の正確な実行を保証するために,ブール配列を使用して,各格子位置の保有状態を記録します.
  5. トランザクションの論理:
    • 価格が特定の格子線より低く,その位置が保有されていないとき,その格子位置で購入する.
    • 価格が特定の格子線より高く,次の低い格子位置が持仓されているとき,その低い位置の持仓を平仓する.

この戦略の本質は,価格が一定の範囲内で高頻度波動を捕捉し”,低買い高売り”を実現することである.この戦略は,複数のポジションを同時に保有することを許し,各ポジションは異なる格子線に対応し,この設計は,この戦略が価格の波動をより充分に利用できるようにする.

戦略的優位性

適応型均線格子量化取引戦略には以下の顕著な利点があります.

  1. 適応力がある: 戦略は,移動平均に基づいてグリッドの位置を自動的に調整し,異なる市場環境と価格レベルの変化に対応します.
  2. リスク分散複数のグリッドの位置での取引により,資金の分散化を実現し,単一の取引のリスクを軽減します.
  3. 利益の機会が頻繁に訪れます波動する市場では,小さな波動がもたらす利益の機会を捉える戦略がよくあります.
  4. 明確な出入り信号取引シグナルは,明確な価格に基づいてグリッドライン条件に触れて,主観的な判断を減らす,戦略の実行の一貫性を高める.
  5. パラメータは簡潔で簡単に調整できます.戦略は,最適化と反測を容易にするために,移動平均の長さ,格子偏差率,および格子数の3つの主要なパラメータを調整するだけです.
  6. 論理がはっきりしている: 格子価格と注文状態を保存する配列構造を使用し,コードロジックは明確で,理解し,維持しやすい.
  7. ビジュアルサポート戦略は,取引区間と潜在的な取引先を直視的に観察できる格子線の可視化を提供します.

戦略リスク

この戦略は合理的に設計されていますが,以下の潜在的なリスクがあります.

  1. トレンド市場のリスク: 強いトレンド市場では,価格が1方向に継続的に移動し,策略が一方的に継続的にポジションを開き,ポジションの機会が不足することになり,資金占有が増加し,大きな損失を引き起こす可能性があります. 解決策は,トレンドフィルター条件を追加するか,最大ポジション制限を設定することです.
  2. パラメータ感度: 移動平均線長と格子偏差率の設定は,戦略のパフォーマンスに大きな影響を与える.不適切なパラメータは,格子が過幅 ((取引頻度が低い) または過度に狭くなり ((偽信号が増加) することがあります.充分な反射で最適なパラメータの組み合わせを決定することが推奨されています.
  3. 資金管理のリスク戦略は最大15の同期ポジションを許容し,取引毎の資金比率を合理的に制御しない場合,資金過剰集中につながる可能性があります.取引毎の固定資金比率または動的にポジションサイズを調整する設定をすべきです.
  4. スライドポイントと手数料の影響:高周波取引戦略は,滑り点と手数料に敏感であり,特にグリッドが狭い場合である.これらのコスト要因を反測で考慮し,グリッドの幅をそれに合わせて調整することが推奨されている.
  5. 流動性のリスク: 流動性の低い市場や激しい変動の時期に,理想的な価格に従って取引を実行することが困難になり,戦略のパフォーマンスを影響する.十分な流動性の取引品種を選択し,滑点保護を設定することを考慮する必要があります.

戦略最適化の方向性

この戦略は,コードの分析に基づいて,以下の方向で最適化できます.

  1. トレンドフィルターを追加:他の技術指標 ((MACD,RSI,または方向性指標DMIなど) と組み合わせて市場動向を判断し,逆転取引による損失を避けるために,明らかなトレンド市場でグリッド取引戦略を一時停止または調整する.
  2. 動的格子幅:市場の変動 (ATR指数など) に応じて格子偏差率を動的に調整し,変動が増加すると格子間隔を拡大し,変動が減少すると格子間隔を縮小し,異なる市場条件によりよく適応する.
  3. ストップロスメカニズムの導入:各格子位置にストップ条件を設定し,市場が異常な波動が発生した場合に資金の安全を確保する.ATRベースの動的ストップまたは固定比率ストップを考慮することができる.
  4. 資金管理の最適化ダイナミックなポジション管理を実現し,口座資金,市場の変動,既定のポジション状況に応じて,取引ごとに資金の割合を動的に調整し,資金利用効率とリスク管理能力を向上させる.
  5. フィルタリング時間を追加: 異なる時間帯の市場特性を分析し,適切な時間帯でグリッド取引を活性化し,不適切な時間帯で取引頻度を低下させ,または取引を一時停止する.
  6. 複数のタイムサイクルを確認: 取引確認の時間周期が長く短くなり,偽信号や無効取引が少なくなる.
  7. コード効率を最適化する: 現在のコードの格子線可視化部分では,重複するプロット文を使用しており,循環構造の最適化を使用して,コードの簡潔性と維持性を向上させることができます.

要約する

適応均等格子定量取引戦略は均等回帰原理に基づく格子取引システムで,移動平均線の周りに格子を設定することで価格変動をもたらす取引機会を捉える.戦略は簡潔で,パラメータが少なく,調整が容易で,特に揺れ動いている市場での適用に適しています.戦略の主要な優点は,自律的に異なる価格レベルに適応し,複数の格子位置を通じてリスクを分散させるための自己適応性とリスク分散性です.

しかし,この戦略は強いトレンド市場ではリスクにさらされ,トレンドフィルタリングとストップダスのメカニズムを追加して最適化する必要があります.さらに,格子幅の動的調整,資金管理の改善,および複数の時間周期の確認の追加などの最適化方向も探索に値します.これらの最適化により,戦略は異なる市場環境でより安定的かつ優れたパフォーマンスを期待しています.

経験豊富な量化トレーダーにとって,この戦略は優れた基礎の枠組みを提供し,個人の取引スタイルとリスクの好みに合わせてさらにカスタマイズと最適化することができ,市場変動を捕捉する格子取引の優位性を発揮します.

ストラテジーソースコード
/*backtest
start: 2025-04-01 00:00:00
end: 2025-06-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true, pyramiding=15)

// 输入参数设置
ma_length = input.int(300, '移动平均线长度', group='移动平均线条件', step=10)
std = input.float(0.03, title='网格上下偏差率', group='网格条件', step=0.01)
grid = input.int(15, maxval=15, title='网格线数量', group='网格条件')

// 计算移动平均线及网格边界
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)

// 创建网格价格数组
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)

// 创建订单状态布尔数组(只初始化一次)
var order_array = array.new_bool(grid, false)

// 执行交易逻辑
for i = 0 to grid - 1 by 1
    // 买入逻辑:价格低于网格线且该位置未持仓
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    
    // 卖出逻辑:价格高于网格线且下一个网格位置持仓
    if close > array.get(grid_array, i) and i != 0
        if array.get(order_array, i - 1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

// 可视化网格线
plot(grid > 0 ? array.get(grid_array, 0) : na, color=color.yellow, transp=10)
plot(grid > 1 ? array.get(grid_array, 1) : na, color=color.yellow, transp=10)
plot(grid > 2 ? array.get(grid_array, 2) : na, color=color.yellow, transp=10)
plot(grid > 3 ? array.get(grid_array, 3) : na, color=color.yellow, transp=10)
plot(grid > 4 ? array.get(grid_array, 4) : na, color=color.yellow, transp=10)
plot(grid > 5 ? array.get(grid_array, 5) : na, color=color.yellow, transp=10)
plot(grid > 6 ? array.get(grid_array, 6) : na, color=color.yellow, transp=10)
plot(grid > 7 ? array.get(grid_array, 7) : na, color=color.yellow, transp=10)
plot(grid > 8 ? array.get(grid_array, 8) : na, color=color.yellow, transp=10)
plot(grid > 9 ? array.get(grid_array, 9) : na, color=color.yellow, transp=10)
plot(grid > 10 ? array.get(grid_array, 10) : na, color=color.yellow, transp=10)
plot(grid > 11 ? array.get(grid_array, 11) : na, color=color.yellow, transp=10)
plot(grid > 12 ? array.get(grid_array, 12) : na, color=color.yellow, transp=10)
plot(grid > 13 ? array.get(grid_array, 13) : na, color=color.yellow, transp=10)
plot(grid > 14 ? array.get(grid_array, 14) : na, color=color.yellow, transp=10)