
Strategi penembusan pergerakan MA ganda adalah strategi perdagangan kuantitatif yang menggunakan purata bergerak dari dua kitaran yang berbeza untuk membuat keputusan trend dan masuk. Strategi ini terutamanya menggunakan MA perlahan untuk menentukan arah trend keseluruhan, dan menggunakan MA cepat untuk menyaring masuk, memilih untuk membalikkan garis K untuk masuk apabila arah trend bersatu di peringkat besar, untuk mengejar kadar kemenangan dan keuntungan yang lebih tinggi.
Strategi ini terdiri daripada beberapa bahagian:
Penghakiman Trend:Melalui pengiraan 21 kitaran MA, yang ditakrifkan sebagai MA perlahan, kedudukan yang lebih rata, boleh digunakan untuk menentukan arah trend keseluruhan. Apabila harga naik, mendekati nilai MA adalah tren naik, dan apabila harga turun, mendekati nilai MA adalah tren turun.
Penapis kemasukan:Pengiraan MA 5 kitaran, yang ditakrifkan sebagai MA pantas. Isyarat perdagangan hanya dihasilkan apabila harga menembusi MA perlahan, dan pada masa yang sama menembusi MA pantas. Reka bentuk ini adalah terutamanya untuk menyaring kemungkinan penembusan palsu lebih lanjut.
Penapis K:Strategi hanya melakukan lebih banyak apabila garis K kitaran itu adalah garis negatif, atau kosong apabila garis K kitaran itu adalah garis positif. Ini memandangkan kadar kejayaan yang lebih tinggi dapat diperoleh dengan menggunakan garis K yang terbalik.
Penapis pembiayaan:Bagi pasaran mata wang kripto, strategi ini menambah tambahan tiga kali ganda kepada syarat kenaikan harga untuk pecah turun naik, memilah peluang untuk turun lebih tinggi dalam penurunan skala besar.
Reka bentuk penghentian kerosakan:Strategi menyokong penutupan bergerak. Apabila kedudukan dibuka, kedudukan penutupan akan dikemas kini secara real-time mengikut peratusan penutupan yang ditetapkan.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Untuk mengatasi risiko ini, anda boleh mengoptimumkan:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Optimumkan parameter: Mengoptimumkan kombinasi parameter kitaran MA cepat dan perlahan dengan pengulangan yang lebih sistematik, meningkatkan nisbah risiko pendapatan keseluruhan.
Pengenalan corakTambahan lain seperti KDJ, MACD dan lain-lain untuk mengenal pasti isyarat pembalikan yang lebih dipercayai.
Pengoptimuman Stop Loss: Mengembangkan algoritma untuk mengesan dan memantau hentian terapung untuk mengurangkan kemungkinan hentian tercetus.
Pembelajaran Mesin: Mengumpul dan menandai lebih banyak data sejarah, menghasilkan peraturan perdagangan secara automatik menggunakan kaedah pembelajaran mesin.
Peralihan kuantitatif: Mengubah strategi pengurusan kedudukan secara automatik mengikut keadaan pasaran.
Strategi penembusan pergerakan MA ganda secara keseluruhan adalah strategi pemantauan trend yang lebih mudah dan praktikal. Strategi ini lebih mudah ditafsirkan dan dikuasai dan lebih dipercayai daripada algoritma pembelajaran mesin yang rumit. Dengan pengoptimuman parameter, pengembangan fungsi dan pengenalan pembelajaran mesin, 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)