Strategi Breakout Rata-rata Pergerakan Ganda


Tanggal Pembuatan: 2023-12-11 15:21:58 Akhirnya memodifikasi: 2023-12-11 15:21:58
menyalin: 0 Jumlah klik: 637
1
fokus pada
1621
Pengikut

Strategi Breakout Rata-rata Pergerakan Ganda

Ringkasan

Strategi penembusan dua garis sejajar adalah strategi pelacakan tren yang didasarkan pada persilangan rata-rata bergerak dari dua periode yang berbeda sebagai sinyal jual beli. Strategi ini menggunakan rata-rata cepat dan persilangan rata-rata lambat sebagai titik masuk perdagangan, setelah persilangan menentukan arah tren dan membangun posisi overhead atau kosong yang sesuai.

Prinsip Strategi

Strategi ini menggunakan dua rata-rata bergerak: satu MA cepat dan satu MA lambat. Siklus MA cepat biasanya diatur untuk periode yang lebih pendek (seperti periode 15) untuk menangkap perubahan harga jangka pendek; Siklus MA lambat biasanya diatur untuk periode yang lebih panjang (seperti periode 21) untuk menentukan arah tren utama.

Dengan mengatur berbagai kombinasi siklus MA, Anda dapat menyesuaikan durasi waktu strategi menangkap tren. Kombinasi MA yang lebih pendek dapat menangkap peluang perubahan harga dalam periode kecil yang lebih pendek; Kombinasi MA yang lebih panjang dapat menyaring getaran dan hanya menangkap tren di tingkat garis panjang.

Strategi ini juga mencakup modul manajemen risiko: Stop Loss, Stop Loss, dan Stop Loss Mobile. Ini dapat membatasi kerugian maksimum dari satu perdagangan dan membantu melindungi keuntungan keseluruhan.

Keunggulan Strategis

Strategi dua garis lurus memiliki keuntungan sebagai berikut:

  1. Konsepnya sederhana, mudah dipahami dan diterapkan.
  2. Dapat menangkap tren dari waktu yang berbeda dengan menyesuaikan siklus MA untuk menyesuaikan dengan kondisi pasar yang berbeda;
  3. Lebih stabil, menghindari terlalu sering bertransaksi;
  4. Dengan penghentian kerugian, risiko dapat dikendalikan secara efektif.
  5. Mudah dioptimalkan, dapat disesuaikan dengan siklus MA, parameter manajemen risiko, dan lain-lain, untuk meningkatkan efektivitas.

Analisis risiko

Ada beberapa risiko yang terkait dengan strategi “dua jalur” ini, yang terkonsentrasi pada beberapa hal:

  1. Pada fase pendingin, sinyal MA dapat terlalu sering terjadi, sehingga menimbulkan masalah dengan frekuensi perdagangan yang terlalu tinggi.
  2. Jika ada keterlambatan di antara dua garis rata-rata, maka harga mungkin akan kehilangan titik balik dan tidak dapat menghentikan kerugian pada waktunya.
  3. Kegagalan untuk menyaring penembusan palsu secara efektif, yang dapat menyebabkan kerugian yang tidak perlu;
  4. MA sendiri lambat bereaksi terhadap harga dan tidak dapat sepenuhnya melacak perubahan harga.

Risiko ini dapat diperbaiki dan dioptimalkan dengan menyesuaikan parameter MA, menambahkan kondisi filter, dan mengoptimalkan logika stop loss.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Menambahkan filter seperti volume transaksi atau indikator fluktuasi, untuk menghindari seringnya penempatan dalam getaran dan false breakout;
  2. Siklus dan kombinasi MA dapat diatur secara beragam, sesuai dengan karakteristik siklus dan varietas yang berbeda;
  3. Anda dapat menguji berbagai jenis MA, seperti EMA, LWMA, dan lain-lain, dan memilih bentuk MA yang paling sensitif terhadap reaksi harga.
  4. Menambahkan algoritma pembelajaran mesin yang dapat secara otomatis mencari parameter MA, parameter super seperti stop loss;
  5. Berbagai jenis stop loss dapat diuji, seperti hop loss, trace loss, average loss, dan lain-lain.

Dengan optimasi dan perbaikan ini, Anda dapat secara signifikan meningkatkan peluang, tingkat keuntungan, dan tingkat pengembalian risiko dari strategi Anda.

Meringkaskan

Strategi penembusan dua garis sejajar secara keseluruhan adalah strategi pelacakan tren yang mudah diterapkan dan dioptimalkan. Ini memiliki keunggulan seperti operasi yang sederhana, fleksibilitas yang dapat disesuaikan, dan kontrol risiko, sangat cocok sebagai strategi masuk untuk perdagangan kuantitatif. Dengan pengujian dan pengoptimalan terus menerus, strategi ini dapat terus ditingkatkan dan memiliki potensi untuk menjadi strategi yang dioptimalkan.

Kode Sumber Strategi
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    //strategy.close( id = "Short", when = exitShort )
    
    strategy.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)