이동 평균을 기반으로 한 추세 추종 전략


생성 날짜: 2023-11-27 15:57:15 마지막으로 수정됨: 2023-11-27 15:57:15
복사: 0 클릭수: 565
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동 평균을 기반으로 한 추세 추종 전략

개요

이 전략은 평행선을 기반으로 한 트렌드 추적 유형 전략이다. 이치모쿠 클라우드 그래프 지표를 사용하여 트렌드 방향을 판단하고, 200 일 이동 평균 필터링 신호와 결합하여 트렌드 추적을 구현한다.

전략 원칙

이 전략은 주로 트렌드 방향을 판단하기 위해 클라우드 그래프의 전환선과 기본선을 사용합니다. 전환선은 지난 9 일간의 중간값 평균이고, 기본선은 지난 26 일간의 중간값 평균입니다. 전환선이 기본선을 통과하면 구매 신호가 되고, 아래를 통과하면 판매 신호입니다.

이 전략은 또한 200일 이동 평균을 사용하여 신호를 필터링한다. 종결 가격이 200일 선보다 높을 때만 구매 신호가 발생한다. 이것은 대부분의 가짜 신호를 필터링 할 수 있다.

탈퇴의 측면에서는, 전략은 간단하게 전환선 아래의 기저선을 통과하는 것을 평점 신호로 사용한다.

우위 분석

이 전략은 트렌드 판단 지표 1 구름 그래프와 장기 트렌드 필터 지표 200 일선을 결합하여 트렌드를 효과적으로 추적하고 대부분의 가짜 신호를 필터링 할 수 있습니다. 중도 평균과 같은 매개 변수를 사용하면 가격의 비정상적인 변동으로 인해 평균에 대한 영향을 줄일 수 있습니다.

이동 평균과 같은 지표를 단독으로 사용하는 것에 비해, 이 전략은 트렌드 전환점을 더 잘 포착하여 적시에 포지션을 조정할 수 있다. 이것은 그것의 가장 큰 장점이다.

위험 분석

이 전략은 주로 한 클라우드 그래프 지표 판단 트렌드 방향에 의존하며, 한 클라우드 그래프 자체도 잘못된 신호를 발생시킨다. 판단이 편향되면 이 전략은 손실을 초래할 수 있다.

또한, 매개 변수 설정이 잘못되면 전략의 성능이 좋지 않습니다. 변환 라인 매개 변수가 너무 짧으면 가짜 신호가 발생할 수 있으며, 기본 라인 매개 변수가 너무 길으면 추적 효과가 저하됩니다. 균형 잡기 위해 매개 변수 최적화가 필요합니다.

최적화 방향

다른 지표와 결합하여 신호 품질을 향상시키는 것을 고려할 수 있습니다. 예를 들어, KDJ 지표는 오버 바이 오버 셀 영역을 판단하여 신호를 필터링합니다. 또는 ATR 지표를 사용하여 스톱 로스를 설정합니다.

변수 측면에서 더 많은 조합을 테스트 할 수 있습니다. 예를 들어, 변환 라인 변수를 5 또는 7 일 조정하여 더 민감한 거래 신호를 얻을 수 있습니다. 또한 추적 효과를 균형 잡기 위해 기본 라인 변수를 20 일 정도 변경하여 테스트 할 수 있습니다.

또한, 특정 변동성 환경에서 전략이 종료되는 것도 고려할 수 있습니다.

요약하다

이 전략은 트렌드 판단과 장기 필터링 지표의 장점을 통합하여 중·장기 트렌드를 효과적으로 추적할 수 있다. 또한, 변수 설정과 풍력 제어 조치도 잘못된 신호와 변동으로 인한 영향을 줄이기 위해 지속적으로 최적화해야 한다. 전체적으로 이 전략은 실적 운영 가치가 있다.

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

//@version=3
strategy(title="TK Cross > EMA200 Strat",  overlay=true)

ema200 = ema(close, 200)
conversionPeriods = input(9, minval=1, title="Conversion Line Periods"),
basePeriods = input(26, minval=1, title="Base Line Periods")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"),
displacement = input(26, minval=1, title="Displacement")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

plot(conversionLine, color=#0496ff, title="Conversion Line", linewidth=3)
plot(baseLine, color=#991515, title="Base Line", linewidth=3)
plot(close, offset = -displacement, color=#459915, title="Lagging Span")

p1 = plot(leadLine1, offset = displacement, color=green,
 title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red, 
 title="Lead 2")
fill(p1, p2, color = leadLine1 > leadLine2 ? green : red)

plot(ema200, color=purple, linewidth=4,title='ema200')
strategy.initial_capital = 50000

strategy.entry('tkcross', strategy.long, strategy.initial_capital / close, when=conversionLine>baseLine and close > ema200)
strategy.close('tkcross', when=conversionLine<baseLine)


start = input(2, minval=0, maxval=10, title="Start - Default = 2 - Multiplied by .01")
increment = input(2, minval=0, maxval=10, title="Step Setting (Sensitivity) - Default = 2 - Multiplied by .01" )
maximum = input(2, minval=1, maxval=10, title="Maximum Step (Sensitivity) - Default = 2 - Multiplied by .10")
sus = input(true, "Show Up Trending Parabolic Sar")
sds = input(true, "Show Down Trending Parabolic Sar")
disc = input(false, title="Start and Step settings are *.01 so 2 = .02 etc, Maximum Step is *.10 so 2 = .2")
//"------Step Setting Definition------"
//"A higher step moves SAR closer to the price action, which makes a reversal more likely."
//"The indicator will reverse too often if the step is set too high."

//"------Maximum Step Definition-----")
//"The sensitivity of the indicator can also be adjusted using the Maximum Step."
//"While the Maximum Step can influence sensitivity, the Step carries more weight"
//"because it sets the incremental rate-of-increase as the trend develops"

startCalc = start * .01
incrementCalc = increment * .01
maximumCalc = maximum * .10

sarUp = sar(startCalc, incrementCalc, maximumCalc)
sarDown = sar(startCalc, incrementCalc, maximumCalc)

colUp = close >= sarDown ? lime : na
colDown = close <= sarUp ? red : na

plot(sus and sarUp ? sarUp : na, title="Up Trending SAR", style=circles, linewidth=3,color=colUp)
plot(sds and sarDown ? sarDown : na, title="Up Trending SAR", style=circles, linewidth=3,color=colDown)