Strategi Dagangan Grid Berdasarkan Sistem Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-01-03 17:18:22
Tag:

img

Ringkasan

Strategi ini menggunakan teori purata bergerak untuk membina sistem perdagangan grid dengan menilai trend pasaran melalui pelbagai set purata bergerak JMA dengan parameter yang berbeza.

Logika Strategi

  1. Gunakan gabungan purata bergerak JMA 1-20 tempoh untuk menentukan trend pasaran. Apabila MA tempoh pendek di atas MA tempoh panjang, ia dinilai sebagai trend menaik, dan sebaliknya sebagai trend menurun.

  2. Buka perdagangan grid pada titik pembalikan trend, apabila MA pendek melintasi di bawah atau di atas MA panjang.

  3. Pilihan untuk menapis berdasarkan warna candlestick - hanya membeli pada lilin merah dan menjual pada lilin hijau, jika tidak mengabaikan warna dan perdagangan pada pembalikan trend sahaja.

  4. Keluar adalah sama ada menjejaki stop loss atau keluar berdasarkan masa apabila tempoh strategi berakhir.

Analisis Kelebihan

  1. Menggunakan sistem MA untuk menentukan trend dapat secara berkesan mengenal pasti pembalikan trend jangka panjang.

  2. Dagangan grid boleh menangkap keuntungan dari pasaran yang terhad dengan julat tanpa trend yang jelas, dengan stop loss untuk mengawal risiko.

  3. Parameter JMA yang boleh disesuaikan, boleh dioptimumkan untuk tempoh yang berbeza, fleksibiliti yang tinggi.

  4. Penapis lilin mengelakkan tertipu oleh pembocoran palsu.

Analisis Risiko

  1. Pasaran gergaji cambuk tinggi tanpa trend yang jelas mempunyai risiko stop loss yang lebih tinggi.

  2. Kesalahan penilaian dari sistem MA boleh membawa kepada isyarat perdagangan yang salah.

  3. Candle filter risiko kehilangan beberapa peluang perdagangan.

  4. Jika jarak grid terlalu luas, keuntungan yang tidak mencukupi; terlalu sempit boleh mengakibatkan terlalu banyak kedudukan dan kos yang tinggi.

Arahan pengoptimuman

  1. Uji lebih banyak kombinasi parameter untuk mencari kombinasi JMA MA yang optimum untuk produk yang berbeza.

  2. Menggabungkan penapis lain seperti pita BOLL, KD dll untuk meningkatkan kualiti isyarat.

  3. Mengoptimumkan konfigurasi grid seperti jarak grid, lot kemasukan dll.

  4. Pertimbangkan lebih banyak kaedah stop loss seperti berasaskan jurang, penangguhan trailing dll.

Kesimpulan

Strategi ini menilai pembalikan menggunakan teori JMA dan membuka perdagangan grid pada titik perubahan untuk menangkap keuntungan dari perubahan trend jangka panjang. Prestasi boleh ditingkatkan lagi melalui pengoptimuman parameter. Secara keseluruhan, ia sesuai untuk pegangan jangka menengah dan panjang untuk secara beransur-ansur mengesan dan mendapat keuntungan dari pergerakan trend.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's Fishnet Strategy", shorttitle = "Fishnet str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
usecf = input(false, defval = false, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//JMA
jmax(src, len) =>
    beta = 0.45*(len-1)/(0.45*(len-1)+2)
    alpha = pow(beta, 3)
    L0=0.0, L1=0.0, L2=0.0, L3=0.0, L4=0.0
    L0 := (1-alpha)*src + alpha*nz(L0[1])
    L1 := (src - L0[0])*(1-beta) + beta*nz(L1[1])
    L2 := L0[0] + L1[0]
    L3 := (L2[0] - nz(L4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(L3[1])
    L4 := nz(L4[1]) + L3[0]
	L4

ma01 = jmax(close, 10)
ma02 = jmax(close, 20)
ma03 = jmax(close, 30)
ma04 = jmax(close, 40)
ma05 = jmax(close, 50)
ma06 = jmax(close, 60)
ma07 = jmax(close, 70)
ma08 = jmax(close, 80)
ma09 = jmax(close, 90)
ma10 = jmax(close, 100)
ma11 = jmax(close, 110)
ma12 = jmax(close, 120)
ma13 = jmax(close, 130)
ma14 = jmax(close, 140)
ma15 = jmax(close, 150)
ma16 = jmax(close, 160)
ma17 = jmax(close, 170)
ma18 = jmax(close, 180)
ma19 = jmax(close, 190)
ma20 = jmax(close, 200)

trend = 0
trend := ma01 > ma20 ? 1 : ma01 < ma20 ? -1 : trend[1]
col = trend == 1 ? #00FF7F : #DC143C

plot(ma01, transp = 0, color = col)
plot(ma02, transp = 0, color = col)
plot(ma03, transp = 0, color = col)
plot(ma04, transp = 0, color = col)
plot(ma05, transp = 0, color = col)
plot(ma06, transp = 0, color = col)
plot(ma07, transp = 0, color = col)
plot(ma08, transp = 0, color = col)
plot(ma09, transp = 0, color = col)
plot(ma10, transp = 0, color = col)
plot(ma11, transp = 0, color = col)
plot(ma12, transp = 0, color = col)
plot(ma13, transp = 0, color = col)
plot(ma14, transp = 0, color = col)
plot(ma15, transp = 0, color = col)
plot(ma16, transp = 0, color = col)
plot(ma17, transp = 0, color = col)
plot(ma18, transp = 0, color = col)
plot(ma19, transp = 0, color = col)
plot(ma20, transp = 0, color = col)

//Trading
lot = 0.0
lot := strategy.equity / close * capital / 100

if trend == 1 and (close < open or usecf == false)
    strategy.entry("Long", strategy.long, needlong ? lot : na)

if trend == -1 and (close > open or usecf == false)
    strategy.entry("Short", strategy.short, needshort ? lot : na)
    

Lebih lanjut