Strategi Perpindahan Momentum Berdasarkan Purata Bergerak Eksponensial

Penulis:ChaoZhang, Tarikh: 2024-01-23 14:18:26
Tag:

img

Ringkasan

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.

Prinsip Strategi

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.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan garis EMA untuk menentukan arah trend boleh mengesan pergerakan pasaran dengan berkesan
  2. Menggabungkan garis EMA dari tempoh yang berbeza boleh menangkap peluang perdagangan dalam jangka sederhana
  3. Menapis isyarat dengan nilai melampau boleh menghilangkan beberapa bunyi bising dan mengelakkan peluang perdagangan yang hilang
  4. Logikanya mudah dan jelas, mudah difahami dan diubahsuai
  5. Parameter boleh diselaraskan untuk produk dan keutamaan perdagangan yang berbeza, menunjukkan daya adaptasi yang kuat

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Garis EMA sendiri mempunyai kesan kelewatan, mungkin terlepas pembalikan trend jangka pendek
  2. Penapisan bunyi tidak sempurna, beberapa perdagangan yang salah mungkin berlaku
  3. Parameter perlu disesuaikan dengan betul untuk menyesuaikan dengan persekitaran pasaran yang berbeza

Risiko boleh dikurangkan dengan:

  1. Menambah penunjuk lain untuk pengesahan isyarat untuk mengelakkan masalah ketinggalan garis EMA
  2. Mengoptimumkan keadaan penapisan nilai melampau untuk meningkatkan kebolehpercayaan isyarat
  3. Penyesuaian parameter berdasarkan hasil backtest untuk mengoptimumkan strategi

Arahan untuk Peningkatan

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Menggabungkan penunjuk teknikal lain seperti MACD dan KD untuk meningkatkan ketepatan isyarat
  2. Mengoptimumkan parameter barisan EMA untuk lebih sesuai dengan produk tertentu
  3. Memperbaiki parameter nilai melampau untuk menilai lebih baik turun naik harga
  4. Tambah mekanisme stop loss untuk mengawal kerugian maksimum setiap perdagangan
  5. Uji strategi pada produk yang berbeza untuk menilai kesesuaian

Ringkasan

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)



Lebih lanjut