資源の読み込みに... 荷物...

動的波動性指数 (VIDYA) とATRトレンドフォロディング逆転戦略

作者: リン・ハーンチャオチャン,日付: 2024年12月13日 10:21:14
タグ:ATRCMOSMAマルチ

img

概要

この戦略は,トレンド識別とリスク管理能力を強化するためにATR帯と組み合わせた変数指数ダイナミック平均 (VIDYA) をベースとしたトレンドフォローする取引システムである.この戦略は,トレンドフォローする能力を維持し,市場の逆転信号をキャプチャしながら,市場の不安定性に対する応答を動的に調整する.システムはVIDYAをコア指標として,ATR帯を動的なストップロスの配置に使用する.

戦略の原則

基本原理は,トレンド識別のためにVIDYAのダイナミック特性を利用することにある.VIDYAは,モメント計算を通じて移動平均重量を調整し,さまざまな市場条件で異なる感度を提供します:

  1. 価格動向を計算するためにチャンデ・モメンタム・オシレーター (CMO) を使用する.
  2. 運動量に基づいて適応因子アルファを計算します
  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)

関連性

もっと