Strategi ini menentukan arah tren berdasarkan penyeberangan garis EMA dengan periode yang berbeda dan menghasilkan sinyal panjang dan pendek sesuai dengan itu. Ini terutama menggunakan dua rata-rata bergerak - EMA 10 hari dan EMA 20 hari. Ketika EMA 10 hari melintasi di bawah EMA 20 hari, sinyal pendek dipicu. Ketika EMA 10 hari melintasi di atas EMA 20 hari, sinyal panjang dipicu. Strategi ini termasuk dalam strategi perdagangan jangka menengah.
Strategi ini menggunakan dua garis EMA, termasuk EMA 10 hari dan EMA 20 hari. Garis EMA dapat mencerminkan tren harga secara efektif. Ketika garis EMA jangka pendek melintasi di atas garis EMA jangka panjang, itu menunjukkan tren harga berubah dari penurunan ke kenaikan, yang merupakan sinyal panjang. Ketika garis EMA jangka pendek melintasi di bawah garis EMA jangka panjang, itu menunjukkan tren harga berubah dari kenaikan ke penurunan, yang merupakan sinyal pendek.
Strategi ini juga menggabungkan nilai maksimum dan minimum fluktuasi harga untuk menyaring beberapa sinyal perdagangan.
Secara khusus, dengan melacak waktu ketika nilai maksimum dan minimum tercapai, strategi menilai apakah tren harga telah terbentuk.
Strategi ini memiliki keuntungan berikut:
Ada juga beberapa risiko dengan strategi ini:
Risiko dapat dikurangi dengan:
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Singkatnya, strategi EMA crossover ini adalah strategi trend following yang sederhana dan praktis. Ini menggunakan garis EMA untuk menentukan arah tren utama, dikombinasikan dengan penyaringan fluktuasi harga untuk membuat keputusan perdagangan. Sangat mudah dipahami dan menyesuaikan parameter, dapat disesuaikan dengan perdagangan jangka menengah. Dengan optimasi lebih lanjut, ini dapat menjadi strategi kuantitatif yang bermanfaat 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)