Strategi Momentum Crossover Berdasarkan Rata-rata Bergerak Eksponensial

Penulis:ChaoZhangTanggal: 2024-01-23 14:18:26
Tag:

img

Gambaran umum

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.

Prinsip Strategi

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.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan garis EMA untuk menentukan arah tren dapat melacak pergerakan pasar secara efektif
  2. Menggabungkan garis EMA dari periode yang berbeda dapat menangkap peluang perdagangan dalam jangka menengah
  3. Menyaring sinyal dengan nilai ekstrim dapat menghilangkan kebisingan dan menghindari kehilangan peluang perdagangan
  4. Logika sederhana dan jelas, mudah dipahami dan dimodifikasi
  5. Parameter dapat disesuaikan untuk produk dan preferensi perdagangan yang berbeda, menunjukkan kemampuan beradaptasi yang kuat

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Garis EMA sendiri memiliki efek keterlambatan, dapat melewatkan pembalikan tren jangka pendek
  2. Filter kebisingan tidak sempurna, beberapa perdagangan yang salah mungkin terjadi
  3. Parameter perlu disesuaikan dengan lingkungan pasar yang berbeda

Risiko dapat dikurangi dengan:

  1. Menambahkan indikator lain untuk konfirmasi sinyal untuk menghindari masalah keterlambatan garis EMA
  2. Mengoptimalkan kondisi penyaringan nilai ekstrim untuk meningkatkan keandalan sinyal
  3. Mengatur parameter berdasarkan hasil backtest untuk mengoptimalkan strategi

Petunjuk untuk Peningkatan

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Menggabungkan indikator teknis lainnya seperti MACD dan KD untuk meningkatkan akurasi sinyal
  2. Mengoptimalkan parameter garis EMA agar lebih sesuai dengan produk tertentu
  3. Memperbaiki parameter nilai ekstrim untuk menilai fluktuasi harga dengan lebih baik
  4. Tambahkan mekanisme stop loss untuk mengontrol kerugian maksimum per perdagangan
  5. Uji strategi pada produk yang berbeda untuk mengevaluasi kemampuan beradaptasi

Ringkasan

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)



Lebih banyak