
이 전략은 빠른 라인 EMA와 느린 라인 EMA의 교차 상황을 계산하여 황금 교차와 죽음의 교차 거래 신호를 생성합니다. 빠른 라인 EMA 상에서 느린 라인 EMA를 통과하면 구매 신호를 생성합니다. 빠른 라인 EMA 아래에서 느린 라인 EMA를 통과하면 판매 신호를 생성합니다. 이 전략은 이동 평균의 장점을 최대한 활용하여 시장 추세를 효과적으로 추적하고 추세 시작 단계에서 거래 신호를 생성합니다.
이 전략의 핵심 지표는 빠른 EMA 라인과 느린 EMA 라인이다. 전략은 두 가지 다른 파라미터의 EMA 라인을 설정하여, 빠른 EMA 파라미터를 10로 설정하고, 느린 EMA 파라미터를 20로 설정한다. 이 중, 10 일 EMA 라인은 가격 변화에 더 빠르게 반응하고, 20 일 라인은 반응 속도가 느리다. 단기 EMA 라인을 통과하면, 단기 평균이 장기 평균을 상향으로 이끌기 시작하여 구매 신호를 생성합니다. 반대로, 단기 평균이 장기 평균을 통과하면, 단기 평균이 장기 평균에 대한 우위를 잃기 시작하여 판매 신호를 생성합니다.
빠른 느린 EMA 선의 교차 원칙을 통해, 이 전략은 시장 추세의 전환 시기를 충분히 포착하여 거래 신호를 제때 생성할 수 있다. 동시에, EMA 지표는 자체적으로 파동 가짜 신호의 능력을 가지고 있으며, 시장의 변동이 있을 때 자주 포지션을 열지 않도록 한다. 이것은 이 전략이 잘못된 거래를 줄이면서도 시장 전환점을 포착할 수 있게 해 주고, 높은 수익성을 갖는다.
위와 같은 위험에 대해, 추가적인 지표를 도입하여 최적화 할 수 있습니다. 예를 들어, 거래 필터링 조건을 확대하고, MACD 지표와 결합하여 잘못된 신호를 피하고, 적응형 EMA를 사용하여 지표 응답 속도를 가속합니다. 또한, 합리적인 손실 및 적극적인 정지 또한 필요합니다.
이 전략은 다음과 같은 방향으로 더 개선될 수 있습니다.
이 전략은 쌍 EMA 빠른 느린 선 교차 원리를 통해 시장의 중요한 전환점을 포착하고, 강력한 실시 효과를 갖는다. 보조 지표와 최적화된 스톱로드를 결합하여 전략의 안정성을 더욱 강화할 수 있다. 이 전략 아이디어는 간단하고 명확하며, 수량 거래자가 학습하고 적용할 가치가 있으며, 확장 공간과 최적화 잠재력이 크다.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Backtest single EMA cross", overlay=true)
qty = input(100000, "Buy quantity")
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, testStartMin)
testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ?
#00FF00 : na
testPeriod() => true
ema1 = input(10, title="Select EMA 1")
ema2 = input(20, title="Select EMA 2")
expo = ema(close, ema1)
ma = ema(close, ema2)
avg_1 = avg(expo, ma)
s2 = cross(expo, ma) ? avg_1 : na
//plot(s2, style=plot.style_line, linewidth=3, color=color.red, transp=0)
p1 = plot(expo, color=#00FFFF, linewidth=2, transp=0)
p2 = plot(ma, color=color.orange, linewidth=2, transp=0)
fill(p1, p2, color=color.white, transp=80)
longCondition = crossover(expo, ma)
shortCondition = crossunder(expo, ma)
if testPeriod()
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor =#FFFFFF , style=shape.labelup, size = size.normal, location=location.belowbar, color = #1B8112, transp = 0)
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = #FFFFFF, style=shape.labeldown, size = size.normal, location=location.abovebar, color = #FF5733, transp = 0)