Strategi Pengesanan Burst Momentum menilai terobosan harga dengan mengira peratusan perubahan harga dan menapis isyarat dengan jumlah dagangan untuk melaksanakan penangkapan titik terobosan trend dengan kebarangkalian tinggi.
Indikator utama yang digunakan oleh strategi ini untuk menentukan isyarat kemasukan adalah:
Perubahan harga peratusan (isFourPercentBull) - Hitung perubahan peratusan harga penutupan berbanding harga penutupan hari sebelumnya untuk menentukan sama ada harga telah berjaya menerobos.
Nisbah harga penutupan kepada harga tertinggi (HighCloseRatio) - Hitung nisbah harga penutupan kepada harga tertinggi untuk menentukan kekuatan harga terobosan.
Volume dagangan (volume) - Memerlukan jumlah dagangan lebih besar daripada hari sebelumnya untuk memastikan kejayaan yang sah.
Rata-rata bergerak mudah 200 hari (SMA) - Memerlukan harga penutupan dan harga pembukaan lebih tinggi daripada garis 200 hari untuk menentukan arah trend.
Apabila pelbagai syarat di atas dipenuhi pada masa yang sama, isyarat beli dikeluarkan. Selepas itu, strategi menggunakan harga penjejakan stop loss untuk secara aktif menghentikan kerugian dan mengunci keuntungan. Khususnya, formula pengiraan untuk garis stop loss yang mengikuti adalah:
trailPrice = close * (100 - trailPercent) / 100
Di mana trailPercent adalah peratusan stop loss yang boleh dikonfigurasikan. Ini memastikan bahawa selagi harga meningkat, garis stop loss juga akan meningkat untuk mengunci keuntungan. Apabila harga jatuh kembali ke garis stop loss, tutup kedudukan untuk menghentikan kerugian.
Sebagai strategi breakout biasa, ia mempunyai kelebihan berikut:
Penapisan pelbagai keadaan memastikan kesahihan penembusan dan mengelakkan penembusan palsu.
Mengambil harga penjejakan stop loss, yang boleh secara aktif mengurangkan kerugian dan mengunci keuntungan untuk memaksimumkan mengelakkan drawdowns.
Logik strategi adalah mudah dan jelas, mudah difahami dan dioptimumkan.
Strategi ini juga mempunyai beberapa risiko:
Masih ada kebarangkalian kegagalan yang tidak dapat mengelakkan kerugian sepenuhnya.
Perhentian yang terlalu agresif boleh menyebabkan perhentian yang kerap.
Tetapan parameter yang tidak betul boleh menyebabkan kekerapan perdagangan yang berlebihan atau isyarat yang terlepas.
Penyelesaian kepada risiko yang sepadan adalah:
Mengoptimumkan parameter dan mengurangkan stop loss besar untuk memastikan ruang yang mencukupi.
Melancarkan keadaan penembusan dengan munasabah untuk memastikan trend yang jelas tidak terlepas.
Uji pelbagai jenis untuk menilai kestabilan strategi.
Memandangkan kekerapan hentian yang tinggi dalam strategi ini, arah berikut boleh dioptimumkan lagi:
Cuba kaedah lain untuk mengesan stop loss, seperti mengesan purata bergerak, ATR dan mengesan turun naik.
Meningkatkan algoritma pembelajaran mesin untuk melatih penilaian kombinasi parameter yang lebih baik berdasarkan data sejarah.
Tambah keadaan penilaian tambahan berdasarkan pemisahan jumlah untuk memastikan keberkesanan.
Menilai perbezaan dalam tetapan parameter di pelbagai jenis untuk mencari yang paling sesuai.
Strategi Pengesanan Burst Momentum adalah strategi pengesanan trend yang sangat praktikal secara keseluruhan. Ia menyelesaikan masalah ketidakupayaan untuk menghentikan kerugian dan keuntungan yang diambil secara berkesan dalam strategi pecah, sambil masih mengawal risiko dengan baik ketika menangkap trend. Dengan ruang untuk penambahbaikan lanjut dengan memperkenalkan pengoptimuman dan pembelajaran mesin, ia bernilai penyelidikan dan penerapan yang mendalam.
/*backtest start: 2023-03-01 00:00:00 end: 2023-12-10 05:20:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © doks23 //@version=5 strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true) //Check Vol checkVol = input.bool(defval=false,title="IncludeAvgVolume?") volSMAlength = input(50, title="VolumeLength") volumeSma = ta.sma(volume, volSMAlength) highvolume = volume >= volumeSma volumeCond=checkVol?highvolume:true // Profit and Loss trailPercent = input.float(title="Trail%", defval=3, step=0.1) //longCondition PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1) MaxThreshold=input.float(10,'Max Breakout', step=0.1) HighCloseRatio=input.float(70,'Close to High Ratio', step=1) float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100) float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100) LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold barcolor(color=(LongCond?color.yellow: na),title='BObar') longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200) //Input Strategy DateCheck= input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy') FromDate= input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy') ToDate =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy') PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy') ContractQty =input.int(1,'No of Contract',group = 'Strategy') //Backtesting Date Range TimeWindow=true // Number of Contract var int trade_qty=na if(PostionSize=='Contract') trade_qty:=ContractQty else trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty //Position Buy BuyTriggerPrice = ta.valuewhen(longCondition,high,0) //Trailing price var float trailPrice = na float percentMulti = (100 - trailPercent) / 100 longCondition2=longCondition and TimeWindow if longCondition2 strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice) trailPrice := close*percentMulti if strategy.position_size>0 trailPrice := math.max(close*percentMulti,trailPrice[1]) if low <= trailPrice strategy.exit('Exit','Long',stop = trailPrice) if strategy.position_size==0 trailPrice:=na // Plot Strategy var float trail_long_SL=na if strategy.position_size>0 trail_long_SL:=trailPrice else trail_long_SL:=na //Strategy Plot PlotMA=input.bool(title="Plot MA?", defval=false) plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA') plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA') plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA') // plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)