Strategi Arbitraj Cross-Cycle Berdasarkan Pelbagai Penunjuk

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

img

Ringkasan

Strategi ini menggunakan gabungan tiga penunjuk teknikal yang berbeza untuk membina strategi arbitraj lintas kitaran yang menangkap trend harga dalam jangka masa yang berbeza untuk mencapai pulangan berlebihan berisiko rendah.

Logika Strategi

Tiga penunjuk teknikal yang digunakan dalam strategi ini adalah Saluran Keltner (KC), Hentian Volatiliti (Vstop), dan Buaya Williams (WAE). Saluran Keltner digunakan untuk menentukan sama ada harga berada di luar julat saluran dan dengan itu menghasilkan isyarat perdagangan. Hentian Volatiliti digunakan untuk menyesuaikan kedudukan stop loss secara dinamik untuk memastikan stop loss sambil mengurangkan stop loss yang tidak perlu. Penunjuk Buaya Williams digunakan untuk menentukan sama ada harga berada dalam trend yang kuat. Khususnya:

  1. Apabila harga lebih tinggi daripada rel atas Saluran Keltner, ia dianggap sebagai isyarat kenaikan. Apabila harga lebih rendah daripada rel bawah Saluran Keltner, ia dianggap sebagai isyarat penurunan.

  2. Stop turun naik menetapkan kedudukan stop loss berdasarkan turun naik harga dan lebar saluran. Ia boleh menyesuaikan secara dinamik untuk memastikan stop loss sambil mengelakkan kedudukan stop loss yang terlalu konservatif.

  3. Penunjuk Williams Alligator menilai sama ada harga berada dalam trend menaik atau menurun yang kuat dengan mengira lebar saluran MACD dan Bollinger Band.

Dengan menggabungkan ketiga-tiga penunjuk ini, isyarat merentasi bingkai masa yang berbeza disahkan silang. Ini mengurangkan kebarangkalian pertimbangan yang salah dan membina logik strategi yang dioptimumkan.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah isyarat perdagangan yang tepat yang dibawa oleh gabungan beberapa penunjuk. Ketiga-tiga penunjuk berfungsi dalam bingkai masa yang berbeza dan saling mengesahkan, yang dapat mengurangkan kemungkinan salah menilai dan meningkatkan ketepatan isyarat. Di samping itu, tetapan Henti Volatiliti adalah dinamik dan boleh menyesuaikan kedudukan henti kerugian mengikut turun naik masa nyata untuk mengawal risiko lebih lanjut.

Berbanding dengan strategi penunjuk tunggal, strategi gabungan ini dapat memberikan isyarat perdagangan yang lebih tepat dan cekap. Pada masa yang sama, ketiga-tiga penunjuk bekerja bersama untuk membentuk penilaian perdagangan dalam beberapa bingkai masa, yang merupakan reka bentuk logik yang sangat saintifik dan munasabah yang patut dipelajari.

Analisis Risiko

Risiko utama strategi ini adalah bahawa tetapan parameter yang tidak betul boleh menyebabkan pemasangan berlebihan. Ketiga penunjuk mempunyai 8 parameter secara keseluruhan. Tetapan yang tidak betul boleh menjejaskan strategi. Di samping itu, hubungan berat antara penunjuk juga perlu dikonfigurasi dengan betul, jika tidak, isyarat boleh meneutralkan satu sama lain dan menjadi tidak sah.

Untuk mengurangkan risiko ini, kesesuaian dengan persekitaran pasaran yang berbeza harus dipertimbangkan sepenuhnya semasa penetapan parameter, dan kombinasi parameter yang optimum harus diselaraskan melalui analisis backtesting. Di samping itu, sesuaikan dengan betul berat antara penunjuk untuk memastikan isyarat perdagangan dapat diaktifkan dengan berkesan. Apabila kerugian berturut-turut berlaku, pertimbangkan untuk mengurangkan saiz kedudukan untuk mengawal kerugian.

Arahan pengoptimuman

Ruang pengoptimuman strategi ini terutamanya memberi tumpuan kepada dua aspek: penyesuaian parameter dan peningkatan strategi stop loss.

  1. Memilih parameter penunjuk secara lebih saintifik dan mengoptimumkan kombinasi parameter. Algoritma boleh digunakan untuk mencari parameter optimum dengan matlamat seperti memaksimumkan pulangan dan meminimumkan risiko.

  2. Meningkatkan strategi stop loss untuk mengurangkan lagi stop loss yang tidak perlu sambil memastikan stop loss, dengan itu meningkatkan kadar kemenangan. Sebagai contoh, menggabungkan lebih banyak penunjuk sebagai isyarat stop loss, atau menetapkan pulback progresif kedudukan stop loss.

  3. Mengoptimumkan berat antara penunjuk dan logik penghakiman isyarat perdagangan untuk mengurangkan kadar salah menilai.

  4. Cuba memperkenalkan model pembelajaran mesin untuk mencapai pengoptimuman parameter automatik atau gunakan pengaturcaraan pembelajaran penguatan mendalam untuk penilaian dan peningkatan strategi.

Ringkasan

Strategi ini membina sistem arbitraj silang kitaran melalui gabungan Saluran Keltner, Henti Volatiliti dan Alligator Williams. Gabungan pelbagai penunjuk meningkatkan ketepatan isyarat dan kawalan kehilangan henti dinamik risiko. Tetapi terdapat ruang untuk penambahbaikan dalam penetapan parameter dan pengoptimuman. Secara keseluruhan, strategi ini mempunyai keilmuan yang kuat dan bernilai penyelidikan dan penerapan lanjut.


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