Strategi Arbitrage lintas siklus berdasarkan beberapa indikator

Penulis:ChaoZhang, Tanggal: 2024-01-29 11:10:33
Tag:

img

Gambaran umum

Strategi ini menggunakan kombinasi dari tiga indikator teknis yang berbeda untuk membangun strategi arbitrage lintas siklus yang menangkap tren harga di berbagai kerangka waktu untuk mencapai hasil yang berlebihan berisiko rendah.

Logika Strategi

Tiga indikator teknis yang digunakan dalam strategi ini adalah Keltner Channel (KC), Volatility Stop (Vstop), dan Williams Alligator (WAE). Channel Keltner digunakan untuk menentukan apakah harga berada di luar kisaran saluran dan dengan demikian menghasilkan sinyal perdagangan. Volatility Stop digunakan untuk menyesuaikan posisi stop loss secara dinamis untuk memastikan stop loss sambil mengurangi stop loss yang tidak perlu.

  1. Ketika harga lebih tinggi dari rel atas Saluran Keltner, itu dianggap sinyal bullish. Ketika harga lebih rendah dari rel bawah Saluran Keltner, itu dianggap sinyal bearish.

  2. Volatility Stop menetapkan posisi stop loss berdasarkan volatilitas harga dan lebar saluran. Hal ini dapat menyesuaikan secara dinamis untuk memastikan stop loss sambil menghindari posisi stop loss yang terlalu konservatif.

  3. Indikator Williams Alligator menilai apakah harga berada dalam tren naik atau turun yang kuat dengan menghitung lebar saluran MACD dan Bollinger Band.

Dengan menggabungkan tiga indikator ini, sinyal di berbagai kerangka waktu yang silang divalidasi. Ini mengurangi kemungkinan penilaian yang salah dan membangun logika strategi yang dioptimalkan.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah sinyal perdagangan yang tepat yang dibawa oleh kombinasi beberapa indikator. Ketiga indikator bekerja dalam kerangka waktu yang berbeda dan saling validasi, yang dapat secara efektif mengurangi probabilitas penilaian yang salah dan meningkatkan keakuratan sinyal. Selain itu, pengaturan Volatility Stop dinamis dan dapat menyesuaikan posisi stop loss sesuai dengan volatilitas real-time untuk lebih mengendalikan risiko.

Dibandingkan dengan strategi indikator tunggal, strategi gabungan ini dapat memberikan sinyal perdagangan yang lebih akurat dan efisien. Pada saat yang sama, ketiga indikator bekerja sama untuk membentuk penilaian perdagangan dalam beberapa kerangka waktu, yang merupakan desain logika yang sangat ilmiah dan masuk akal yang layak dipelajari.

Analisis Risiko

Risiko utama dari strategi ini adalah bahwa pengaturan parameter yang tidak benar dapat menyebabkan overfitting. Tiga indikator memiliki 8 parameter total. Pengaturan yang tidak benar dapat mempengaruhi strategi secara merugikan. Selain itu, hubungan berat antara indikator juga perlu dikonfigurasi dengan benar, jika tidak sinyal dapat menetralisir satu sama lain dan menjadi tidak valid.

Untuk mengurangi risiko ini, kemampuan beradaptasi dengan lingkungan pasar yang berbeda harus dipertimbangkan sepenuhnya selama pengaturan parameter, dan kombinasi parameter optimal harus disesuaikan melalui analisis backtesting. Selain itu, sesuaikan dengan bobot antara indikator untuk memastikan bahwa sinyal perdagangan dapat diaktifkan secara efektif. Ketika kerugian berturut-turut terjadi, pertimbangkan untuk mengurangi ukuran posisi untuk mengendalikan kerugian.

Arahan Optimasi

Ruang pengoptimalan strategi ini terutama berfokus pada dua aspek: penyesuaian parameter dan peningkatan strategi stop loss.

  1. Memilih parameter indikator secara lebih ilmiah dan mengoptimalkan kombinasi parameter. Algoritma dapat digunakan untuk menemukan parameter optimal dengan tujuan seperti memaksimalkan pengembalian dan meminimalkan risiko.

  2. Meningkatkan strategi stop loss untuk lebih mengurangi stop loss yang tidak perlu sambil memastikan stop loss, sehingga meningkatkan tingkat kemenangan.

  3. Mengoptimalkan bobot antara indikator dan logika penilaian sinyal perdagangan untuk mengurangi tingkat penilaian yang salah.

  4. Cobalah untuk memperkenalkan model pembelajaran mesin untuk mencapai optimasi parameter otomatis atau gunakan pemrograman pembelajaran penguatan yang mendalam untuk evaluasi dan perbaikan strategi.

Ringkasan

Strategi ini membangun sistem arbitrage lintas siklus melalui kombinasi Keltner Channel, Volatility Stop dan Williams Alligator. Kombinasi multi-indikator meningkatkan akurasi sinyal dan kontrol stop loss dinamis risiko. Tapi ada ruang untuk perbaikan dalam pengaturan parameter dan optimasi. Secara keseluruhan, strategi ini memiliki keilmuan yang kuat dan layak penelitian lebih lanjut dan aplikasi.


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


Lebih banyak