Strategi pembalikan rata-rata bergerak ganda

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

img

Gambaran umum

Ide utama dari strategi ini adalah untuk menggunakan persilangan rata-rata bergerak cepat dan lambat untuk menilai tren pasar dan mengambil posisi ketika rata-rata bergerak jangka pendek dan jangka panjang berbalik, sehingga mencapai efek melacak tren.

Logika Strategi

  1. Tentukan jangka pendek rata-rata bergerak periode shortma (default 7 hari) dan jangka panjang rata-rata bergerak periode longma (default 77 hari)
  2. Ketika MA pendek melintasi MA panjang, itu ditentukan sebagai sinyal beli dan rekaman barsince mabuy. MA panjang menyiratkan tren naik telah dimulai. Ketika MA pendek melintasi di bawah MA panjang, itu ditentukan sebagai sinyal jual dan rekaman barsince masell. MA panjang menyiratkan tren naik telah berakhir.
  3. Bandingkan nilai barsince. Semakin banyak bar sejak short MA melintasi ke bawah, semakin lama tren naiknya berlanjut. Semakin banyak bar sejak short MA melintasi ke atas, semakin kuat sinyal pembalikan.
  4. Ketika barsince untuk sinyal jual lebih besar dari barsince untuk sinyal beli, sinyal beli dipicu.
  5. Pada dasarnya ini adalah strategi pembalikan MA ganda, menggunakan pembalikan silang MA cepat dan lambat untuk mendeteksi titik pembalikan tren.

Keuntungan

  1. Menggunakan MAs ganda untuk menyaring beberapa sinyal palsu
  2. Tambahan barsince perbandingan menghindari pemutusan palsu dan pembalikan harga dekat
  3. Mudah dimengerti dan diterapkan
  4. Parameter MA yang dapat disesuaikan sesuai dengan periode dan pasar yang berbeda

Risiko

  1. Strategi MA ganda cenderung menghasilkan sinyal perdagangan yang lebih sering
  2. Penyesuaian parameter MA yang buruk dapat melewatkan tren yang lebih lama
  3. Stop loss ketika melanggar MAs jangka panjang mungkin jauh, yang mengarah pada penarikan yang lebih besar
  4. Tidak dapat secara efektif menyaring kumparan dan osilasi

Arah Peningkatan

  1. Tambahkan indikator lain untuk menghindari whipsaws di pasar berkisar
  2. Tambahkan mekanisme stop loss
  3. Mengoptimalkan kombinasi parameter MA
  4. Mengatur parameter MA secara dinamis berdasarkan siklus pasar

Ringkasan

Strategi secara keseluruhan memiliki logika yang jelas, mudah dimengerti, menggunakan pembalikan MA yang cepat dan lambat untuk mendeteksi titik pembalikan tren. Secara teori dapat secara efektif melacak tren.


/*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 banyak