Dual MA Trend Breakout Strategi

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

img

Gambaran umum

Dual MA Trend Breakout adalah strategi perdagangan kuantitatif yang menggunakan dua rata-rata bergerak dari periode yang berbeda untuk menentukan tren dan menghasilkan sinyal masuk. Strategi ini terutama menilai arah tren keseluruhan melalui MA lambat dan menggunakan MA cepat untuk penyaringan entri.

Logika Strategi

Strategi ini terdiri dari bagian-bagian utama berikut:

Penghakiman Tren: Menghitung MA 21 periode, didefinisikan sebagai MA lambat. Posisinya relatif stabil dan dapat digunakan untuk menilai arah tren keseluruhan. Ketika harga naik dekat dengan MA ini, itu adalah tren naik. Ketika harga turun dekat dengan MA ini, itu adalah tren menurun.

Filter entri: Menghitung MA 5 periode, didefinisikan sebagai MA cepat. Hanya ketika harga menembus baik MA lambat dan MA cepat, sinyal perdagangan dipicu. Desain ini terutama lebih lanjut menyaring kemungkinan pecah palsu.

Filter Lilin: Strategi ini hanya berjalan panjang ketika lilin saat ini menurun, atau berjalan pendek ketika lilin saat ini naik. Ini menganggap bahwa menggunakan batang pembalikan untuk masuk dapat memperoleh tingkat keberhasilan yang lebih tinggi. Ini juga menggabungkan indikator RSI cepat untuk menghindari memasuki daerah yang terlalu banyak dibeli atau terlalu banyak dijual.

Filter Piramida: Untuk pasar kripto, strategi ini juga mencakup kondisi volatilitas tiga kali lipat untuk menangkap peluang oversold dalam tren penurunan yang signifikan.

Hentikan KerugianSetelah membuka posisi, stop loss akan diperbarui secara real-time berdasarkan persentase yang ditetapkan.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Desain MA ganda sederhana dan praktis, mudah dimengerti dan dikuasai;
  2. Penilaian tren yang dapat diandalkan dengan menyisir MA cepat dan lambat;
  3. Masuk ke bar pembalikan meningkatkan tingkat kemenangan perdagangan;
  4. Metodologi keseluruhan adalah konservatif dan stabil, cocok untuk semua kerangka waktu;
  5. Mendukung memindahkan stop loss untuk mengendalikan risiko;
  6. Khususnya mempertimbangkan karakteristik pasar kripto dengan menambahkan peluang piramida oversold untuk mendapatkan hasil yang berlebihan.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Selama periode dual MA yang terikat kisaran, akan ada beberapa kemenangan dan kerugian kecil.
  2. Masuk bar pembalikan mungkin memiliki tingkat kemenangan rendah dalam beberapa kerangka waktu.
  3. Pasar kripto memiliki volatilitas tinggi dan kemungkinan tinggi stop loss dipicu.
  4. Peluang piramida yang terlalu banyak dijual tidak banyak, dengan volatilitas pengembalian yang tinggi.

Untuk mengatasi risiko ini, optimasi dapat dilakukan dalam aspek berikut:

  1. Tambahkan lebih banyak kondisi masuk untuk menghindari whipsaws yang tidak efektif;
  2. Sesuaikan kerangka waktu atau tambahkan indikator lain untuk penyaringan;
  3. Mengoptimalkan algoritma stop loss untuk melacak dekat midline;
  4. Evaluasi kinerja sebenarnya dari strategi piramida oversold.

Arahan Optimasi

Aspek utama untuk mengoptimalkan strategi ini meliputi:

  1. Optimasi Parameter: Melakukan backtest secara sistematis untuk menemukan kombinasi periode MA cepat dan lambat yang optimal untuk meningkatkan pengembalian yang disesuaikan dengan risiko.

  2. Pengakuan Pola: Tambahkan indikator lain seperti KDJ, MACD untuk mengidentifikasi sinyal pembalikan yang lebih andal.

  3. Optimasi Stop Loss: Mengembangkan algoritma stop loss yang mengambang atau tertinggal untuk mengurangi kemungkinan dihentikan.

  4. Pembelajaran Mesin: Mengumpulkan dan memberi label data historis untuk secara otomatis menghasilkan aturan perdagangan menggunakan ML.

  5. Ukuran Posisi: Sesuaikan ukuran posisi secara dinamis berdasarkan kondisi pasar.

Kesimpulan

Dual MA Trend Breakout Strategy umumnya merupakan strategi trend following yang sederhana dan praktis. Dibandingkan dengan algoritma pembelajaran mesin yang kompleks, strategi ini lebih mudah ditafsirkan dan dikuasai, dengan keandalan yang lebih tinggi. Dengan penyesuaian parameter, perluasan fitur dan augmentasi ML, strategi ini memiliki potensi peningkatan yang besar dan merupakan titik awal yang bagus 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 banyak