Strategi ini terutamanya menggunakan purata bergerak berganda sebagai isyarat beli dan jual untuk mendapat keuntungan daripada pembalikan trend. Ia pergi lama apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang, dan pergi pendek apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang.
Strategi ini mula-mula menetapkan dua purata bergerak, satu jangka pendek 20 hari MA dan satu jangka panjang 60 hari MA. Ia kemudian menilai situasi persimpangan antara kedua-dua MA untuk menentukan kemasukan.
Secara khusus, apabila MA jangka pendek melintasi di atas MA jangka panjang, ia menandakan aliran naik, jadi pergi panjang.
Kaedah stop loss selepas pergi panjang atau pendek adalah trailing stop berdasarkan harga tertinggi dan harga terendah untuk mengunci keuntungan maksimum.
Logik utama kod adalah:
Kelebihan strategi ini ialah:
Terdapat juga beberapa risiko:
Untuk menangani risiko:
Strategi ini boleh dioptimumkan lagi dalam bidang berikut:
Tambah penapis lain seperti RSI untuk kemasukan pelbagai keadaan, mengelakkan pecah palsu.
Mengoptimumkan tempoh MA untuk mencari campuran parameter terbaik. Boleh menguji tempoh yang berbeza dengan langkah ke hadapan.
Mengoptimumkan julat stop loss melalui pengiraan backtest untuk mencari julat optimum.
Tetapkan logik masuk semula selepas keluar stop loss untuk mengurangkan kekerapan perdagangan.
Gabungkan dengan penunjuk trend untuk menghentikan perdagangan apabila trend tidak jelas.
Tambah saiz kedudukan dan stop loss dinamik berdasarkan keadaan pasaran.
Ringkasnya, strategi pembalikan MA berganda adalah mudah dan praktikal secara keseluruhan, mengenal pasti titik perubahan trend melalui persilangan MA berganda. Tetapi terdapat risiko yang memerlukan penyesuaian parameter, pengoptimuman stop loss, dan penambahan penapis untuk memaksimumkan keberkesanan strategi. Dengan pengoptimuman yang teliti dan pengurusan risiko yang disiplin, ia boleh menjadi strategi perdagangan ayunan yang membawa keuntungan yang stabil.
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %") needbe = input(true, defval = true, title = "Bands Entry") needct = input(false, defval = false, title = "Counter-trend entry") needdb = input(true, defval = true, title = "Double Body") len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period") needbb = input(true, defval = true, title = "Show Bands") needbg = input(true, defval = true, title = "Show Background") src = close //PriceChannel 1 lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1] //Lines colo = needbb == false ? na : black plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2") //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 80) //Body body = abs(close - open) smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2 candle = high - low //Signals bar = close > open ? 1 : close < open ? -1 : 0 up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0 dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0 up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0 dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0 if up7 == 1 or up8 == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na) if dn7 == 1 or dn8 == 1 strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)