Strategi perdagangan kuantitatif multi-kerangka waktu yang mensimulasikan arbitrase segitiga


Tanggal Pembuatan: 2024-01-29 11:10:33 Akhirnya memodifikasi: 2024-01-29 11:10:33
menyalin: 0 Jumlah klik: 736
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif multi-kerangka waktu yang mensimulasikan arbitrase segitiga

Ringkasan

Strategi ini menggunakan tiga indikator teknis yang berbeda dalam kombinasi untuk membangun strategi arbitrage pada beberapa kerangka waktu, untuk mencapai keuntungan tambahan dengan risiko rendah dengan menangkap tren harga pada periode waktu yang berbeda.

Prinsip Strategi

Tiga indikator teknis yang digunakan dalam strategi ini adalah saluran kelter ((KC), stop loss volatilitas ((Vstop), dan indikator pertemuan William ((WAE)). Saluran kelter digunakan untuk menentukan apakah harga berada di luar jangkauan saluran, sehingga mengirimkan sinyal perdagangan. Stop loss volatilitas digunakan untuk secara dinamis menyesuaikan posisi stop loss, sekaligus mengurangi stop loss yang tidak perlu. Indikator William digunakan untuk menentukan apakah harga berada di arah yang kuat.

  1. Ketika harga lebih tinggi dari Celtic uptrend, dianggap sebagai sinyal bullish. Ketika harga lebih rendah dari Celtic downtrend, dianggap sebagai sinyal bearish.

  2. Stop loss volatilitas mengatur posisi stop loss berdasarkan volatilitas harga dan lebar saluran. Hal ini dapat menyesuaikan secara dinamis, sementara menjamin stop loss, menghindari terlalu konservatif posisi stop loss.

  3. Indikator William menilai apakah harga berada dalam tren naik atau turun yang kuat dengan menghitung MACD dan lebar jalur Brin.

Dengan menggabungkan ketiga indikator ini, sinyal pada periode waktu yang berbeda dapat saling diverifikasi. Hal ini mengurangi probabilitas kesalahan penilaian, dan membangun logika strategi yang dioptimalkan secara stabil.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah sinyal perdagangan yang akurat dari kombinasi multi-indikator. Tiga indikator bekerja pada periode waktu yang berbeda, saling memverifikasi, yang secara efektif dapat mengurangi probabilitas kesalahan penilaian, meningkatkan akurasi sinyal. Selain itu, pengaturan stop loss volatilitas dinamis, dapat menyesuaikan posisi stop loss berdasarkan fluktuasi waktu nyata, untuk mengontrol risiko lebih lanjut.

Strategi kombinasi ini dapat memberikan sinyal perdagangan yang lebih akurat dan efisien dibandingkan dengan strategi indikator tunggal. Selain itu, tiga indikator saling berkolaborasi untuk membentuk keputusan perdagangan dalam beberapa kerangka waktu. Desain logis ini sangat ilmiah dan masuk akal.

Analisis risiko

Risiko utama dari strategi ini adalah pengaturan parameter yang tidak tepat dapat menyebabkan overmatch. Tiga indikator memiliki total 8 parameter, dan pengaturan yang tidak tepat dapat berdampak buruk pada strategi. Selain itu, hubungan bobot antara indikator juga perlu dikonfigurasi dengan baik, jika tidak, sinyal dapat saling mengimbangi, menyebabkan tidak valid.

Untuk mengurangi risiko ini, proses pengaturan parameter perlu mempertimbangkan sepenuhnya adaptasi dari berbagai lingkungan pasar, dan menyesuaikan dengan kombinasi parameter optimal melalui analisis feedback. Selain itu, hubungan berat antara indikator harus disesuaikan dengan tepat, memastikan sinyal perdagangan dapat dipicu secara efektif.

Arah optimasi

Ruang optimasi strategi ini terutama terfokus pada dua aspek: penyesuaian parameter dan perbaikan strategi stop loss. Secara khusus, ini dapat dimulai dari beberapa aspek berikut:

  1. Lebih ilmiah dan rasional memilih parameter indikator, mengoptimalkan kombinasi parameter. Dengan bantuan algoritma dapat mencari parameter optimal sesuai dengan tujuan seperti memaksimalkan keuntungan, meminimalkan risiko.

  2. Memperbaiki strategi stop loss, dengan asumsi jaminan stop loss, mengurangi lebih lanjut stop loss yang tidak perlu, meningkatkan tingkat kemenangan. Misalnya, menggabungkan lebih banyak indikator sebagai sinyal stop loss, atau mengatur pengulangan bertahap dari posisi stop loss.

  3. Mengoptimalkan hubungan berat indikator dan logika penilaian sinyal perdagangan, mengurangi tingkat kesalahan penilaian. Dapat memperkenalkan lebih banyak karakteristik perilaku harga, membangun aturan penilaian yang lebih stabil dan andal.

  4. Cobalah untuk memperkenalkan model pembelajaran mesin untuk mengoptimalkan parameter secara otomatis. Atau gunakan pemrograman pembelajaran intensif untuk evaluasi dan perbaikan strategi.

Meringkaskan

Strategi ini menggunakan kombinasi dari tiga indikator, yaitu Celtic Channel, Volatility Stop, dan William, untuk membangun sebuah sistem arbitrage dalam kerangka waktu. Kombinasi multi-indikator meningkatkan akurasi sinyal perdagangan, dan Dynamic Stop mengendalikan risiko. Namun, masih ada ruang untuk perbaikan dalam pengaturan dan pengoptimalan parameter. Secara keseluruhan, strategi ini sangat ilmiah dan layak untuk penelitian dan aplikasi lebih lanjut.

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

//@version=4
strategy("QuarryLake", overlay=true)  ///Ultilized modified full kelly for this strategy = 36%

///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult

// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)

kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)

///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5

atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ : 
   vstop1

plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)

///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
    fastMA = ema(source, fastLength)
    slowMA = ema(source, slowLength)
    fastMA - slowMA
calc_BBUpper(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis + dev
calc_BBLower(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - 
   calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - 
   calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) - 
   calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1

///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
    strategy.entry("Long", strategy.long)

///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
    strategy.close("Long")

///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
    strategy.entry("Short", strategy.short)

///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
    strategy.close("Short")

///Free Hong Kong, the revolution of our time///