리소스 로딩... 로딩...

동적 변동성 지수 (VIDYA) 는 ATR 트렌드를 따르는 역전 전략과 함께

저자:차오장, 날짜: 2024-12-13 10:21:14
태그:ATRCMOSMAMA

img

전반적인 설명

이 전략은 트렌드 식별 및 리스크 관리 기능을 향상시키기 위해 ATR 대역과 결합된 변수 지수 동적 평균 (VIDYA) 을 기반으로하는 트렌드 추적 거래 시스템입니다. 이 전략은 트렌드 추적 기능을 유지하고 시장 반전 신호를 캡처하는 동안 시장 변동성에 대한 반응을 동적으로 조정합니다. 시스템은 VIDYA를 핵심 지표로 사용하고 동적 스톱-로스 배치에 ATR 대역을 사용합니다.

전략 원칙

핵심 원리는 트렌드 식별을 위해 VIDYA의 동적 특성을 활용하는 데 있습니다. VIDYA는 모멘텀 계산을 통해 이동 평균 무게를 조정하여 다양한 시장 조건에서 다른 민감도를 제공합니다.

  1. 가격 동력 계산을 위해 Chande Momentum Oscillator (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)

관련

더 많은