Momentum Moving Average Crossover Strategy


Tarikh penciptaan: 2024-01-23 14:18:26 Akhirnya diubah suai: 2024-01-23 14:18:26
Salin: 1 Bilangan klik: 537
1
fokus pada
1617
Pengikut

Momentum Moving Average Crossover Strategy

Gambaran keseluruhan

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.

Prinsip Strategi

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.

Analisis kelebihan strategi

Strategi ini mempunyai beberapa kelebihan:

  1. Menggunakan garis rata-rata EMA untuk menentukan arah trend, anda boleh mengesan pergerakan pasaran dengan berkesan
  2. Garis purata EMA yang menggabungkan tempoh yang berbeza untuk menangkap peluang perdagangan pada garis pendek dan tengah
  3. Dengan penapisan yang melampau, anda boleh menapis sebahagian daripada bunyi bising dan mengelakkan kehilangan peluang perdagangan
  4. Logik strategi ringkas dan jelas, mudah difahami dan diubah suai
  5. Parameter boleh disesuaikan mengikut pelbagai jenis dan keutamaan perdagangan, beradaptasi kuat

Analisis risiko strategi

Strategi ini mempunyai beberapa risiko:

  1. EMA rata-rata sendiri akan mengalami kemunduran dan mungkin terlepas daripada perubahan harga jangka pendek
  2. Penapisan isyarat bising tidak lengkap, mungkin terdapat beberapa transaksi yang salah
  3. Parameter perlu disesuaikan dengan keadaan pasaran yang berbeza

Anda boleh mengurangkan risiko dengan:

  1. Pengesahan isyarat yang digabungkan dengan penunjuk lain untuk mengelakkan ketinggalan EMA
  2. Mengoptimumkan keadaan penapisan nilai teratas untuk meningkatkan kebolehpercayaan isyarat
  3. Menyesuaikan parameter mengikut hasil tinjauan balik, strategi pengoptimuman

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Menambah portfolio penunjuk teknikal lain untuk meningkatkan ketepatan isyarat perdagangan. Contohnya MACD, KD dan sebagainya.
  2. Mengoptimumkan parameter EMA rata-rata supaya lebih sesuai dengan jenis tertentu.
  3. Mengoptimumkan parameter nilai maksimum dan minimum, meningkatkan penilaian terhadap turun naik harga.
  4. Tambah strategi hentikan kerugian untuk mengawal kerugian maksimum dalam satu transaksi.
  5. Uji kelayakan strategi ini kepada pelbagai varieti.

ringkaskan

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.

Kod sumber strategi
/*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)