Strategi silang purata bergerak berganda

Penulis:ChaoZhang, Tarikh: 2023-12-01 18:18:16
Tag:

img

Ringkasan

Strategi ini adalah berdasarkan sistem trend crossover purata bergerak berganda. Ia menggabungkan purata bergerak mudah yang cepat (SMA) dan purata bergerak bertingkat perlahan (VWMA), dan menghasilkan isyarat perdagangan apabila kedua-dua garis bersilang.

Apabila SMA pantas melintasi di atas VWMA perlahan, isyarat beli dihasilkan. Apabila SMA pantas melintasi di bawah VWMA perlahan, isyarat jual dihasilkan. Strategi ini juga menggunakan mekanisme stop loss untuk mengawal risiko.

Logika Strategi

Logik teras strategi ini terletak pada sistem silang purata bergerak berganda.

  1. Purata bergerak mudah (SMA): Purata aritmetik harga penutupan selama n hari yang lalu, mencerminkan harga purata terkini.
  2. Purata Bergerak Bertimbang (VWMA): Purata bertimbang harga penutupan selama n hari yang lalu, menetapkan berat yang lebih tinggi kepada harga yang lebih baru, bertindak balas dengan lebih cepat terhadap perubahan harga.

SMA yang cepat mempunyai tempoh kembalikan yang lebih pendek untuk bertindak balas dengan cepat terhadap perubahan harga, sementara VWMA yang perlahan mempunyai tempoh kembalikan yang lebih lama untuk meluruskan.

Strategi ini juga menetapkan mekanisme stop loss. Ia memotong kerugian dalam masa apabila harga bergerak ke arah yang tidak menguntungkan.

Analisis Kelebihan

  1. Menjawab dengan cepat dalam mengesan perubahan trend pasaran
  2. Kawalan pengeluaran yang baik dengan mekanisme hentian kerugian yang berkesan
  3. Mudah dan intuitif, mudah difahami dan dilaksanakan
  4. Parameter yang boleh dioptimumkan dalam persekitaran pasaran yang berbeza

Analisis Risiko

  1. Strategi MA berganda cenderung memberikan isyarat palsu dalam pasaran lembu
  2. Penyesuaian parameter yang tidak sesuai boleh menyebabkan kerugian
  3. Kecelakaan kilat kadang-kadang boleh menyebabkan kerugian

Pengurusan Risiko:

  1. Menggunakan penapis trend untuk pengesahan
  2. Mengoptimumkan tetapan parameter
  3. Mengambil strategi stop loss untuk mengawal kerugian tunggal dengan munasabah

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Menggabungkan penunjuk lain seperti RSI, Bollinger Bands untuk meningkatkan ketepatan isyarat
  2. Mengoptimumkan panjang purata bergerak merentasi kitaran
  3. Gabungkan penunjuk jumlah, perdagangan di titik-titik dengan aliran modal yang signifikan
  4. Sesuaikan parameter berdasarkan hasil backtest untuk mencari optimum
  5. Menggunakan stop loss dinamik, menyesuaikan stop berdasarkan turun naik pasaran

Kesimpulan

Kesimpulannya, ini adalah strategi trend berikut yang sangat praktikal. Ia menggunakan crossover purata bergerak berganda yang intuitif untuk menghasilkan isyarat perdagangan, menangkap perubahan trend dengan berkesan dengan penyelarasan purata bergerak cepat dan perlahan. Mekanisme stop loss juga memastikan kawalan risiko yang baik. Dengan penunjuk pelengkap dan pengoptimuman parameter, strategi dapat mencapai prestasi perdagangan yang lebih baik.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true, initial_capital=10000, currency='USD')

strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = close, title = "Simple MA Source")
maFastLength   = input(defval = 6, title = "Simple MA Length", minval = 1)
// long ma
maSlowSource   = input(defval = high, title = "VW MA Source")
maSlowLength   = input(defval = 7, title = "VW MA Period", minval = 1)


// === SERIES SETUP ===
// a couple of ma's...
maFast = sma(maFastSource, maFastLength)
maSlow = vwma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = color.green, linewidth = 2, style = plot.style_line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = color.red, linewidth = 2, style = plot.style_line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
enterLong = crossover(maFast, maSlow)
exitLong = crossover(maSlow, maFast)
//enterLong = crossover(maSlow, maFast)
//exitLong = crossover(maFast, maSlow)

// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====
fill(fast, slow, color = maFast > maSlow ? color.green : color.red)

// === MRSI ===
//
//

basis = rsi(close, input(50))

ma1 = ema(basis, input(2))
ma2 = ema(basis, input(27))

oversold = input(32.6)
overbought = input(63)

//plot(ma1, title="RSI EMA1", color=blue)
//plot(ma2, title="RSI EMA2", color=yellow)

obhist = ma1 >= overbought ? ma1 : overbought
oshist = ma1 <= oversold ? ma1 : oversold

//plot(obhist, title="Overbought Highligth", style=columns, color=color.maroon, histbase=overbought)
//plot(oshist, title="Oversold Highligth", style=columns, color=color.yellow, histbase=oversold)

//i1 = hline(oversold, title="Oversold Level", color=white)
//i2 = hline(overbought, title="Overbought Level", color=white)

//fill(i1, i2, color=olive, transp=100)

// === LOGIC ===
enterLongMrsi = crossover(ma1, oversold)
exitLongMrsi = crossover(ma1, overbought)

// Entry //
strategy.entry(id="MRSI Long Entry", long=true, when=window() and enterLongMrsi)
strategy.entry(id="MRSI Short Entry", long=false, when=window() and exitLongMrsi)

//hline(50, title="50 Level", color=white)

Lebih lanjut