이 전략은 다른 기간과 EMA 라인의 교차를 기반으로 트렌드 방향을 결정하고 그에 따라 긴 및 짧은 신호를 생성합니다. 주로 두 이동 평균 - 10 일 EMA 및 20 일 EMA를 사용합니다. 10 일 EMA가 20 일 EMA 아래로 넘을 때 짧은 신호가 발동됩니다. 10 일 EMA가 20 일 EMA를 넘을 때 긴 신호가 발동됩니다. 이 전략은 중장기 거래 전략에 속합니다.
이 전략은 10일 EMA와 20일 EMA를 포함한 두 개의 EMA 라인을 이용한다. EMA 라인은 가격의 트렌드를 효과적으로 반영할 수 있다. 단기 EMA 라인이 장기 EMA 라인의 위를 넘을 때, 이는 가격 트렌드가 하락에서 상승으로 전환되는 것을 나타냅니다. 단기 EMA 라인이 장기 EMA 라인의 아래를 넘을 때, 그것은 가격 트렌드가 상승에서 하락으로 전환되는 것을 나타냅니다. 이는 짧은 신호입니다.
이 전략은 또한 일부 거래 신호를 필터링하기 위해 가격 변동의 최대 및 최소 값을 결합합니다. 거래 신호는 가격 변동이 일정 정도에 도달 한 후에 만 시작됩니다. 이것은 일부 잘못된 신호를 어느 정도 필터링 할 수 있습니다.
구체적으로, 최대 및 최소 값이 도달되는 시간을 추적함으로써 전략은 가격 추세가 형성되었는지 여부를 판단합니다. 실제 거래 신호는 최대 또는 최소 값이 일정 기간 동안 지속된 후에 만 발동됩니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
위험은 다음을 통해 완화 될 수 있습니다.
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
요약하자면, 이 EMA 크로스오버 전략은 단순하고 실용적인 트렌드 다음 전략이다. 주요 트렌드 방향을 결정하기 위해 EMA 라인을 사용하여 거래 결정을 내리기 위해 가격 변동 필터링과 결합합니다. 매개 변수를 이해하고 조정하기 쉽고 중장기 거래에 적응 할 수 있습니다. 추가 최적화로, 이것은 장기적으로 유지하는 가치있는 양적 전략이 될 수 있습니다.
/*backtest start: 2024-01-15 00:00:00 end: 2024-01-22 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("PierceMAStrat", overlay=true) lenMA0 = input(title="Length 0",defval=2) lenMA1=input(title="Length 1",defval=10) lenMA2=input(title="Length 2", defval=20) lenMA3 = input(title = "Length3", defval =50) emaLen0 = ema(close, lenMA0) emaLen1 = ema(close, lenMA1) emaLen2 = ema(close, lenMA2) emaLen3 = ema(close, lenMA3) ascent = if emaLen1[1] < emaLen1[0] true else false descent = if emaLen1[1] > emaLen1[0] true else false TimeSinceAscensionStart = if ascent == true barssince(descent == true) else 0 StartUp = if TimeSinceAscensionStart < 1 true else false StartDown = if TimeSinceAscensionStart < 1 false else true AscentBarCounter = barssince(StartUp == true) DescentBarCounter = barssince(StartDown == true) MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10 true else false MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5 true else false longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3 true else false shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3 true else false //longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3)) //shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3) if longCond == true strategy.entry("LONG", strategy.long) if shortCond == true strategy.entry("SHORT", strategy.short) plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small) plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small) //plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny) //plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny) //plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small) //plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small) //plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small) //plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small) //plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS") plot(emaLen1, color=green, transp=0, linewidth=2) plot(emaLen2, color=red, transp=30, linewidth=2) plot(emaLen3, color=blue, transp=30, linewidth=2)