
Strategi mengikuti tren yang disesuaikan adalah strategi perdagangan kuantitatif yang menggabungkan indikator Brin dan indikator rata-rata, secara dinamis menyesuaikan faktor kekuatan tren, untuk mencapai tren mengikuti dan menghentikan kerugian. Strategi ini menggunakan indikator Brin untuk menghitung volatilitas harga, berdasarkan dinamika ini untuk menghitung kekuatan tren yang masuk akal, kemudian digabungkan dengan indikator ATR untuk memetakan saluran tren yang disesuaikan, untuk mencapai penilaian dan mengikuti tren bullish dan bearish.
Indikator inti dari strategi ini adalah Brin Belt. Brin Belt terdiri dari mid-trail, up-trail, dan down-trail. Mid-trail adalah rata-rata bergerak sederhana selama n hari, dengan up-trail adalah n hari standar deviasi mid-trail + k kali, dan down-trail adalah n kali standar deviasi mid-trail-k kali. Di sini, mid-trail 20 hari dan 2 kali standar deviasi dipilih untuk membangun Brin Belt.
Lalu kita menghitung bandwidth Brinband ((up-track-down-track) dengan rasio dari mid-track, yang dikenal sebagai rasio faktor intensitas tipis. Rasio ini mencerminkan volatilitas pasar saat ini dan intensitas tren.
Setelah mendapatkan faktor intensitas yang wajar, ATR bergerak ke atas dan ke bawah, digabungkan dengan indikator ATR*Jarak faktor kekuatan ini, membentuk saluran tren yang beradaptasi sendiri. Ketika harga close-out naik dari bawah ke atas, lakukan lebih banyak; Ketika naik dari atas ke bawah, lakukan lebih sedikit.
Selain itu, strategi juga mengatur mekanisme stop loss. Jika harga jatuh ke titik terendah saat membuka posisi setelah terbentuknya posisi teratas, maka stop loss akan terjadi pada posisi terendah; posisi kosong juga akan terjadi.
Strategi ini memiliki keuntungan sebagai berikut:
Adaptif. Cara menghitung faktor intensitas memungkinkan strategi untuk menyesuaikan lebar saluran sesuai dengan dinamika fluktuasi pasar, memperluas saluran di pasar bullish yang sedang tren, menyempit saluran di pasar yang bergolak, dan menyesuaikan diri dengan berbagai jenis pasar.
Frekuensi Operasi Sedang. Dibandingkan dengan strategi Moving Average sederhana, strategi Bollinger Bands menyesuaikan saluran dengan frekuensi yang lebih rendah, menghindari pembukaan posisi yang tidak perlu.
Masuk dengan tepat. Masuk dengan cara menembus tren naik turun dapat secara efektif menyaring kebisingan pasar dan memastikan kemungkinan tinggi untuk menangkap tren.
Ada mekanisme penghentian kerugian. Penghentian kerugian yang dibangun dapat secara efektif mengendalikan kerugian tunggal, merupakan keuntungan besar dari strategi ini.
Strategi ini juga memiliki beberapa risiko:
Sensitivitas parameter yang lebih tinggi. Periode n dan kelipatan k pada pita Brin sangat berpengaruh pada hasil, perlu pengujian berulang untuk menemukan kombinasi parameter yang optimal.
Ketika harga mengalami fluktuasi besar, BRI akan cepat lepas dan menyebabkan ketidakmampuan untuk melacak tren. Pada saat ini, strategi harus dihentikan dan menunggu saat orbit berkumpul.
Kadang-kadang ada sinyal yang salah. Strategi Brin tidak sempurna, dan ada beberapa sinyal yang salah, yang memerlukan kerugian yang sesuai.
Strategi ini hanya mempertimbangkan harga tertinggi dan harga terendah setelah membuka posisi, tanpa menggabungkan metode stop loss yang lebih rumit seperti volatilitas, mungkin terlalu radikal atau konservatif, perlu dioptimalkan.
Strategi ini juga perlu dioptimalkan dalam beberapa hal:
Uji efektifitas dari berbagai mata uang dan berbagai parameter siklus. Parameter strategi dapat dioptimalkan untuk berbagai mata uang dan siklus, meningkatkan kemampuan adaptasi strategi.
Optimalkan mekanisme stop loss. Anda dapat memasukkan stop loss bergerak, stop loss bergoyang, stop loss pelacakan, dan lain-lain untuk membuat stop loss lebih cerdas.
Dalam kombinasi dengan indikator lain, filter masuk. Indikator seperti MACD, KDJ, dan lain-lain dapat ditambahkan untuk menghindari sinyal salah Brin Belt di pasar bergoyang lateral.
Meningkatkan mekanisme manajemen posisi. Mengimplementasikan cara manajemen seperti tracking stop, pyramid, dan posisi tetap, dapat meningkatkan tingkat pengembalian strategi.
Melakukan pengoptimalan pengembalian. Dengan memperluas jangka waktu pengembalian, menyesuaikan parameter, menganalisis laporan pengembalian, dan lain-lain, untuk memeriksa secara menyeluruh efektivitas strategi dan menemukan parameter yang optimal.
Adaptasi tren mengikuti strategi secara keseluruhan adalah strategi kuantitatif yang lebih matang. Ini menggunakan tren tangkapan dinamis indikator pita Brin, bekerja dengan indikator ATR untuk membangun saluran adaptasi, untuk mencapai keputusan tentang tren multi-ruang.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)