
Strategi ini didasarkan pada persilangan garis rata-rata EMA dari periode yang berbeda untuk menilai arah tren dan dengan demikian membangun sinyal shorting ganda. Strategi ini terutama menggunakan 2 garis rata-rata, yaitu garis 10 dan 20 .
Strategi ini menggunakan 2 garis rata-rata EMA, termasuk garis 10 dan 20. Garis rata-rata EMA dapat mencerminkan arah tren harga dengan baik. Ketika garis EMA jangka pendek dari bawah ke atas melintasi garis EMA jangka panjang, menunjukkan pergerakan harga dari turun ke atas, termasuk sinyal multipel; Ketika garis EMA jangka pendek dari atas ke bawah melintasi garis EMA jangka panjang, menunjukkan pergerakan harga dari naik ke bawah, termasuk sinyal kosong.
Strategi ini menggabungkan nilai maksimum dan minimum dari fluktuasi untuk memfilter sebagian dari sinyal perdagangan. Hanya setelah fluktuasi harga mencapai tingkat tertentu, sinyal perdagangan akan dikirim. Ini dapat memfilter sebagian dari sinyal palsu.
Secara khusus, strategi ini menentukan apakah tren harga telah terbentuk dengan melacak saat harga mencapai nilai tertinggi dan terendah. Hanya setelah mencapai nilai tertinggi atau terendah, sinyal perdagangan yang sebenarnya akan dikirim.
Strategi ini memiliki beberapa keuntungan:
Strategi ini juga memiliki beberapa risiko:
Risiko dapat dikurangi dengan melakukan hal berikut:
Strategi ini dapat dioptimalkan lebih lanjut dari beberapa arah:
Strategi EMA crossover secara keseluruhan adalah strategi pelacakan tren yang sederhana dan praktis. Ini menggunakan rata-rata EMA untuk menentukan arah tren besar, kemudian menggabungkan sinyal penyaring fluktuasi harga untuk membentuk keputusan perdagangan. Strategi ini mudah dipahami dan menyesuaikan parameternya, dan dapat disesuaikan dengan perdagangan garis pendek tengah. Dengan pengoptimalan lebih lanjut, ini dapat menjadi strategi kuantitatif yang layak digunakan 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)