CMO와 WMA를 기반으로 한 이중 이동 평균 거래 전략


생성 날짜: 2024-01-25 17:44:49 마지막으로 수정됨: 2024-01-25 17:44:49
복사: 0 클릭수: 583
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

CMO와 WMA를 기반으로 한 이중 이동 평균 거래 전략

개요

이 전략은 가격 운동 지표 Chandre 운동 흔들기 ((CMO) 와 그것의 가중된 이동 평균 ((WMA) 을 기반으로 한 쌍평선 거래 전략이다. Attempts to identify trend reversals and continuation Using CMO crossover

전략 원칙

이 전략은 먼저 CMO를 계산하고, 이 지표는 가격의 온라인 동력 변화를 측정한다. 긍정적 인 값은 상승 동력을 나타내고, 부정적인 값은 하락 동력을 나타냅니다. 그리고 CMO의 WMA를 계산한다.

CMO를 계산하는 핵심 단계는 다음과 같습니다.

  1. 매일의 가격변화를 계산하기 (xMom)
  2. 가격변동에 대한 n일 SMA를 구하고, ?? 실제 ?? 가격동력 (xSMA_mom) 으로 나타냅니다.
  3. n일간 순 가격 변화 (xMomLength) 를 계산합니다
  4. 순가변화를 표준화하기 위한 방법 (nRes) 은
  5. 표준화된 net price change에 m일 WMA를 구하여 CMO ((xWMACMO) 를 얻는다.

이 전략의 장점은 가격 중기 경향의 전환점을 포착하는 것이다. CMO의 절대값 크기는 가격 운행 경향의 강도를 반영하며, WMA는 파동 위조의 돌파구를 유리한 것이다.

우위 분석

이 전략의 가장 큰 장점은 CMO 지표의 절대값을 사용하여 시장 대중의 감정을 판단하고, WMA 波을 사용하여 중기 트렌드의 전환점을 식별하는 것입니다. 단일 이동 평균 전략에 비해 탄력적인 공간을 더 많이 갖는 중기 트렌드를 더 잘 포착 할 수 있습니다.

CMO는 가격 변화를 표준화하여 100에서 100의 범위에 매핑하여 시장 대중의 정서를 판단하는 데 도움이됩니다. 절대 값 크기는 현재 트렌드의 강도를 나타냅니다. WMA는 CMO에 대한 추가적인 조사를 통해 너무 많은 잘못된 신호를 피합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. CMO 및 WMA 파라미터가 잘못 설정되어 너무 많은 가짜 신호가 발생했습니다.
  2. 트렌드 변동 시장에 효과적으로 대응할 수 없는 경우, 과도한 거래 빈도와 슬라이드 포인트 비용을 초래할 수 있습니다.
  3. 실제 장기 동향을 파악할 수 없고, 장기간 지분을 보유할 경우 손실 위험이 있을 수 있습니다.

대응 최적화 방법은 다음과 같습니다:

  1. CMO와 WMA의 변수를 조정하여 최적의 변수 조합을 찾습니다.
  2. 거래량 에너지 지표와 같은 추가 필터 조건을 추가하여 불안정한 상황에서 거래하는 것을 피하십시오.
  3. 90일선과 같은 더 긴 기간의 지표와 결합하여 긴 선의 추세에서 놓친 기회를 피하십시오.

최적화 방향

이 전략의 최적화 방향은 주로 변수 최적화, 신호 필터링 및 스톱로드에 집중된다:

  1. CMO와 WMA의 변수 최적화: 순환을 통해 최적의 변수 조합을 찾아내는 방법

  2. 거래량, 강도, 약도 등의 보조 지표와 결합하여 신호를 필터링하여 가짜 브레이크를 방지합니다.

  3. CMO와 WMA에서 가격이 다시 떨어질 때 동적 상쇄를 추가합니다.

  4. 브레이크아웃 실패 패턴은 CMO와 WMA가 먼저 중요한 지점을 돌파하고 곧 다시 떨어지는 경우를 입력 신호로 간주 할 수 있습니다.

  5. 더 긴 선주기 지표와 결합하여 큰 트렌드를 판단하여 역동적인 거래를 피할 수 있습니다.

요약하다

이 전략은 전체적으로 CMO 지표를 사용하여 트렌드 강도와 전환점을 판단하고, WMA와 결합하여 기류를 생성하는 거래 신호가 전형적인 양평선 시스템에 속한다. 단일 MA 전략에 비해 더 강한 탄력성 중기 트렌드를 포착하는 장점이 있다. 그러나 매개 변수 설정과 기류 측면에서 최적화 할 여지가 있으며, 거래 주파수를 적절히 제어하고 동적 스톱로스를 도입하여 시스템의 안정성을 더욱 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2023-12-25 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/10/2018
//    This indicator plots Chandre Momentum Oscillator and its WMA on the 
//    same chart. This indicator plots the absolute value of CMO.
//    The CMO is closely related to, yet unique from, other momentum oriented 
//    indicators such as Relative Strength Index, Stochastic, Rate-of-Change, 
//    etc. It is most closely related to Welles Wilder?s RSI, yet it differs 
//    in several ways:
//    - It uses data for both up days and down days in the numerator, thereby 
//        directly measuring momentum;
//    - The calculations are applied on unsmoothed data. Therefore, short-term 
//        extreme movements in price are not hidden. Once calculated, smoothing 
//        can be applied to the CMO, if desired;
//    - The scale is bounded between +100 and -100, thereby allowing you to clearly 
//        see changes in net momentum using the 0 level. The bounded scale also allows 
//        you to conveniently compare values across different securities.
////////////////////////////////////////////////////////////
strategy(title="CMO & WMA Backtest ver 2.0", shorttitle="CMO & WMA")
Length = input(9, minval=1)
LengthWMA = input(9, minval=1)
BuyZone = input(60, step = 0.01)
SellZone = input(-60, step = 0.01)
reverse = input(false, title="Trade reverse")
hline(BuyZone, color=green, linestyle=line)
hline(SellZone, color=red, linestyle=line)
hline(0, color=gray, linestyle=line)
xMom = abs(close - close[1])
xSMA_mom = sma(xMom, Length)
xMomLength = close - close[Length]
nRes = 100 * (xMomLength / (xSMA_mom * Length))
xWMACMO = wma(nRes, LengthWMA)
pos = 0.0
pos := iff(xWMACMO > BuyZone, 1,
	   iff(xWMACMO < 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(nRes, color=blue, title="CMO")
plot(xWMACMO, color=red, title="WMA")