Strategi Purata Pergerakan Berganda


Tarikh penciptaan: 2023-12-11 15:21:58 Akhirnya diubah suai: 2023-12-11 15:21:58
Salin: 0 Bilangan klik: 637
1
fokus pada
1621
Pengikut

Strategi Purata Pergerakan Berganda

Gambaran keseluruhan

Strategi penembusan dua garis sejajar adalah strategi pemantauan trend berdasarkan penyambungan purata bergerak pada dua kitaran yang berbeza sebagai isyarat membeli dan menjual. Strategi ini menggunakan purata cepat dan titik persilangan purata perlahan sebagai titik masuk perdagangan, setelah persilangan menentukan arah trend dan membina kedudukan overhead atau kosong yang sesuai. Ia dapat menangkap trend di peringkat tengah dan dapat mengurangkan masalah frekuensi perdagangan yang terlalu tinggi yang disebabkan oleh pergerakan yang tidak perlu.

Prinsip Strategi

Strategi ini menggunakan dua rata-rata bergerak: satu MA pantas dan satu MA perlahan. Kitaran MA pantas biasanya ditetapkan sebagai kitaran yang lebih pendek (seperti tempoh 15) untuk menangkap perubahan harga jangka pendek; kitaran MA perlahan biasanya ditetapkan sebagai kitaran yang lebih lama (seperti tempoh 21) untuk menentukan arah trend utama. Isyarat perdagangan strategi ini berasal dari persilangan dua MA: apabila MA pantas melintasi MA perlahan sebagai isyarat membeli; apabila MA pantas melintasi MA perlahan sebagai isyarat menjual.

Anda boleh menyesuaikan jangka masa strategi menangkap trend dengan menetapkan pelbagai kombinasi kitaran MA. Kitaran MA yang lebih pendek dapat menangkap peluang perubahan harga dalam kitaran pendek; Kitaran MA yang lebih panjang dapat menyaring getaran dan hanya menangkap trend pada tahap garis panjang.

Strategi ini juga merangkumi modul pengurusan risiko: Stop Loss, Stop Loss, dan Stop Loss Mobile. Ini dapat mengehadkan kerugian maksimum dalam satu perdagangan dan membantu melindungi keuntungan keseluruhan.

Kelebihan Strategik

Strategi dua hala mempunyai kelebihan berikut:

  1. Konsepnya mudah, mudah difahami dan dilaksanakan;
  2. Ia boleh menangkap trend dalam jangka masa yang berbeza dengan menyesuaikan kitaran MA untuk menyesuaikan diri dengan keadaan pasaran yang berbeza;
  3. Lebih stabil dan tidak terlalu kerap berdagang;
  4. Dengan penghalang kerugian, risiko dapat dikawal dengan berkesan.
  5. Mudah untuk dioptimumkan, anda boleh menyesuaikan kitaran MA, parameter pengurusan risiko dan sebagainya, untuk meningkatkan lagi keberkesanan.

Analisis risiko

Terdapat juga risiko yang berkaitan dengan strategi dua hala, yang tertumpu kepada beberapa aspek berikut:

  1. Pada tahap pemulihan yang bergolak, isyarat persilangan MA mungkin terlalu kerap, yang membawa kepada masalah frekuensi dagangan yang terlalu tinggi;
  2. Terdapat kelewatan antara dua garis rata, yang mungkin terlepas titik perubahan harga, dan tidak dapat menghentikan kerugian dalam masa yang tepat;
  3. Tidak dapat menyaring penembusan palsu dengan berkesan, yang boleh menyebabkan kerugian yang tidak perlu;
  4. MA sendiri tidak bertindak balas terhadap harga dan tidak dapat mengesan pergerakan harga sepenuhnya.

Risiko ini boleh diperbaiki dan dioptimumkan dengan menyesuaikan parameter MA, menambah syarat penapisan, dan mengoptimumkan logik stop-loss.

Arah pengoptimuman

Strategi dua hala boleh dioptimumkan dalam beberapa aspek:

  1. Menambah penapis seperti jumlah transaksi atau indikator turun naik untuk mengelakkan penempatan yang kerap dalam gegaran dan penembusan palsu;
  2. Kitaran dan kombinasi MA boleh diubah suai untuk menyesuaikan diri dengan ciri-ciri kitaran dan varieti yang berbeza;
  3. Ia boleh menguji pelbagai jenis MA, seperti EMA, LWMA dan lain-lain, dan memilih bentuk MA yang paling sensitif terhadap tindak balas harga;
  4. Menambah algoritma pembelajaran mesin untuk mencari parameter MA dan parameter super seperti stop loss;
  5. Anda boleh menguji pelbagai jenis hentian, seperti hentian melompat, hentian mengesan, dan hentian purata.

Dengan pengoptimuman dan penambahbaikan ini, anda dapat meningkatkan peluang kemenangan, keuntungan, dan pulangan risiko anda.

ringkaskan

Strategi penembusan dua garis sejajar secara keseluruhan adalah strategi pemantauan trend yang mudah dilaksanakan dan dioptimumkan. Ia mempunyai kelebihan seperti operasi yang mudah, fleksibiliti yang boleh disesuaikan, dan risiko yang boleh dikawal, sangat sesuai sebagai strategi permulaan untuk perdagangan kuantitatif. Dengan ujian dan pengoptimuman yang berterusan, strategi ini dapat terus diperbaiki dan berpotensi menjadi strategi kualitatif.

Kod 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)