동력 방향 격차 전략

저자:차오장, 날짜: 2023-12-27 15:37:31
태그:

img

전반적인 설명

모멘텀 디렉션 디버전스 전략 (Momentum Direction Divergence Strategy) 은 윌리엄 블라우가 그의 책?? 모멘텀, 디렉션 앤 디버전스?? 에서 기술한 기술 중 하나이다. 이 전략은 모멘텀, 디렉션 앤 디버전스 (Momentum, Direction and Divergence) 라는 세 가지 주요 측면에 초점을 맞추고 있다. 블라우는 트레이더가 되기 전에 전기 엔지니어였으며, 가격과 모멘텀 사이의 관계를 철저히 조사한다. 이 토대에서 그는 다른 오시레이터들의 결함을 살펴보고 스토카스틱스에 대한 신선한 트위스트를 포함한 몇 가지 혁신적인 기술을 소개한다. 방향 문제에 대해서는 ADX의 복잡성을 분석하고 트렌딩 및 트렌딩이 아닌 시기를 정의하는 데 도움이 되는 독특한 접근 방식을 제시한다.

이 전략은 소음을 필터링하기 위해 에르고틱 CSI와 그 부드러운 라인을 계획합니다.

전략 논리

코드는 조정 방향 지표 (ADX) 함수 fADX를 정의하는 것으로 시작되며 매개 변수 Len을 매끄러운 기간으로 사용합니다. 함수는 진정한 범위 (TR) 의 RMA를 분모자로 계산하고, 상승 동력과 하락 동력의 RMA를 분수로 계산하여 상승과 하락의 상대적 강도를 나타내는 비율을 얻습니다. 마지막으로 ADX는 상승 동력과 하락 동력을 결합하여 얻습니다.

그 다음 전략 매개 변수는 정의됩니다. r는 ATR의 평형 매개 변수, 길이는 ADX의 길이가, BigPointValue는 큰 포인트 값, SmthLen은 CSI의 평형 길이가, SellZone와 BuyZone는 기준을 충족하는 판매 및 구매 구역입니다. 역은 거래 신호를 반전 여부를 나타냅니다.

핵심 논리는 CSI 계산에 있다. 먼저 ATR와 ADX가 계산된다. 그 다음 벌금 계수 K가 계산되며, 큰 포인트 값, ATR와 ADX의 고려가 포함된다. 표준화된 잔류 nRes는 ATR, ADX 및 폐쇄 가격의 정보를 결합한다. 마지막으로 CSI 값이 얻어지고, 그 SMA가 계산된다.

거래 방향은 CSI의 SMA 값에 따라 결정됩니다. 바이존 위에 있다면 장거리, 셀존 아래에 있다면 단거리. CSI 곡선과 SMA를 그래프하고, 색상 코드는 다른 거래 구역입니다.

이점 분석

이 전략은 시장 변동성과 트렌드 강도를 모두 고려하여 모멘텀 지표 ATR 및 트렌드 지표 ADX의 장점을 결합하여 ATR 또는 ADX만을 사용하는 한계를 피합니다. 벌금 계수 K의 설계는이 지표와 큰 포인트 가치 사이의 관계를 현명하게 통합합니다.

표준화된 잔류 nRes는 가격 정보를 포함하고, 추진 동향뿐만 아니라 전형적인 오시레이터와 다른 절대 가격 수준에도주의를 기울여 전략의 성능을 향상시킵니다.

평형화 과정과 구역 결정은 실제 거래에 대한 명확한 거래 신호를 제공합니다.

위험 분석

이 전략은 ATR 및 ADX 기간, 큰 포인트 값 등과 같은 매개 변수 설정에 매우 민감하며, 이는 성능에 영향을 줄 수 있습니다. 적절한 매개 변수 조합을 결정하기 위해 광범위한 백테스트가 필요합니다.

새로 제안 된 오시레이터로서 CSI의 효과는 더 다양한 시장에서 검증이 필요합니다. CSI의 낮은 성과는 전략 수익성에 해를 끼칠 것입니다.

전략 자체에는 스톱 로스 메커니즘이 없으며 CSI 신호에 따라 직접 장기 또는 단축됩니다. 스톱 로스를 통합하여 완화해야 할 위험이 있습니다.

최적화 방향

비교적 보편적인 설정을 찾기 위해 다른 시장에서 매개 변수 조합을 테스트합니다.

시장 상태에 따라 ADX 매개 변수를 조정하는 동적 ADX 기간 메커니즘을 도입합니다.

다른 오시일레이터 지표를 통합하여 입출구를 결정하여 전략을 더 견고하게 만들 수 있습니다. 바닥 분차와 상위 분차와 같은 효과는 유용 할 수 있습니다.

전략 완료를 위해 스톱 로스 메커니즘을 추가합니다.

요약

모멘텀 디렉션 디버전스 전략은 거래용 CSI 지표를 설계하기 위해 가격, 모멘텀, 트렌드 차원을 활용하여 여러 지표의 장점을 통합합니다. 유연한 매개 변수 설정과 강력한 용량으로 전략은 추가 테스트와 최적화를받을 자격이 있으며 유익한 양적 거래 도구가 될 수 있습니다.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2018
// This is one of the techniques described by William Blau in his book 
// "Momentum, Direction and Divergence" (1995). If you like to learn more, 
// we advise you to read this book. His book focuses on three key aspects 
// of trading: momentum, direction and divergence. Blau, who was an electrical 
// engineer before becoming a trader, thoroughly examines the relationship between 
// price and momentum in step-by-step examples. From this grounding, he then looks 
// at the deficiencies in other oscillators and introduces some innovative techniques, 
// including a fresh twist on Stochastics. On directional issues, he analyzes the 
// intricacies of ADX and offers a unique approach to help define trending and 
// non-trending periods.
// This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise. 
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

strategy(title="Ergodic CSI Backtest")
r = input(32, minval=1)
Length = input(1, minval=1)
BigPointValue = input(1.0, minval=0.00001)
SmthLen = input(5, minval=1)
SellZone = input(0.004, minval=0.00001)
BuyZone = input(0.024, minval=0.001)
reverse = input(false, title="Trade reverse")
hline(BuyZone, color=green, linestyle=line)
hline(SellZone, color=red, linestyle=line)
source = close
K = 100 * (BigPointValue / sqrt(r) / (150 + 5))
xTrueRange = atr(1) 
xADX = fADX(Length)
xADXR = (xADX + xADX[1]) * 0.5
nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0)
xCSI = iff(close > 0,  nRes / close, 0)
xSMA_CSI = sma(xCSI, SmthLen)
pos = iff(xSMA_CSI > BuyZone, 1,
       iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xCSI, color=green, title="Ergodic CSI")
plot(xSMA_CSI, color=red, title="SigLin")

더 많은