Strategi pembalikan purata bergerak berganda

Penulis:ChaoZhang, Tarikh: 2023-11-22 10:07:19
Tag:

img

Ringkasan

Idea utama strategi ini adalah untuk menggunakan persilangan purata bergerak cepat dan perlahan untuk menilai trend pasaran dan mengambil kedudukan apabila purata bergerak jangka pendek dan jangka panjang berbalik, untuk mencapai kesan trend pengesanan.

Logika Strategi

  1. Tetapkan purata bergerak jangka pendek tempoh shortma (default 7 hari) dan purata bergerak jangka panjang tempoh longma (default 77 hari)
  2. Apabila MA pendek melintasi MA panjang, ia ditentukan sebagai isyarat beli dan rekod barsince mabuy. MA panjang menyiratkan aliran menaik telah bermula. Apabila MA pendek melintasi di bawah MA panjang, ia ditentukan sebagai isyarat jual dan rekod barsince masell. MA panjang menyiratkan aliran menaik telah berakhir.
  3. Bandingkan nilai barsince. Semakin banyak bar sejak MA pendek melintasi ke bawah, semakin lama trend menaik berterusan. Semakin banyak bar sejak MA pendek melintasi ke atas, semakin kuat isyarat pembalikan.
  4. Apabila barsince untuk isyarat jual lebih besar daripada barsince untuk isyarat beli, isyarat beli akan dicetuskan.
  5. Pada dasarnya ini adalah strategi pembalikan MA berganda, menggunakan pembalikan silang MA cepat dan perlahan untuk mengesan titik pembalikan trend.

Kelebihan

  1. Menggunakan dua MAs untuk menapis beberapa isyarat palsu
  2. Tambah barsebab perbandingan mengelakkan pecah palsu dan pembalikan harga dekat
  3. Mudah difahami dan dilaksanakan
  4. Parameter MA yang boleh disesuaikan sesuai dengan tempoh dan pasaran yang berbeza

Risiko

  1. Strategi MA berganda cenderung menghasilkan isyarat perdagangan yang lebih kerap
  2. Penyesuaian parameter MA yang buruk mungkin terlepas trend yang lebih lama
  3. Stop loss apabila mematahkan MA jangka panjang mungkin jauh, membawa kepada pengeluaran yang lebih besar
  4. Tidak dapat menapis secara berkesan gegelung dan getaran

Arahan Peningkatan

  1. Tambah penunjuk lain untuk mengelakkan whipsaws di pasaran pelbagai
  2. Tambahkan mekanisme stop loss
  3. Mengoptimumkan gabungan parameter MA
  4. Mengatur parameter MA secara dinamik berdasarkan kitaran pasaran

Ringkasan

Strategi secara keseluruhan mempunyai logik yang jelas, mudah difahami, menggunakan pembalikan MA yang cepat dan perlahan untuk mengesan titik pembalikan trend. Secara teori ia dapat dengan berkesan mengesan trend. Tetapi dalam pelaksanaan sebenar ia masih memerlukan pengoptimuman algoritma itu sendiri dan penyesuaian parameter untuk menjadikannya lebih mantap dan praktikal.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Up Down", "Up Down", precision = 6, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 99, commission_type = strategy.commission.percent, commission_value = 0.0, initial_capital = 1000, overlay = true)

buy = close > open and open > close[1]
sell = close < open and open < close[1]

longma = input(77,"Long MA Input")
shortma = input(7,"Short MA Input")
long = sma(close,longma)
short = sma(close, shortma)
mabuy = crossover(short,long) or buy and short > long
masell = crossunder(short,long) or sell and short > long

num_bars_buy = barssince(mabuy)
num_bars_sell = barssince(masell)
//plot(num_bars_buy, color = teal)
//plot(num_bars_sell, color = orange)

xbuy = crossover(num_bars_sell, num_bars_buy)
xsell = crossunder(num_bars_sell, num_bars_buy)
plotshape(xbuy,"Buy Up Arrow", shape.triangleup, location.belowbar, white, size = size.tiny)
plotshape(xsell,"Sell Down Arrow", shape.triangledown, location.abovebar, white, size = size.tiny)
plot(long,"Long MA", fuchsia, 2)

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(7, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

if testPeriod()
    strategy.entry("buy", true, when = xbuy, limit = close)
    strategy.close("buy", when = xsell)


Lebih lanjut