
Strategi mengikuti trend penyesuaian diri adalah strategi perdagangan kuantitatif yang menggabungkan indikator Brin dan indikator rata-rata, secara dinamik menyesuaikan faktor kekuatan trend, untuk mencapai trend mengikuti dan menghentikan kerugian. Strategi ini menggunakan indikator Brin untuk mengira kadar turun naik harga, berdasarkan dinamika ini mengira kekuatan trend yang munasabah, dan kemudian digabungkan dengan indikator ATR untuk memetakan saluran trend penyesuaian diri, untuk mencapai keputusan dan mengikuti trend lembu dan lembu.
Indikator utama strategi ini adalah Brin Belt. Brin Belt terdiri daripada medium, upper, dan lower. Brin Belt terdiri daripada purata bergerak sederhana n hari di medium, upper adalah n hari standard deviation + k kali ganda, dan lower adalah n hari standard deviation-k kali ganda.
Kemudian, bandwidth Brinband ((up-track - down-track) dikira dengan nisbah antara bandwidth Brinband dan medium-track, yang dikenali sebagai nisbah faktor ketegangan penyokong. Nisbah ini mencerminkan kadar turun naik pasaran semasa dan kekuatan trend. Kami menetapkan nilai maksimum dan minimum faktor ketegangan untuk mengelakkan terlalu besar atau terlalu kecil.
Setelah mendapat faktor kekuatan yang munasabah, ATR bergerak ke atas dan ke bawah, digabungkan dengan penunjuk ATR*Jarak faktor kekuatan ini, membentuk saluran trend yang menyesuaikan diri. Apabila harga penutupan dari bawah ke atas menembusi ke atas, lakukan lebih banyak; apabila dari atas ke bawah menembusi ke bawah, lakukan kosong.
Di samping itu, strategi juga menetapkan mekanisme hentikan kerugian. Apabila kedudukan teratas terbentuk, jika harga jatuh ke titik terendah semasa membuka kedudukan, hentikan kedudukan kosong; juga kedudukan kosong.
Strategi ini mempunyai kelebihan berikut:
Adaptif. Cara pengiraan faktor kekuatan membolehkan strategi menyesuaikan lebar saluran mengikut pergerakan kadar turun naik pasaran, melebarkan saluran dalam pasaran lembu yang sedang berkembang, menyempitkan saluran dalam pasaran yang bergolak, untuk menyesuaikan diri dengan pelbagai jenis pasaran.
Frekuensi operasi sederhana. Berbanding dengan strategi purata bergerak yang mudah, strategi Brinband menyesuaikan saluran dengan frekuensi yang lebih rendah, mengelakkan pembukaan kedudukan yang tidak perlu.
Pendaftaran tepat. Pendaftaran ini menerobos ke atas dan ke bawah landasan yang dapat menyaring bunyi pasaran dengan berkesan dan memastikan kemungkinan besar untuk menangkap trend.
Terdapat mekanisme penangguhan kerugian. Penangguhan terbina dalam yang dapat mengawal kerugian tunggal dengan berkesan adalah kelebihan besar dalam strategi ini.
Strategi ini mempunyai beberapa risiko:
Sensitiviti parameter yang lebih tinggi. Siklus n dan perkalian k pada pita Brin mempunyai kesan yang besar terhadap keputusan, memerlukan ujian berulang untuk mencari kombinasi parameter yang terbaik.
Apabila harga berubah-ubah, ia akan berlarutan dengan cepat, menyebabkan ketidakupayaan untuk mengikuti trend. Pada masa ini, anda perlu menangguhkan strategi dan menunggu orbit untuk berdekatan.
Kadang-kadang terdapat isyarat yang salah. Strategi Brin tidak sempurna, dan terdapat isyarat yang salah yang perlu menanggung kerugian yang sesuai.
Hentikan kerugian adalah lebih mudah. Hentikan strategi ini hanya mengambil kira harga tertinggi dan terendah selepas membuka kedudukan, tanpa menggabungkan kaedah hentikan yang lebih rumit seperti kadar turun naik, yang mungkin terlalu radikal atau konservatif dan memerlukan pengoptimuman.
Strategi ini juga perlu dioptimumkan dalam beberapa aspek:
Uji kesesuaian parameter dalam pelbagai mata wang dan tempoh. Parameter dalam strategi boleh dioptimumkan untuk pelbagai mata wang dan tempoh untuk meningkatkan kesesuaian strategi.
Mekanisme penangguhan yang dioptimumkan. Anda boleh memperkenalkan penangguhan bergerak, penangguhan bergoyang, penangguhan pengesanan, dan lain-lain untuk menjadikan penangguhan lebih pintar.
Gabungan dengan penapis indikator lain. Indikator seperti MACD, KDJ dan lain-lain boleh dimasukkan untuk mengelakkan tanda salah Brin di pasaran goyang lateral.
Menambah mekanisme pengurusan kedudukan. Menerapkan kaedah pengurusan seperti pengesanan berhenti, penambahan kedudukan piramid, kedudukan peratusan tetap, dan sebagainya dapat meningkatkan kadar pulangan strategi.
Melakukan pengoptimuman pengembalian. Dengan memperluaskan jangka masa pengembalian, menyesuaikan parameter, menganalisis laporan pengembalian, dan sebagainya, memeriksa sepenuhnya kesan strategi dan mencari parameter yang optimum.
Trend penyesuaian diri mengikuti strategi secara keseluruhan adalah strategi kuantitatif yang lebih matang. Ia menggunakan trend tangkapan dinamik indikator Brin, dengan penunjuk ATR untuk membina saluran penyesuaian diri, untuk membuat keputusan mengenai tren multifungsi. Di samping itu, mekanisme kawalan risiko terbina dalam. Kelebihan strategi ini adalah dengan frekuensi operasi yang sesuai, ketepatan masuk, dan kawalan risiko yang lebih baik.
/*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)