Ini adalah strategi penembusan saluran purata bergerak berdasarkan purata bergerak dan saluran julat. Ia menggunakan garis purata bergerak dan garis saluran atas / bawah untuk menentukan penembusan untuk isyarat perdagangan.
Logik teras strategi ini ialah:
Tetapkan garis purata bergerak tempoh tertentu sebagai garis tengah.
Tetapkan garis saluran atas dan bawah dengan mengalikan garis tengah dengan peratusan tertentu. Garis atas adalah garis tengah * (100% + peratusan yang telah ditetapkan). Garis bawah adalah garis tengah * (100% - peratusan yang telah ditetapkan).
Apabila harga pecah di atas garis atas, pergi pendek. Apabila harga pecah di bawah garis bawah, pergi panjang.
Tetapkan harga pesanan pada baris atas/bawah yang sepadan.
Tutup kedudukan apabila harga kembali ke garis tengah.
Jadi ia berdagang berdasarkan penembusan saluran purata bergerak.
Kelebihan strategi ini ialah:
Konsep yang mudah dan jelas, mudah difahami dan dilaksanakan.
Parameter yang boleh diselaraskan sesuai dengan keadaan pasaran yang berbeza.
Garis tengah dan julat saluran boleh menapis bunyi pasaran dan menangkap trend.
Mengehadkan perintah kawalan risiko.
Potong kerugian apabila harga kembali ke garisan tengah.
Terdapat juga beberapa risiko:
Tetapan parameter yang tidak betul boleh menyebabkan perdagangan berlebihan/tidak mencukupi.
Kemungkinan tinggi untuk keluar palsu dan stop loss.
Kegagalan garis tengah dan saluran di bawah perubahan pasaran yang besar.
Keluar lebih awal apabila dipaksa untuk menutup pada garis tengah.
Penyelesaian:
Mengoptimumkan parameter seperti tempoh MA dan peratusan saluran.
Tambah penunjuk lain seperti jumlah untuk mengelakkan pecah palsu.
Tingkatkan campur tangan manual.
Gunakan tempoh MA yang lebih lama dan julat saluran yang lebih luas.
Strategi ini boleh ditingkatkan dari aspek berikut:
Tambah kaedah stop loss seperti trailing stop untuk mengehadkan kerugian.
Tambah penapisan penunjuk seperti MACD untuk mengurangkan isyarat palsu.
Membolehkan pengoptimuman parameter automatik.
Tambah lagi kriteria kedudukan terbuka di luar breakout.
Mengoptimumkan parameter MA dan saluran.
Kesimpulannya, ini adalah strategi penembusan saluran MA yang praktikal. Ia mempunyai logik yang mudah untuk penggunaan yang mudah, sementara julat saluran boleh menapis bunyi bising. Ia berfungsi dengan baik di pasaran tren. Tetapi risiko ada dan parameter bersama dengan penapis tambahan memerlukan pengoptimuman untuk perdagangan sebenar. Strategi ini mempunyai nilai praktikal dan pembangunan tertentu.
/*backtest start: 2023-01-01 00:00:00 end: 2023-08-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Robot WhiteBox ShiftMA", shorttitle = "Robot WhiteBox ShiftMA", 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, %") per = input(3, title = "Length") src = input(ohlc4, title = "Source") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") 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") //SMAs sma = sma(src, per) shortline = sma * ((100 + shortlevel) / 100) longline = sma * ((100 + longlevel) / 100) plot(shortline, linewidth = 2, color = red, title = "Short line") plot(sma, linewidth = 2, color = blue, title = "SMA line") plot(longline, linewidth = 2, color = lime, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = longline) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = shortline) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = sma) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = sma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()