
Strategi ini berdasarkan kepada persilangan garis rata-rata EMA dalam tempoh yang berbeza untuk menilai arah trend dan dengan itu membina isyarat perdagangan jangka pendek. Strategi ini menggunakan 2 garis rata-rata, iaitu 10th dan 20th. Apabila garis 10th melintasi garis 20th dari atas ke bawah, buat perdagangan jangka pendek; apabila garis 10th melintasi garis 20th dari bawah ke atas, buat perdagangan jangka pendek.
Strategi ini menggunakan 2 garis EMA, termasuk garis 10 dan 20 . Garis EMA yang rata-rata dapat mencerminkan arah trend harga dengan baik . Apabila garis EMA jangka pendek dari bawah ke atas melintasi garis EMA jangka panjang, menunjukkan pergerakan harga dari turun ke atas, dan ia adalah tanda banyak. Apabila garis EMA jangka pendek dari atas ke bawah melintasi garis EMA jangka panjang, menunjukkan pergerakan harga dari naik ke bawah, dan ia adalah tanda kosong.
Strategi ini menggabungkan nilai maksimum dan minimum pergerakan untuk menyaring sebahagian daripada isyarat perdagangan. Isyarat perdagangan hanya akan dikeluarkan setelah pergerakan harga mencapai tahap tertentu. Ini dapat menyaring beberapa isyarat palsu.
Khususnya, strategi ini menentukan sama ada trend harga terbentuk dengan mengesan masa mencapai nilai tertinggi dan terendah harga. Hanya selepas mencapai nilai tertinggi atau terendah, isyarat perdagangan sebenar akan dikeluarkan.
Strategi ini mempunyai beberapa kelebihan:
Strategi ini mempunyai beberapa risiko:
Anda boleh mengurangkan risiko dengan:
Strategi ini boleh dioptimumkan dengan cara berikut:
Strategi EMA crossover secara keseluruhannya adalah strategi pengesanan trend yang mudah dan praktikal. Ia menggunakan EMA rata-rata untuk menentukan arah trend besar, dan kemudian menggabungkan isyarat penapis pergerakan harga untuk membentuk keputusan perdagangan. Strategi ini mudah difahami dan menyesuaikan parameter, dan dapat disesuaikan dengan perdagangan garis pendek tengah. Dengan pengoptimuman lanjut, ini boleh menjadi strategi kuantitatif yang bernilai digunakan dalam jangka masa 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)