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

저자:차오장, 날짜: 2023-12-12 12:35:05
태그:

img

전반적인 설명

이것은 운동 필터링 기술을 사용하여 만들어진 이동 평균 거래 전략입니다. 작은 가격 변동을 필터링하기 위해 가격 변화에 대한 문턱을 설정하여 계산에 큰 가격 변동을 선택하여 전략의 안정성을 향상시킵니다.

전략 논리

이 전략의 핵심 지표는 동력에 의해 필터링 된 데 모멘텀 오시레이터 (CMO) 이다. 데 모멘텀 오시레이터는 상승과 하락의 날의 절대 값의 합과 가격 상승과 하락의 합의 비율을 계산하여 트렌드의 동력을 판단하는 일종의 동력 지표이다. 이 전략은 필터라고 불리는 가격 변화의 최소한의 문턱을 설정하여 개선합니다. 가격 변화가 이 문턱을 초과하면만 CMO 계산에 참여합니다. 이것은 시장의 많은 작은 변동을 필터링하여 지표를 더 안정적이고 신뢰할 수 있습니다.

지표 계산에 기초하여 상줄 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")


더 많은