Strategi ini menentukan arah trend berdasarkan persilangan garis EMA dengan tempoh yang berbeza dan menghasilkan isyarat panjang dan pendek dengan sewajarnya. Ia terutamanya menggunakan dua purata bergerak - EMA 10 hari dan EMA 20 hari. Apabila EMA 10 hari melintasi di bawah EMA 20 hari, isyarat pendek dicetuskan. Apabila EMA 10 hari melintasi di atas EMA 20 hari, isyarat panjang dicetuskan. Strategi ini tergolong dalam strategi perdagangan jangka menengah.
Strategi ini menggunakan dua garis EMA, termasuk EMA 10 hari dan EMA 20 hari. Garis EMA dapat mencerminkan trend harga dengan berkesan. Apabila garis EMA jangka pendek melintasi di atas garis EMA jangka panjang, ia menunjukkan trend harga berubah dari penurunan ke kenaikan, yang merupakan isyarat panjang. Apabila garis EMA jangka pendek melintasi di bawah garis EMA jangka panjang, ia menunjukkan trend harga berubah dari kenaikan ke penurunan, yang merupakan isyarat pendek.
Strategi ini juga menggabungkan nilai maksimum dan minimum turun naik harga untuk menapis beberapa isyarat perdagangan. Isyarat perdagangan hanya dicetuskan selepas turun naik harga mencapai tahap tertentu. Ini boleh menapis beberapa isyarat palsu hingga tahap tertentu.
Secara khusus, dengan mengesan masa apabila nilai maksimum dan minimum dicapai, strategi menilai sama ada trend harga telah terbentuk. Isyarat perdagangan sebenar hanya dicetuskan selepas nilai maksimum atau minimum berlangsung untuk beberapa waktu.
Strategi ini mempunyai kelebihan berikut:
Terdapat juga beberapa risiko dengan strategi ini:
Risiko boleh dikurangkan dengan:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Ringkasnya, strategi silang EMA ini adalah strategi trend berikut yang mudah dan praktikal. Ia menggunakan garis EMA untuk menentukan arah trend utama, digabungkan dengan penapisan turun naik harga untuk membuat keputusan perdagangan. Ia mudah difahami dan menyesuaikan parameter, dapat disesuaikan dengan perdagangan jangka menengah. Dengan pengoptimuman lanjut, ini boleh menjadi strategi kuantitatif yang berbaloi untuk dipegang untuk jangka panjang.
/*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)