ダイナミックボラティリティインジケーター(VIDYA)とATRトレンドフォロー反転戦略の組み合わせ

ATR CMO SMA MA
作成日: 2024-12-13 10:21:14 最終変更日: 2024-12-13 10:21:14
コピー: 0 クリック数: 474
1
フォロー
1617
フォロワー

ダイナミックボラティリティインジケーター(VIDYA)とATRトレンドフォロー反転戦略の組み合わせ

概要

この戦略は,動的波動率指標 ((VIDYA)) に基づくトレンド追跡取引システムであり,ATRの波動によりトレンド識別とリスク管理能力が強化されます.この戦略は,動的に市場の波動に対する反応速度を調整することで,トレンド追跡能力を維持しながら,市場の逆転信号をタイムリーに捕捉することができます.システムはVIDYAを核心指標として採用し,ATRの波動により動的なストップポジションを設定し,市場の波動にスマートな適応を実現します.

戦略原則

戦略の核心は,VIDYA指標のダイナミックな特性を利用してトレンドを識別することです.VIDYAは,動力の変化を計算することによって,移動平均の重みを動的に調整し,異なる市場環境で異なる感度を持つようにします.具体的には:

  1. 価格の動きを計算するためにChande動力振動器 (CMO) を使用する
  2. 動量に基づく自己適応因子alpha
  3. ATRと結合して動的波動帯を構築
  4. 価格が上線を突破すると多調シグナルが生じ,下線を突破すると空調シグナルが生じます.
  5. ポジションの逆転の論理を用いて,つまり新しい信号が同時に古いポジションを平らにして新しいポジションを開く

戦略的優位性

  1. ダイナミックな適応性: VIDYA指標は,市場の変動に応じてパラメータを自動的に調整し,従来の移動平均の遅れの問題を回避します.
  2. リスク管理の改善:ATRの動的波動により,異なる市場状況に適応するストップを設定します.
  3. 信号明晰:トレンド反転の論理を用いて,取引信号が明快で実行しやすい
  4. 視覚化効果:上下トレンドを色分けして,市場状況を直感的に表示する
  5. パラメータの可調性: 市場特性を考慮して,重要なパラメータを最適化できます

戦略リスク

  1. 横盤の振動市場では,偽信号が発生し,取引が頻繁になる.
  2. スライドポイントの影響:反転戦略により,シグナルごとに双方向取引が関与し,スライドポイントの影響を受けやすい
  3. 資金管理リスク: 固定比率のポジション管理は,急激な変動で大きな損失をもたらす可能性があります.
  4. パラメタセンシビリティ: VIDYAとATRのパラメータ設定は,戦略のパフォーマンスに大きな影響を与える
  5. 市場環境依存: 傾向が顕著な市場では好調だが,他の市場環境では不良かもしれない

戦略最適化の方向性

  1. トレンドフィルターを追加: 長期トレンド判断を追加して,波動的な市場のシグナルをフィルターする
  2. ポジション管理の最適化:市場変動に応じてポジションの割合を調整するダイナミックなポジション管理の導入を検討
  3. エントリーフィールドの論理変更: 信号信頼性を高めるために他の技術指標の確認を追加できます.
  4. 損失を抑える仕組みの改善:移動的損失または変動率に基づく動的損失を追加することを検討する
  5. タイムフィルターを追加: 異なる時間帯の市場特性に合わせて戦略パラメータを調整できます.

要約する

この戦略は,VIDYAとATRを組み合わせて,市場動向の動的追跡とリスク制御を実現している.その核心的な優点は,市場の変動に自律的に適応でき,トレンド追跡能力を維持しながら,反転の機会を間に合うように捕捉できることです.特定の市場環境でリスクに直面する可能性がありますが,合理的なパラメータの最適化とリスク管理措置によって,この戦略は,依然として優れた実用価値を持っています.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PakunFX

//@version=5
strategy("VIDYA Auto-Trading(Reversal Logic)", overlay=true)

// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
int   vidya_length   = input.int(10, "VIDYA Length")       
int   vidya_momentum = input.int(20, "VIDYA Momentum")    
float band_distance  = input.float(2, "Distance factor for upper/lower bands", step = 0.1)  
float source         = input.source(close, "Source")    
color up_trend_color   = input(#17dfad, "+")  
color down_trend_color = input(#dd326b, "-")  
bool  shadow           = input.bool(true, "Shadow") 

// Define VIDYA (Variable Index Dynamic Average) function
vidya_calc(src, vidya_length, vidya_momentum) =>
    float momentum         = ta.change(src)
    float sum_pos_momentum = math.sum((momentum >= 0) ? momentum : 0.0, vidya_momentum)
    float sum_neg_momentum = math.sum((momentum >= 0) ? 0.0 : -momentum, vidya_momentum)
    float abs_cmo          = math.abs(100 * (sum_pos_momentum - sum_neg_momentum) / (sum_pos_momentum + sum_neg_momentum))
    float alpha            = 2 / (vidya_length + 1)
    var float vidya_value  = 0.0
    vidya_value           := alpha * abs_cmo / 100 * src + (1 - alpha * abs_cmo / 100) * nz(vidya_value[1])

    ta.sma(vidya_value, 15)

// Calculate VIDYA
float vidya_value = vidya_calc(source, vidya_length, vidya_momentum)

// Calculate upper and lower bands
float atr_value = ta.atr(200)
float upper_band = vidya_value + atr_value * band_distance
float lower_band = vidya_value - atr_value * band_distance

// Detect trend direction
bool is_trend_up = na
if ta.crossover(source, upper_band)
    is_trend_up := true
if ta.crossunder(source, lower_band)
    is_trend_up := false

// Smooth the trend line
float smoothed_value = na
if is_trend_up
    smoothed_value := lower_band
if not is_trend_up
    smoothed_value := upper_band

// Detect trend change
bool trend_cross_up = ta.crossover(source, upper_band)
bool trend_cross_down = ta.crossunder(source, lower_band)

// ENTRY & EXIT ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
// Long logic: Enter long when down arrow appears and exit when up arrow appears
if trend_cross_up
    strategy.close("Sell")  // Close short position if any
    strategy.entry("Buy", strategy.long)

if trend_cross_down
    strategy.close("Buy")  // Close long position if any
    strategy.entry("Sell", strategy.short)