Strategi Kuantitatif Penembusan Momentum Ganda dan Filter Volatilitas


Tanggal Pembuatan: 2023-12-22 12:01:21 Akhirnya memodifikasi: 2023-12-22 12:01:21
menyalin: 0 Jumlah klik: 433
1
fokus pada
1176
Pengikut

Strategi Kuantitatif Penembusan Momentum Ganda dan Filter Volatilitas

Ringkasan

Strategi ini terutama dilakukan dengan menghitung pergerakan EMA ganda dan pergerakan DEMA silang harga untuk mengidentifikasi tren, dan digabungkan dengan indikator volatilitas ATR untuk memfilter terobosan palsu, mewujudkan strategi perdagangan kuantitatif dengan indikator volatilitas ganda dan filter volatilitas.

Prinsip Strategi

Strategi ini terdiri dari beberapa bagian utama:

  1. EMA dan DEMA yang dihitung untuk harga digunakan sebagai dua indikator momentum. EMA dengan periode yang lebih panjang mencerminkan tren jangka panjang, dan DEMA sebagai indikator momentum jangka pendek yang lebih sensitif.

  2. Hitung indikator volatilitas ATR. Dengan ukuran ATR, menilai volatilitas dan likuiditas pasar. Jika volatilitas terlalu besar, filter sinyal indikator volatilitas, dan hindari false breakout.

  3. Tingkat ATR berfluktuasi dinilai dari parameter moving average. Ketika ATR berfluktuasi di bawah moving average, sinyal indikator bergerak diizinkan untuk dipicu.

  4. Parameter yang digunakan untuk mengontrol siklus waktu ATR, panjang ATR, jenis dan panjang rata-rata bergerak ATR.

  5. Menetapkan aturan stop loss, stop loss, dan tracking stop loss untuk posisi multihead.

Analisis Keunggulan

Strategi penyaringan ganda EMA ini dapat secara signifikan mengurangi sinyal palsu dan perdagangan yang sering terjadi dalam strategi EMA Gold Fork Dead Fork biasa. Dengan menambahkan indikator tingkat fluktuasi ATR, Anda dapat secara efektif menyaring sinyal yang menyesatkan yang disebabkan oleh fluktuasi kecil dan menghindari kebocoran.

Strategi ini menggunakan desain dua indikator yang dapat meningkatkan penilaian dibandingkan dengan indikator momentum tunggal. Sebagai indikator momentum jangka pendek yang lebih sensitif, DEMA bekerja dengan EMA garis panjang yang stabil, membentuk sinyal kombinasi yang lebih andal.

Dengan mengatur parameter ATR, Anda dapat mengatur kondisi fluktuasi yang sesuai untuk objek yang berbeda, meningkatkan kelayakan strategi.

Analisis risiko

Risiko terbesar dari strategi ini adalah bahwa pengaturan parameter yang tidak tepat dapat menyebabkan sinyal perdagangan menjadi terlalu langka. Penetapan panjang DEMA dan EMA yang terlalu panjang, atau batas fluktuasi ATR yang terlalu tinggi, dapat melemahkan efektivitas operasi sebenarnya dari strategi. Ini perlu disesuaikan dengan kombinasi parameter optimal melalui pengujian berulang.

Risiko potensial lainnya adalah bahwa dalam situasi ekstrem, pergerakan harga dapat melampaui batas parameter ATR, sehingga menyebabkan kerugian. Ini memerlukan pemantauan manusiawi terhadap keadaan luar biasa di pasar dan penundaan operasi strategi.

Arah optimasi

  1. Uji kombinasi parameter indikator momentum yang berbeda untuk menemukan parameter optimal.

  2. Cobalah untuk mengubah indikator momentum dari EMA ganda menjadi MACD atau indikator lainnya.

  3. Uji berbagai indikator volatilitas yang ditetapkan, seperti ATR historis keseluruhan, indeks volatilitas pasar, dll.

  4. Meningkatkan penyaringan terhadap volume transaksi, menghindari risiko terobosan harga yang tidak nyata.

  5. Mengoptimalkan mekanisme stop loss agar lebih menguntungkan daripada merugikan

Meringkaskan

Strategi ini mengintegrasikan indikator dinamis dengan analisis volatilitas, dirancang berdasarkan dasar teori yang kuat. Dengan penyesuaian parameter dan optimasi aturan, dapat menjadi strategi perdagangan kuantitatif yang stabil dan andal.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Qorbanjf

//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)

// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)

//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)


// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
    // type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3000) / 100

// === 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 = 2017, title = "From Year", minval = 2000)
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)


// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)

atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100

// Moving Average Logic
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))

// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter

// variables for exit position
sale = crossunder(dema1, ema1)

// stop loss
//longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)

// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0

longStopTrail := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopTrail[1])
else
    0
//Take profit Percentage
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

//Enter trades when conditions are met
strategy.entry(id="long",
 long=strategy.long,
 when=enterLong,
 comment="long")

//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)

strategy.exit(id="sell",
 limit = longExitPrice,
 stop = longStopTrail,
 comment = "SL/TP")