Strategi ini adalah strategi multi-space berdasarkan purata bergerak. Ia menggunakan 3 purata bergerak dengan parameter yang berbeza untuk menghasilkan isyarat dagangan. Apabila harga naik melalui purata bergerak, lakukan lebih banyak, dan apabila turun, lakukan kosong.
Strategi ini menggunakan fungsi sma untuk mengira purata bergerak yang panjangnya adalah len, iaitu ma. Kemudian, berdasarkan ma, ia mengira purata bergerak dalam tiga peratusan yang berbeza, iaitu longline1, longline2, dan longline3. Di antaranya, longline1 bergerak -4, longline2 bergerak -5, dan longline3 bergerak -6.
Pada masa menghasilkan isyarat beli, jika tidak ada kedudukan pada masa ini, buka lebih banyak kedudukan apabila harga melewati longline 1; jika sudah ada kedudukan tangan 1, buka lagi tangan 1 apabila harga melewati longline 2; jika sudah ada kedudukan tangan 2, buka lagi tangan 1 apabila harga melewati longline 3, memegang maksimum 3 tangan lebih banyak kedudukan.
Apabila isyarat jual dihasilkan, jika anda memegang lebih banyak kedudukan pada masa ini, anda akan meletakkan lebih sedikit kedudukan apabila harga turun.
Strategi ini boleh dilakukan dengan mengelaskan dalam kumpulan untuk mencapai kesan pengesanan trend.
Penyelesaian risiko:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Menambah penghakiman indikator lain untuk menentukan arah trend, seperti penambahan MACD untuk menilai trend yang kuat
Mengoptimumkan parameter purata bergerak untuk mencari kombinasi parameter yang optimum
Menyesuaikan jumlah dan perkadaran kerja berlebihan untuk mengelakkan penangkapan.
Menambah mekanisme hentian bergerak, yang boleh menetapkan titik hentian berdasarkan ATR
Anda boleh menyesuaikan nombor kedudukan mengikut kadar turun naik pasaran yang dinamik, mengurangkan kedudukan apabila turun naik besar
Uji kesan parameter pelbagai jenis untuk mencari jenis yang paling sesuai dengan strategi
Membangunkan modul Exit untuk mempertimbangkan penundaan keluar apabila bentuk tertentu muncul
Secara keseluruhannya, strategi ini menggunakan purata bergerak untuk menentukan arah trend untuk berdagang, dengan melakukan satu-satunya peringkat peringkat yang boleh menjejaki trend untuk mendapatkan keuntungan. Tetapi terdapat sedikit ketinggalan, mengejar risiko yang tinggi. Kita boleh mengoptimumkan strategi ini dengan cara menambahkan indikator penilaian tambahan, parameter pengoptimuman, menyesuaikan pengurusan kedudukan, menambah mekanisme hentikan kerugian, dan sebagainya, supaya dapat menyesuaikan diri dengan keadaan pasaran yang berbeza, untuk mencapai keuntungan yang stabil dan terkawal.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 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.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Lenghs")
src = input(ohlc4, title = "MA Source")
longlevel1 = input(-4.0, title = "Long line 1")
longlevel2 = input(-5.0, title = "Long line 2")
longlevel3 = input(-6.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
//MA
ma = sma(src, len)
longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult
longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult
longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult
//Lines
offset = needoffset ? 1 : 0
plot(ma, color = color.blue)
plot(longline1, offset = offset, color = color.lime)
plot(longline2, offset = offset, color = color.lime)
plot(longline3, offset = offset, color = color.lime)
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2))
if size > 0
strategy.entry("TP", strategy.short, 0, limit = ma)