모멘텀 필터링 이동 평균 전략


생성 날짜: 2023-12-12 12:35:05 마지막으로 수정됨: 2023-12-12 12:35:05
복사: 0 클릭수: 408
1
집중하다
1212
수행원

모멘텀 필터링 이동 평균 전략

개요

이것은 동적 필터 기술을 활용하여 구축된 이동 평균 거래 전략이다. 그것은 가격 변동 값을 설정하여 작은 가격 변동을 필터링하고, 큰 가격 변동만 참여하는 것을 선택하여 전략의 안정성을 향상시킨다.

전략 원칙

이 전략의 핵심 지표는 운동량으로 필터링 된 Chande 운동량 흔들림 지표 (CMO) 이다. Chande 운동량 흔들림 지표는 운동량 지표의 일종으로, 공백일수의 절대값의 합과 가격 폭락의 차이의 합의 비율을 계산하여 공백 운동량을 판단한다. 이 전략은 그것에 대한 개선이 되어, 가격 변화의 최소 폭락 값 파라미터 필터를 설정하여, 가격 변화가 이 폭락 값을 초과할 때만 CMO의 계산에 참여한다. 이것은 시장의 많은 작은 변동을 필터링하여 지표를 더 안정적으로 만든다.

계산된 지표의 기초에, 상선 TopBand과 상선 LowBand을 설정하고, 지표가 이 두 선을 넘으면 거래 신호를 발생시킨다. 마지막으로, 역전입 변수 reverse는 원시 신호를 역전하여 역전 동작을 가능하게 한다.

우위 분석

이것은 매우 안정적이고 신뢰할 수 있는 트렌드 추적 전략이며, 동량 필터링 기술을 사용하기 때문에, 시장 소음을 효과적으로 필터링하여, 중매를 방지할 수 있습니다. 전략 매개 변수를 최적화 할 수있는 공간이 넓고, 필터, TopBand, LowBand 등의 매개 변수를 조정하여 전략 지표를 최적화 할 수 있습니다.

위험 분석

이 전략은 주로 트렌드 추적을 기반으로 하므로, 재조정시장에서 잘못된 신호와 손실이 발생하기 쉽다. 또한, 매개 변수 최적화가 잘못되면 거래 빈도가 너무 높거나 신호가 불안정하게 될 수 있다. 마지막으로, 역거래 매개 변수를 잘못 사용하면 불필요한 손실이 발생할 수 있다.

이러한 위험을 줄이기 위해, 신호를 더 안정적이고 신뢰할 수 있도록 파라미터를 합리적으로 최적화해야 한다. 시장을 정리할 때 이 전략을 사용하는 것을 피하고, 더 적합한 전략 도구를 선택한다. 역거래 기능을 신중하게 사용하며, 파라미터가 최적화되지 않은 상태에서는 작동하는 것을 피한다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 필터 변수 값을 최적화하여 시장 소음을 필터링하는 동시에 거래 빈도가 너무 낮지 않도록하십시오.

  2. TopBand와 LowBand의 파라미터 범위를 최적화하여 시장의 변동량과 일치하도록 함으로써 잘못된 신호를 방지한다.

  3. 워크 포워드 분석과 같은 방법을 사용하여 동적으로 최적화 파라미터를 사용하여 시장의 변화에 맞게 전략 파라미터를 조정하십시오.

  4. 손실을 통제하기 위해 합리적인 스톱포인트를 설정하여 스톱포드 논리를 추가합니다.

  5. MACD, KD 등과 같은 다른 지표의 파동과 결합하여 트렌드 아닌 시장의 잘못된 거래를 피하십시오.

요약하다

이것은 매우 실용적인 트렌드 추적 전략이다. 그것은 동력 필터링 기술을 적용하여 시장 소음을 효과적으로 억제하여 신호를 더 명확하고 신뢰할 수 있게 한다. 파라미터 최적화 및 논리 최적화를 통해 신뢰할 수 있고 안정적인 양적 거래 도구로 훈련시킬 수 있다. 그러나 여전히 시장의 평준화와 파라미터 최적화의 부적절한 사용으로 인한 위험을 방지하기 위해 주의를 기울여야 한다.

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

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 02/03/2017
// This indicator plots a CMO which ignores price changes which are less 
// than a threshold value. CMO was developed by Tushar Chande. A scientist, 
// an inventor, and a respected trading system developer, Mr. Chande developed 
// the CMO to capture what he calls "pure momentum". For more definitive 
// information on the CMO and other indicators we recommend the book The New 
// Technical Trader by Tushar Chande and Stanley Kroll.
// 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.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
fFilter(xSeriesSum, xSeriesV, Filter) =>
    iff(xSeriesV > Filter, xSeriesSum, 0)

strategy(title="CMOfilt", shorttitle="CMOfilt")
Length = input(9, minval=1)
Filter = input(3, minval=1)
TopBand = input(70, minval=1)
LowBand = input(-70, maxval=-1)
reverse = input(false, title="Trade reverse")
hline(0, color=gray, linestyle=line)
hline(TopBand, color=red, linestyle=line)
hline(LowBand, color=green, linestyle=line)
xMom = close - close[1]
xMomAbs = abs(close - close[1])
xMomFilter = fFilter(xMom, xMomAbs, Filter)
xMomAbsFilter = fFilter(xMomAbs,xMomAbs, Filter)
nSum = sum(xMomFilter, Length)
nAbsSum = sum(xMomAbsFilter, Length)
nRes =   100 * nSum / nAbsSum
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="CMOfilt")