CMO 오시레이터 거래 전략

저자:차오장, 날짜: 2023-09-19 21:16:26
태그:

전반적인 설명

이 전략은 트레이딩 신호에 대한 과잉 구매 및 과잉 판매 수준을 결정하기 위해 Chande Momentum Oscillator (CMO) 를 사용합니다. 극한을 식별하기 위해 오시레이터를 매끄럽게하기 위해 3 기간 동안의 절대 CMO 값은 평균됩니다. 전형적인 평균 반전 오시레이터 거래 전략.

전략 논리

핵심 논리는 다음과 같습니다.

  1. 3개의 다른 기간에 대한 절대 CMO 값 계산
  2. 3기제 절대 CMO 값의 평균을 취함
  3. 평균값이 상단값을 초과할 때 단축
  4. 평균 값이 하위 문턱 이하로 떨어지면 긴 경로
  5. CMO가 정상 범위로 돌아왔을 때 포지션 폐쇄

CMO는 가격 변화의 모멘텀을 반영한다. 높은 절대 값은 과잉 구매 / 과잉 판매 구역으로 들어가는 가격 차이를 나타낸다. 전략은 과잉 구매 / 과잉 판매 구역에 들어가는 가격 차이를 나타낸다. 전략은 과잉 구매 / 과잉 판매 구역에 들어가는 가격 차이를 나타낸다.

장점

  • CMO를 사용하여 과소매/ 과소매 지역을 식별합니다
  • 다기간에 평균화하면 곡선을 부드럽게 하고 잘못된 신호를 피합니다.
  • 과잉 매입/ 과잉 판매 검출에 대한 확실한 이론적 근거
  • 조정할 수 있는 매개 변수 임계
  • 간단한 평균회귀 구현

위험 및 완화

  • 잘못된 CMO 신호가 발생할 가능성
  • 지속적인 임계 최적화를 요구합니다.
  • 트렌드 도중 지속되는 극단적 인 경우 손실이 발생할 수 있습니다.

완화:

  1. 트렌드 필터를 추가하여 트렌드 반대 거래를 피합니다.
  2. 더 나은 CMO 감수성을 위한 매개 변수 최적화
  3. 손실을 제한하기 위해 스톱을 사용하는 것

더 나은 기회

이 전략은 다음을 통해 강화될 수 있습니다.

  1. 부진을 방지하기 위한 부피 확인
  2. 더 나은 리스크 관리를 위해 후속 정지를 포함
  3. 기계 학습을 통한 매개 변수 자동 최적화
  4. 변동성 기반의 포지션 크기
  5. 수익을 다양화하고 향상시키기 위한 다른 전략과 결합

결론

이 전략은 CMO를 사용하여 평균 리버션 거래에 대한 과반 구매 / 과반 판매를 식별합니다. 여러 기간 평균화는 잘못된 신호를 피하는 데 도움이됩니다. CMO 자체는 오차를 측정하기위한 확실한 이론적 근거를 가지고 있습니다. 더 나은 매개 변수, 스톱 및 필터를 통해 개선하면 안정적인 오시레이터 거래 전략이 될 수 있습니다.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-14 07:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////7////////////
//  Copyright by HPotter v1.0 21/02/2017
//    This indicator plots the absolute value of CMO averaged over three 
//    different lengths. This indicator plots a classical-looking oscillator, 
//    which is really an averaged value based on three different periods.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="CMOabsav", shorttitle="CMOabsav")
Length1 = input(5, minval=1)
Length2 = input(10, minval=1)
Length3 = input(20, minval=1)
TopBand = input(58, minval=1)
LowBand = input(5, minval=0)
reverse = input(false, title="Trade reverse")
hline(0, color=green, linestyle=hline.style_dashed)
hline(TopBand, color=purple, linestyle=hline.style_solid)
hline(LowBand, color=red, linestyle=hline.style_solid)
xMom = close - close[1]
xMomabs = abs(close - close[1])
nSum1 = sum(xMom, Length1)
nSumAbs1 = sum(xMomabs, Length1)
nSum2 = sum(xMom, Length2)
nSumAbs2 = sum(xMomabs, Length2)
nSum3 = sum(xMom, Length3)
nSumAbs3 = sum(xMomabs, Length3)
nRes = abs(100 * (nSum1 / nSumAbs1 + nSum2 / nSumAbs2 + nSum3 / nSumAbs3 ) / 3)
pos = iff(nRes > TopBand, 1,
	     iff(nRes < LowBand, -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="CMOabsav")

더 많은