이동 평균 추적 전략은 간단한 이동 평균을 기반으로 한 트렌드 추적 전략이다. 이 전략은 200일 길이의 간단한 이동 평균을 사용하여 가격 트렌드 방향을 판단하고, 가격이 이동 평균을 넘어서면 더 많이 하고, 가격이 이동 평균을 넘어서면 공백을 만들고, 트렌드를 추적한다.
이 전략은 다음과 같은 몇 가지 원칙에 기초하고 있습니다.
이 전략은 주로 이동 평균을 통해 트렌드 방향을 판단하고, 평행선이 변할 때 적시에 역으로 동작하여 트렌드를 추적하여 수익을 창출한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
위험과 관련하여, 다음과 같은 부분에서 최적화 및 개선이 가능합니다.
이 전략은 다음의 몇 가지 측면에서 더 개선될 수 있습니다.
이동 평균의 주기 변수를 최적화하여 최적의 변수 조합을 찾는다. Walk Forward Analysis 등의 변수 최적화 방법을 사용할 수 있다.
단기 이동 평균을 추가하여 다중 평균선 전략을 수립하고, 동시에 장기 단기 경향을 추적한다.
MACD와 같은 트렌드 지표와 결합하여 트렌드 전환을 식별하는 능력을 향상시킵니다.
단편적 손실을 통제하기 위해, 손실을 추적하는, 손실을 중지하는 등 손실을 막는 장치에 가입하십시오.
복제 테스트를 실시하고, 다른 품종과 다른 시간대에 전략을 테스트하고, 안정성을 향상시킨다.
기계 학습과 같은 방법을 사용하여 전략의 변수 적응 및 전략 최적화를 구현하십시오.
이동 평균 추적 전략은 간단하고 실용적인 트렌드 추적 전략으로, 아이디어는 명확하고, 실행하기 쉬운 추세 기회를 잡을 수 있습니다. 그러나 이 전략에는 단기 조정에 민감하지 않고, 위험 제어 능력이 약한 것과 같은 몇 가지 문제가 있습니다. 우리는 여러면에서 최적화하여 전략을 더 안정적으로, 변수를 더 최적화하고, 위험을 더 완벽하게 제어 할 수 있습니다.
/*backtest
start: 2023-09-19 00:00:00
end: 2023-10-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA X 200 BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// MA 200 /////////////
slowMA = sma(close, input(200))
/////////////// Strategy ///////////////
long = close > slowMA
short = close < slowMA
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long Entry", strategy.long, when=long_signal)
strategy.entry("Short Entry", strategy.short, when=short_signal)
strategy.exit("Long Ex", "Long Entry")
strategy.exit("Short Ex", "Short Entry")
/////////////// Plotting ///////////////
plot(slowMA, color = long ? color.lime : color.red, linewidth=2)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)