Adaptive Bollinger Bands Trend Mengikuti Strategi


Tarikh penciptaan: 2023-11-16 16:35:01 Akhirnya diubah suai: 2023-11-16 16:35:01
Salin: 1 Bilangan klik: 605
1
fokus pada
1617
Pengikut

Adaptive Bollinger Bands Trend Mengikuti Strategi

Gambaran keseluruhan

Strategi ini adalah berdasarkan kepada indikator Brinch Channel, yang digabungkan dengan garis purata bergerak yang menyesuaikan diri, untuk menilai dan mengesan trend dengan tepat. Dengan menyesuaikan parameter secara dinamik, strategi ini dapat menyesuaikan diri dengan pelbagai jenis dan persekitaran pasaran, dengan kestabilan dan kebolehpasangan yang lebih kuat.

Prinsip Strategi

Strategi ini terdiri daripada beberapa bahagian:

  1. Mengira purata bergerak yang beradaptasi. Di sini, indikator regresi linear digunakan untuk mengira keluk regresi linear dalam tempoh tertentu sebagai purata bergerak.

  2. Mengira laluan atas dan bawah laluan Brin. Di sini, jalur laluan dikira menggunakan jalur laluan ATR yang disesuaikan, dan kemudian dikombinasikan dengan parameter yang ditentukan oleh pengguna, ratio2, untuk mengira laluan atas dan bawah laluan Brin.

  3. Menentukan masa untuk membeli dan menjual. Arah trend dan masa untuk membeli dan menjual dinilai berdasarkan sama ada harga menembusi laluan Brin atas dan bawah. Apabila harga menembusi laluan bawah dari bawah ke atas, ia dianggap sebagai isyarat membeli; apabila harga jatuh dari atas ke bawah dan menembusi laluan atas, ia dianggap sebagai isyarat menjual.

  4. Tetapkan hentian kerugian. Menggunakan hentian titik tetap untuk mengawal risiko, sambil menggunakan hentian hentian yang dijejaki selepas titik tetap terlebih dahulu untuk menetapkan hentian, sambil menjamin keuntungan untuk memaksimumkan trend.

  5. Dengan tempoh ujian semula, masa permulaan dan pengakhiran ujian semula telah ditetapkan untuk mengoptimumkan strategi ujian.

Kelebihan Strategik

  1. Reka bentuk parameter yang menyesuaikan diri. Kedua-dua jalur laluan dan rata-rata bergerak dalam saluran Brin digunakan untuk mengira dengan cara yang menyesuaikan diri, membolehkan strategi menyesuaikan diri dengan perubahan pasaran.

  2. Keputusan mengenai penembusan jelas. Ia menggunakan penembusan atas dan bawah laluan Brin untuk menentukan titik perubahan trend, dan isyarat bio lebih jelas.

  3. Penetapan stop loss adalah munasabah. Menggunakan risiko kawalan stop loss tetap, mengesan cara stop loss untuk memaksimumkan keuntungan trend.

  4. Kesan pengesahan semula. Tetapkan masa pengesahan semula untuk mengesahkan strategi, memastikan ia juga berkesan dalam keadaan sejarah.

  5. Mudah difahami. Strategi ini jelas dan mudah difahami, dan kodnya ringkas, mudah difahami dan dioperasikan secara langsung.

Risiko Strategik

  1. Saluran Brin memerlukan pengoptimuman parameter. Saluran Brin memerlukan jalur dan kitaran pengembalian yang dioptimumkan mengikut varieti dan keadaan pasaran yang berbeza. Jika pengoptimuman tidak betul, terdapat banyak isyarat yang salah atau sering berlaku.

  2. Tempoh pengembalian mungkin tidak mencukupi. Pengembalian ini hanya menetapkan ruang lingkup pengembalian baru-baru ini dan tidak dapat meliputi sejarah yang lebih lama untuk mengesahkan sepenuhnya kestabilan strategi.

  3. Mungkin terdapat risiko overfit. Parameter pengembalian semasa mungkin hanya dioptimumkan untuk keadaan tertentu baru-baru ini, sehingga terdapat risiko overfit sejarah.

  4. Nombor titik henti perlu dinilai untuk menentukan. Nombor titik henti semasa lebih kecil dan mungkin terlalu sensitif dan akan mengalami kerosakan henti yang kecil. Nombor titik henti yang sesuai perlu dinilai.

  5. Kurangnya penunjuk pengesahan kuantitatif. Pada masa ini, isyarat perdagangan hanya dinilai dari penembusan grafik, dan tidak ada penunjuk pengesahan kuantitatif yang diperkenalkan untuk mengesahkan kesahihan isyarat.

