Strategi Dagangan Purata Bergerak Perpindahan Berbilang Tahap

Penulis:ChaoZhang, Tarikh: 2023-09-23
Tag:

Ringkasan

Strategi perdagangan purata bergerak berpindah pelbagai peringkat memasuki dan menghentikan kerugian pada pelbagai peringkat dengan menetapkan beberapa garis purata berpindah berpindah dengan parameter yang berbeza. Strategi pertama mengira 3 garis panjang dan 3 garis pendek. Ia menjadi panjang apabila garis panjang berada di bawah garis pendek, dan menjadi pendek apabila garis pendek berada di bawah garis panjang. Strategi ini membolehkan penyesuaian parameter seperti tempoh purata bergerak, nisbah pergeseran, julat masa yang boleh diperdagangkan, dan lain-lain. Ia sesuai untuk perdagangan trend jangka menengah dan panjang.

Logika Strategi

  1. Mengira purata bergerak sederhana tempoh len harga src sebagai garis asas.

  2. Tetapkan bilangan garis panjang dan pendek berdasarkan parameter panjang dan pendek.

  3. Longline1 dan lain-lain ditetapkan dengan menggerakkan garis asas mengikut nisbah longlevel1 dan lain-lain.

  4. Masukkan perdagangan pada pelbagai peringkat apabila harga melintasi garis dalam masa yang boleh diperdagangkan.

  5. Stop loss apabila harga menyentuh garis asas.

  6. Kuasa tutup semua kedudukan selepas masa akhir.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Masuk pelbagai peringkat membolehkan keuntungan pada peringkat yang berbeza dari trend.

  2. Sangat disesuaikan dengan parameter untuk produk yang berbeza dan gaya perdagangan.

  3. Sistem penembusan yang boleh dipercayai berdasarkan purata bergerak.

  4. Elakkan peristiwa besar dengan menetapkan julat masa yang boleh diperdagangkan.

  5. Rugi terhad melalui stop loss.

Analisis Risiko

Beberapa risiko strategi:

  1. Risiko tinggi dari kedudukan piramid, modal yang mencukupi diperlukan.

  2. Parameter yang tidak betul boleh membawa kepada perdagangan berlebihan.

  3. Masa keluar tetap mungkin terlepas keuntungan trend lewat.

  4. Tiada pertimbangan untuk kedudukan overnight dan membawa kos.

  5. Tiada kawalan ke atas saiz kedudukan.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Tambahkan stop loss yang tertinggal dan bukannya masa keluar tetap.

  2. Pertimbangkan kos bawa untuk kedudukan semalam.

  3. Tambah stop loss untuk menangkap keuntungan lewat.

  4. Posisi saiz dinamik berdasarkan pendedahan semasa.

  5. Uji parameter pada produk yang berbeza dan membina kaedah pengoptimuman.

  6. Mengoptimumkan tahap stop loss untuk mengelakkan berhenti yang tidak perlu.

Ringkasan

Strategi purata bergerak berpindah pelbagai peringkat mendapat keuntungan daripada trend melalui kemasukan pelbagai peringkat berdasarkan purata bergerak. Masa yang boleh diperdagangkan dan kawalan kerugian berhenti berisiko dengan baik. Penambahbaikan lanjut terhadap kawalan kos membawa, pengoptimuman parameter, pengoptimuman kerugian berhenti dll.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Lebih lanjut