모멘텀 방향성 발산 전략


생성 날짜: 2023-12-27 15:37:31 마지막으로 수정됨: 2023-12-27 15:37:31
복사: 0 클릭수: 420
1
집중하다
1217
수행원

모멘텀 방향성 발산 전략

개요

모멘텀 방향 분산 전략 (Momentum Direction Divergence Strategy) 은 윌리엄 블라우 (William Blau) 가 그의 저서 모멘텀, 디렉션 앤 디버전스 (Momentum, Direction and Divergence) 에서 설명한 기술 중 하나이다. 이 전략은 세 가지 핵심 측면: 모멘텀, 디렉션 및 분산에 초점을 맞추고 있다. 브라우 씨는 전기 엔지니어가자, 나중에 거래자가 되었으며, 가격과 모멘텀 사이의 관계를 깊이 연구했다.

이 전략은 동력 방향 분산 지수 ((Ergotic CSI) 와 그 평선선을 잡음을 필터링하는 데 사용한다.

전략 원칙

코드 시작은 자기 적응 동향 지수 ((ADX) 의 함수 fADX를 정의하고, 이는 매끄러운 주기를 나타내는 변수 Len을 받아들인다. 이 함수는 실제 범위 ((TR) 의 선택 이동 평균 ((RMA) 을 분모로 계산하고, 다중 머리 운동량과 공허 머리 운동량을 RMA로 계산하고, 그 다음 분할하여 다중 머리와 공허 머리의 상대 강도를 나타내는 비율을 얻는다. 마지막으로 다중 머리 강도와 공허 머리 강도를 결합한 공식으로 ADX의 값을 얻는다.

그리고는 전략 파라미터의 정의이다. r는 ATR의 평준화 파라미터, Length는 ADX의 길이를, BigPointValue는 큰 점값을, SmthLen은 평준화 CSI의 길이를, SellZone와 BuyZone는 조건부 판매 및 구매 지역을 나타냅니다. reverse는 반전 거래 신호를 나타냅니다.

핵심 논리는 CSI를 계산하는 것이다. 먼저 실제 변동의 폭인 ATR와 ADX를 계산한다. 그 다음에는 대점값, ATR와 ADX를 고려한 처벌 계수 K를 계산한다. ATR, ADX와 종식 가격의 정보를 결합한 표준화 잔여 nRes를 계산한다. 마지막으로 CSI 값을 계산하고, 그 평형 SMA를 요구한다.

CSI의 SMA값에 따라 거래 방향을 결정한다. BuyZone보다 높으면 더 많이 하고, SellZone보다 낮으면 더 적게 한다. CSI 곡선과 그것의 SMA를 그리고, 색으로 다른 거래 영역을 표시한다.

우위 분석

이 전략은 동력 지표 ATR과 트렌드 지표 ADX의 장점을 결합하여 시장의 변동성을 고려하고 트렌드 정도를 고려하여 ATR과 ADX만을 사용하는 한계를 피합니다. 처벌 계수 K의 디자인은 이러한 지표와 큰 점값의 관계를 교묘하게 결합합니다.

표준화된 잔여 nRes는 가격 정보의 활용에 추가되어, 동력 트렌드뿐만 아니라 가격의 절대 수준에 초점을 맞추어, 일반적인 진동기와는 달리 전략의 성능을 강화한다.

원활한 처리와 구역 판단은 전략적 의사결정에 명확한 거래 신호를 제공하며 실장 운영에 유리하다.

위험 분석

이 전략은 ATR와 ADX의 주기 길이나 큰 점값의 설정, CSI 평준화 파라미터 등과 같은 파라미터 설정에 민감하다. 전략의 성능에는 많은 회귀를 통해 적절한 파라미터 조합을 결정해야 한다.

CSI는 새로운 진동수로서, 그 효능은 더 많은 다른 시장에서 검증될 필요가 있다. 이 지표의 효과가 좋지 않으면, 전략의 수익성에 영향을 줄 수 있다.

전략 자체에는 손해제도가 없으며, 직접적으로 CSI 신호에 따라 더 많은 코카이드를 하고, 어느 정도의 위험이 존재하며, 손해제도와 결합하여 사용해야 한다.

최적화 방향

다른 시장에서 변수 조합을 테스트하여 더 일반적인 조합을 찾을 수 있습니다.

동적 ADX 주기의 길이를 도입할 수 있으며, 시장 상태에 따라 ADX의 매개 변수를 조정할 수 있다.

다른 오실로터 지표와 결합하여 거래 시기를 결정하여 전략을 더 안정적으로 만들 수 있습니다. 예를 들어, 하단 퍼짐, 상단 이탈 등의 효과.

전체적인 전략을 더 완성시키기 위해 Stop Loss 전략에 추가할 수 있습니다.

요약하다

동력 방향 분산 전략은 여러 지표의 장점을 통합하여 가격, 동력, 트렌드의 여러 차원을 활용하여 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")