Arah pengoptimuman strategi

  1. Memperkenalkan lebih banyak penunjuk penyesuaian. Anda boleh menguji pelbagai kombinasi penunjuk rata-rata penyesuaian, penunjuk saluran penyesuaian, dan membina strategi pengesanan trend yang lebih kuat.

  2. Pengaturan parameter yang dioptimumkan. Kombinasi optimum antara laluan Bryn dan parameter garis rata dapat dijumpai melalui kaedah yang lebih sistematik seperti algoritma genetik.

  3. Memperluas jangka masa pengembalian. Memperluas jangka masa pengembalian, pengujian parameter yang dioptimumkan untuk kebolehpercayaan. Memperkenalkan titik slider, kos urus niaga dan sebagainya untuk pengembalian yang lebih realistik.

  4. Memperkenalkan peraturan penapisan kuantitatif. Tetapkan peraturan penunjuk kuantitatif seperti jumlah transaksi yang pecah, jurang tiang MACD, dan lain-lain untuk mengelakkan isyarat penembusan laluan Boolean yang salah.

  5. Mengoptimumkan mekanisme hentian. Menilai pelbagai tetapan titik hentian tetap dan pelbagai cara untuk mengesan hentian untuk mencari mod hentian yang optimum.

  6. Ujian dalam talian. Menjalankan strategi yang dioptimumkan dalam talian, merekodkan penarikan keuntungan, dan memperbaiki lagi kebolehpercayaan strategi yang stabil.

ringkaskan

Strategi ini mempunyai pemikiran keseluruhan yang jelas, menggunakan saluran Brin untuk menentukan arah trend dan menangkap isyarat penembusan, dan dibantu dengan garis rata bergerak untuk menentukan arah trend keseluruhan. Dengan pengoptimuman tertentu, ia boleh menjadi strategi penjejakan trend yang lebih stabil dan boleh dipercayai. Namun, perlu berhati-hati dengan perwakilan jangka masa pengukuran, memperkenalkan peraturan penapisan kuantifikasi dan pengendalian tahap kerugian. Jika anda dapat menangani masalah ini dengan baik, strategi ini dapat memperoleh keuntungan yang stabil dan ketara dalam pertempuran sebenar.

Kod sumber strategi
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear Regression (Backtest / Trailing Stop)",overlay=true)
close_price = close[0]

len = input(40)
linear_reg = linreg(close_price, len, 0)

calculationToPlotAverageMeanLine=linear_reg
useUpperDeviation = input(true, "Upper Deviation", bool)
useLowerDeviation = input(true, "Lower Deviation", bool)
ratio2=input(defval=2,title=" Ratio 2")
avg=atr(len)
r2=avg*ratio2
top=linear_reg+r2
bott=linear_reg-r2

calculationToPlotUpperLine=top
calculationToPlotLowerLine=bott

plotUpperDeviationLine = plot(not useUpperDeviation ? na : calculationToPlotUpperLine, color=color(blue,0))
plotAverageMeanLine = plot(calculationToPlotAverageMeanLine, color=color(olive,0))
plotLowererDeviationLine = plot(not useLowerDeviation ? na : calculationToPlotLowerLine, color=color(red,0))
fill(plotUpperDeviationLine, plotAverageMeanLine, color=color(blue,85))
fill(plotLowererDeviationLine, plotAverageMeanLine, color=color(red,85))


//
length = input(title="linear Length",  defval=40, minval=1)
multiplier = input(title="linear Deviation", type=float, defval=2, minval=1)
overbought = input(title="Overbought",  defval=1, minval=1)
oversold = input(title="Oversold",  defval=0, minval=1)
custom_timeframe = input(title="Use another Timeframe?", type=bool, defval=false)
highTimeFrame = input(title="Select The Timeframe",  defval="60")
res1 = custom_timeframe ? highTimeFrame : timeframe.period

fixedSL = input(title="SL Activation", defval=70)
trailSL = input(title="SL Trigger", defval=10)
fixedTP = input(title="TP Activation", defval=50)
trailTP = input(title="TP Trigger", defval=10)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2015)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

smabasis = linreg(close_price, length, 0)
stdev = stdev(close, length)
cierre = request.security(syminfo.tickerid, res1, close, false)
alta = request.security(syminfo.tickerid, res1, high, false)
baja = request.security(syminfo.tickerid, res1, low, false)
basis1 = request.security(syminfo.tickerid, res1, smabasis, false)
stdevb = request.security(syminfo.tickerid, res1, stdev, false)
dev = multiplier * stdevb // stdev(cierre, length)
upper = basis1 + dev
lower = basis1 - dev

bbr = (cierre - lower)/(upper - lower)

// plot(bbr)

// // MARCA LAS RESISTENCIAS
pintarojo = 0.0
pintarojo := nz(pintarojo[1])
pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] :  nz(pintarojo[1])
p = plot(pintarojo, color = red, style=circles, linewidth=2)

// // MARCA LOS SOPORTES
pintaverde = 0.0
pintaverde := nz(pintaverde[1])
pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] :  nz(pintaverde[1])
g = plot(pintaverde, color = black, style=circles, linewidth=2)
zz= crossover(pintaverde,pintaverde[1]) or crossunder(pintaverde,pintaverde[1])
kp= crossover(pintarojo,pintarojo[1]) or crossunder(pintarojo,pintarojo[1]) 
plotshape(zz,  title="buy", style=shape.triangleup,location=location.belowbar, color=green, transp=0, size=size.small)
plotshape(kp, title="sell", style=shape.triangledown,location=location.abovebar, color=red, transp=0, size=size.small)


strategy.entry("BUY", strategy.long, qty=10, oca_name="BUY",  when=zz and window())
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)

strategy.entry("SELL", strategy.short, qty=10, oca_name="SELL",  when=kp and window())
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=trailSL, trail_points=fixedTP)