Strategi perdagangan grid berdasarkan sistem rata-rata bergerak

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

img

Gambaran umum

Strategi ini menggunakan teori rata-rata bergerak untuk membangun sistem perdagangan grid dengan menilai tren pasar melalui beberapa set rata-rata bergerak JMA dengan parameter yang berbeda.

Logika Strategi

  1. Menggunakan kombinasi dari 1-20 periode JMA bergerak rata-rata untuk menentukan tren pasar.

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

  3. Pilihan untuk menyaring berdasarkan warna candlestick - hanya membeli pada lilin merah dan menjual pada lilin hijau, jika tidak mengabaikan warna dan perdagangan pada pembalikan tren saja.

  4. Exits adalah stop loss atau exit berbasis waktu ketika durasi strategi berakhir.

Analisis Keuntungan

  1. Menggunakan sistem MA untuk menentukan tren dapat secara efektif mengidentifikasi pembalikan tren jangka panjang.

  2. Perdagangan grid dapat menangkap keuntungan dari pasar yang terikat rentang tanpa tren yang jelas, dengan stop loss untuk mengendalikan risiko.

  3. Parameter JMA yang dapat disesuaikan, dapat dioptimalkan untuk periode yang berbeda, fleksibilitas tinggi.

  4. Filter lilin menghindari tertipu oleh kebocoran palsu.

Analisis Risiko

  1. Pasar whip saw tinggi tanpa tren yang jelas memiliki risiko stop loss yang lebih tinggi.

  2. Kesalahan penilaian dari sistem MA dapat menyebabkan sinyal perdagangan yang salah.

  3. Candle filter risiko kehilangan beberapa peluang perdagangan.

  4. Jika jarak grid terlalu luas, keuntungan yang tidak cukup; terlalu sempit dapat mengakibatkan terlalu banyak posisi dan biaya yang tinggi.

Arahan Optimasi

  1. Uji lebih banyak kombinasi parameter untuk menemukan kombinasi JMA MA yang optimal untuk produk yang berbeda.

  2. Mengintegrasikan filter lain seperti BOLL band, KD dll untuk meningkatkan kualitas sinyal.

  3. Mengoptimalkan konfigurasi grid seperti jarak grid, lot entri dll.

  4. Pertimbangkan lebih banyak metode stop loss seperti gap based, trailing stops dll.

Kesimpulan

Strategi ini menilai pembalikan menggunakan teori JMA dan membuka perdagangan grid pada titik balik untuk menangkap keuntungan dari pergeseran tren jangka panjang. Kinerja dapat ditingkatkan lebih lanjut melalui optimasi parameter. Secara keseluruhan, ini cocok untuk kepemilikan jangka menengah dan panjang untuk secara bertahap melacak dan mendapatkan keuntungan dari pergerakan tren.


/*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 banyak