Dual MA Trend Breakout adalah strategi perdagangan kuantitatif yang menggunakan dua purata bergerak dari tempoh yang berbeza untuk menentukan trend dan menjana isyarat kemasukan. Ia terutamanya menilai arah trend keseluruhan melalui MA yang perlahan dan menggunakan MA yang cepat untuk penapisan kemasukan. Apabila arah trend jangka masa yang lebih besar konsisten, ia memilih bar pembalikan untuk memasuki, untuk mengejar kadar kemenangan dan keuntungan yang lebih tinggi.
Strategi ini terdiri daripada bahagian utama berikut:
Penghakiman Trend: Mengira MA 21 tempoh, ditakrifkan sebagai MA perlahan. Kedudukannya agak stabil dan boleh digunakan untuk menilai arah trend keseluruhan. Apabila harga meningkat berhampiran MA ini, ia adalah trend menaik. Apabila harga jatuh berhampiran MA ini, ia adalah trend menurun.
Penapisan entri: Mengira MA 5 tempoh, yang ditakrifkan sebagai MA pantas. Hanya apabila harga memecahkan kedua-dua MA perlahan dan MA pantas, isyarat dagangan dicetuskan. Reka bentuk ini terutamanya menapis lagi kemungkinan pecah palsu.
Penapisan lilin: Strategi ini hanya pergi lama apabila lilin semasa menurun, atau pergi pendek apabila lilin semasa naik. Ini menganggap bahawa menggunakan bar pembalikan untuk kemasukan dapat memperoleh kadar kejayaan yang lebih tinggi. Ia juga menggabungkan penunjuk RSI cepat untuk mengelakkan memasuki kawasan yang terlalu banyak dibeli atau terlalu banyak dijual.
Penapis Piramida: Untuk pasaran kripto, strategi itu juga merangkumi syarat pecah turun naik tiga kali ganda untuk menangkap peluang oversold dalam trend penurunan yang ketara.
Hentikan Kerugian: Strategi ini menyokong stop loss bergerak. Selepas membuka kedudukan, stop loss akan dikemas kini dalam masa nyata berdasarkan peratusan yang ditetapkan.
Kelebihan strategi ini termasuk:
Strategi ini juga mempunyai beberapa risiko:
Untuk menangani risiko ini, pengoptimuman boleh dibuat dalam aspek berikut:
Aspek utama untuk mengoptimumkan strategi ini termasuk:
Pengoptimuman Parameter: Ujian backtest secara sistematik untuk mencari kombinasi tempoh MA yang cepat dan perlahan yang optimum untuk meningkatkan pulangan yang disesuaikan dengan risiko.
Pengiktirafan corak: Tambah penunjuk lain seperti KDJ, MACD untuk mengenal pasti isyarat pembalikan yang lebih boleh dipercayai.
Hentikan Peningkatan Kerugian: Membangunkan algoritma stop loss terapung atau berturut-turut untuk mengurangkan peluang untuk dihentikan.
Pembelajaran Mesin: Mengumpul dan melabel data sejarah untuk menghasilkan peraturan perdagangan secara automatik menggunakan ML.
Pengukuran Kedudukan: Sesuaikan saiz kedudukan secara dinamik berdasarkan keadaan pasaran.
Dual MA Trend Breakout Strategy umumnya merupakan strategi trend berikut yang mudah dan praktikal. Berbanding dengan algoritma pembelajaran mesin yang kompleks, strategi ini lebih mudah ditafsirkan dan dikuasai, dengan kebolehpercayaan yang lebih tinggi. Dengan penyesuaian parameter, pengembangan ciri dan peningkatan ML, strategi ini mempunyai potensi peningkatan yang besar dan merupakan titik permulaan yang baik untuk perdagangan kuantitatif.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-07 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) //Settings needlong = input(true, "long") needshort = input(true, "short") needstops = input(false, "stops") stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %") useohlc4 = input(false, defval = false, title = "Use OHLC4") usefastsma = input(true, "Use fast MA Filter") fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period") slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period") bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q") needbg = input(false, defval = false, title = "Need trend Background?") needarr = input(false, defval = false, title = "Need entry arrows?") needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)") src = useohlc4 == true ? ohlc4 : close //PriceChannel 1 lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 //PriceChannel 2 lasthigh2 = highest(src, fastlen) lastlow2 = lowest(src, fastlen) center2 = (lasthigh2 + lastlow2) / 2 //Trend trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1] //Bars bar = close > open ? 1 : close < open ? -1 : 0 redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0 greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0 //Fast RSI fastup = rma(max(change(close), 0), 2) fastdown = rma(-min(change(close), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //CryptoBottom mac = sma(close, 10) len = abs(close - mac) sma = sma(len, 100) max = max(open, close) min = min(open, close) up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0 //Signals up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0 dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0 up2 = high < center and high < center2 and bar == -1 ? 1 : 0 dn2 = low > center and low > center2 and bar == 1 ? 0 : 0 //Lines plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA") plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2") //Arrows plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0) plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0) //Background col = needbg == false ? na : trend == 1 ? lime : red bgcolor(col, transp = 90) //Alerts alertcondition(up == 1, title='buy', message='Uptrend') alertcondition(dn == 1, title='sell', message='Downtrend') //Trading stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1] stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1] longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1 if (longCondition) strategy.entry("Long", strategy.long, needlong == false ? 0 : na) strategy.exit("Stop Long", "Long", stop = stoplong) shortCondition = dn == 1 if (shortCondition) strategy.entry("Short", strategy.short, needshort == false ? 0 : na) strategy.exit("Stop Short", "Short", stop = stopshort)