Strategi Penembusan Trend MA Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-08 16:43:38
Tag:

img

Ringkasan

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.

Logika Strategi

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.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Reka bentuk MA berganda adalah mudah dan praktikal, mudah difahami dan dikuasai;
  2. Penghakiman trend yang boleh dipercayai dengan menyisir MA pantas dan perlahan;
  3. Masukan bar pembalikan meningkatkan kadar kemenangan perdagangan;
  4. Metodologi keseluruhan adalah konservatif dan stabil, sesuai untuk semua jangka masa;
  5. Menyokong memindahkan stop loss untuk mengawal risiko;
  6. Khususnya mempertimbangkan ciri-ciri pasaran kripto dengan menambah peluang piramid oversold untuk mendapatkan pulangan yang berlebihan.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Semasa tempoh MA berganda yang terikat julat, akan ada beberapa kemenangan dan kerugian kecil.
  2. Masukan bar pembalikan mungkin mempunyai kadar kemenangan yang rendah dalam beberapa jangka masa.
  3. Pasaran kripto mempunyai turun naik yang tinggi dan peluang tinggi untuk menghentikan kerugian.
  4. Peluang piramid yang terlalu banyak dijual tidak banyak, dengan turun naik pulangan yang tinggi.

Untuk menangani risiko ini, pengoptimuman boleh dibuat dalam aspek berikut:

  1. Tambah lebih banyak syarat kemasukan untuk mengelakkan whipsaws yang tidak berkesan;
  2. Sesuaikan jangka masa atau tambahkan penunjuk lain untuk penapisan;
  3. Mengoptimumkan algoritma stop loss untuk mengesan hampir dengan garis tengah;
  4. Menilai prestasi sebenar strategi piramid yang terlalu banyak dijual.

Arahan pengoptimuman

Aspek utama untuk mengoptimumkan strategi ini termasuk:

  1. Pengoptimuman Parameter: Ujian backtest secara sistematik untuk mencari kombinasi tempoh MA yang cepat dan perlahan yang optimum untuk meningkatkan pulangan yang disesuaikan dengan risiko.

  2. Pengiktirafan corak: Tambah penunjuk lain seperti KDJ, MACD untuk mengenal pasti isyarat pembalikan yang lebih boleh dipercayai.

  3. Hentikan Peningkatan Kerugian: Membangunkan algoritma stop loss terapung atau berturut-turut untuk mengurangkan peluang untuk dihentikan.

  4. Pembelajaran Mesin: Mengumpul dan melabel data sejarah untuk menghasilkan peraturan perdagangan secara automatik menggunakan ML.

  5. Pengukuran Kedudukan: Sesuaikan saiz kedudukan secara dinamik berdasarkan keadaan pasaran.

Kesimpulan

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)

Lebih lanjut