Strategi perdagangan kuantitatif berdasarkan persilangan rata-rata pergerakan tertimbang


Tanggal Pembuatan: 2023-12-06 12:05:01 Akhirnya memodifikasi: 2023-12-06 12:05:01
menyalin: 0 Jumlah klik: 626
1
fokus pada
1619
Pengikut

Strategi perdagangan kuantitatif berdasarkan persilangan rata-rata pergerakan tertimbang

Ringkasan

Strategi ini disebutStrategi crossover rata-rata bergerak kuantitatif(Weighted Quantitative Moving Average Crossover Strategy), ide dasarnya adalah menggabungkan berbagai indikator seperti harga, volume transaksi, merancang garis cepat dan garis lambat, dan mengirimkan sinyal beli dan jual saat mereka terjadi.

Prinsip Strategi

Indikator inti dari strategi ini adalah Moving Average Kuantitatif (QMA). QMA mengukur arah tren dengan menghitung harga rata-rata tertimbang selama periode waktu tertentu. Perbedaannya dengan Moving Average biasa adalah di mana berat harga (QMA) = harga.*Volume transaksi) akan berkurang seiring berjalannya waktu. Dengan demikian, harga berjangka terbaru memiliki bobot yang lebih besar dan dapat merespons perubahan pasar lebih cepat.

Secara khusus, strategi ini membangun garis QMA cepat dan garis QMA lambat. Parameter garis cepat disetel ke 25 hari dan parameter garis lambat disetel ke 29 hari. Sinyal beli dihasilkan ketika garis cepat melewati garis lambat dari bawah; Sinyal jual dihasilkan ketika garis cepat melewati garis lambat dari atas ke bawah.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan dibandingkan dengan rata-rata bergerak biasa:

  1. Respons pasar yang lebih cepat untuk menangkap peluang di jalur pendek
  2. Menggabungkan berbagai dimensi harga dan volume transaksi, dengan stabilitas yang lebih kuat
  3. Pengaturan parameter yang fleksibel untuk menyesuaikan dengan kondisi pasar yang berbeda

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Operasi garis pendek yang sering terjadi dapat meningkatkan biaya transaksi dan slippage.
  2. PARAMETERS overoptimisasi yang dapat menyebabkan curve fit
  3. Indikator dapat mengurangi efek jika volume transaksi kurang

Risiko ini dapat diatasi dengan penyesuaian frekuensi parameter yang tepat, analisis walk forward yang ketat, dan kombinasi dengan indikator lainnya.

Arah optimasi

Strategi ini masih memiliki ruang untuk pengoptimalan lebih lanjut:

  1. Dinamiskan parameter QMA agar dapat beradaptasi dengan tingkat fluktuasi pasar
  2. Menyaring peluang masuk dengan indikator seperti volatilitas, volume transaksi
  3. Meningkatkan strategi stop loss untuk mengendalikan kerugian tunggal

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi perdagangan jangka pendek yang memiliki stabilitas yang lebih baik. Indikatornya lebih mencerminkan hubungan penawaran dan permintaan pasar daripada rata-rata harga tunggal. Strategi ini dapat beroperasi secara stabil dalam jangka panjang dan mendapatkan keuntungan yang baik melalui pengenalan parameter dan pengendalian risiko.

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

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, 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"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA