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.
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:
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.
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.
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.
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.
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.
Ruang pengoptimuman strategi ini terutamanya memberi tumpuan kepada dua aspek: penyesuaian parameter dan peningkatan strategi stop loss.
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.
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.
Mengoptimumkan berat antara penunjuk dan logik penghakiman isyarat perdagangan untuk mengurangkan kadar salah menilai.
Cuba memperkenalkan model pembelajaran mesin untuk mencapai pengoptimuman parameter automatik atau gunakan pengaturcaraan pembelajaran penguatan mendalam untuk penilaian dan peningkatan strategi.
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///