Strategi ini menggunakan tiga indikator teknikal yang berbeza dalam kombinasi untuk membina strategi penarikan dalam pelbagai jangka masa, untuk mencapai keuntungan tambahan yang berisiko rendah dengan menangkap trend harga dalam tempoh masa yang berbeza.
Tiga indikator teknikal yang digunakan dalam strategi ini adalah saluran Kelter ((KC), perhentian kadar turun naik ((Vstop) dan penunjuk perhimpunan William ((WAE)). Saluran Kelter digunakan untuk menentukan sama ada harga berada di luar julat saluran, dan dengan itu menghantar isyarat perdagangan.
Apabila harga lebih tinggi daripada saluran Celtic, ia dianggap sebagai isyarat bullish. Apabila harga lebih rendah daripada saluran Celtic, ia dianggap sebagai isyarat bearish.
Penutupan kadar turun naik menetapkan kedudukan penutupan berdasarkan turun naik harga dan lebar saluran. Ia dapat menyesuaikan secara dinamik, dan mengelakkan kedudukan penutupan yang terlalu konservatif sambil menjamin penutupan.
Indeks William menilai sama ada harga berada dalam trend naik atau turun yang kuat dengan mengira MACD dan lebar jalur jalur Brin.
Dengan menggabungkan ketiga-tiga penunjuk ini, isyarat pada tempoh masa yang berbeza dapat disahkan antara satu sama lain. Ini mengurangkan kemungkinan kesalahan penilaian, membina logik strategi yang dioptimumkan secara stabil.
Kelebihan terbesar strategi ini adalah isyarat dagangan yang tepat yang dibawa oleh kombinasi pelbagai petunjuk. Tiga petunjuk bertindak pada kitaran masa yang berbeza, saling mengesahkan, dapat mengurangkan kemungkinan kesalahan penilaian, meningkatkan ketepatan isyarat. Selain itu, tetapan stop loss kadar turun naik adalah dinamik, dapat menyesuaikan kedudukan stop loss berdasarkan turun naik masa nyata, untuk mengawal risiko lebih lanjut.
Strategi gabungan ini dapat memberikan isyarat perdagangan yang lebih tepat dan lebih cekap daripada strategi indikator tunggal. Di samping itu, tiga indikator saling berkolaborasi untuk membentuk keputusan perdagangan dalam jangka masa yang lebih lama. Reka bentuk logik ini sangat saintifik dan masuk akal.
Risiko utama strategi ini adalah bahawa parameter yang tidak betul boleh menyebabkan overfit. Tiga indikator mempunyai 8 parameter, dan pengaturan yang tidak betul boleh memberi kesan buruk kepada strategi. Selain itu, hubungan berat antara indikator juga perlu dikonfigurasi dengan betul, jika tidak, isyarat boleh saling mengimbangi, menyebabkan tidak sah.
Untuk mengurangkan risiko ini, proses penetapan parameter perlu mempertimbangkan sepenuhnya kesesuaian dengan keadaan pasaran yang berbeza, menyesuaikan kepada kombinasi parameter yang optimum melalui analisis tindak balas. Selain itu, hubungan berat antara indikator harus disesuaikan dengan betul, memastikan isyarat perdagangan dapat mencetuskan dengan berkesan. Apabila berlaku kerugian berturut-turut, juga perlu dipertimbangkan untuk mengurangkan saiz kedudukan dan mengawal kerugian.
Ruang pengoptimuman untuk strategi ini tertumpu pada dua aspek: penyesuaian parameter dan penambahbaikan strategi berhenti. Secara khusus, ia boleh bermula dari beberapa aspek berikut:
Pilihan parameter penunjuk dengan lebih saintifik dan rasional, kombinasi parameter yang dioptimumkan. Dengan menggunakan algoritma, parameter terbaik dapat dicari mengikut matlamat seperti memaksimumkan keuntungan, meminimumkan risiko.
Meningkatkan strategi hentikan kerugian, dengan syarat untuk memastikan hentikan kerugian, untuk mengurangkan lagi kerugian yang tidak perlu, meningkatkan kadar kemenangan. Contohnya, menggabungkan lebih banyak petunjuk sebagai isyarat hentikan kerugian, atau menetapkan pengulangan beransur-ansur kedudukan hentikan kerugian.
Mengoptimumkan hubungan berat indikator dan logik penghakiman isyarat perdagangan, mengurangkan kadar kesalahan penghakiman. Anda boleh memperkenalkan lebih banyak ciri tingkah laku harga dan membina peraturan penghakiman yang lebih stabil dan boleh dipercayai.
Cuba memperkenalkan model pembelajaran mesin untuk mengoptimumkan parameter secara automatik. Atau gunakan pengaturcaraan pembelajaran mendalam untuk menilai dan memperbaiki strategi.
Strategi ini membina sistem penarikan yang merangkumi kerangka masa melalui penggunaan gabungan Celtic Channel, Stop Volatility dan William Indicator. Kombinasi pelbagai indikator meningkatkan ketepatan isyarat perdagangan, dan Stop Dynamic mengendalikan risiko. Tetapi masih ada ruang untuk penambahbaikan dalam menetapkan dan mengoptimumkan parameter. Secara keseluruhannya, strategi ini sangat saintifik dan patut diteliti dan digunakan.
/*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///