Strategi Pelacakan Burst Momentum menilai terobosan harga dengan menghitung persentase perubahan harga dan menyaring sinyal dengan volume perdagangan untuk menerapkan kemungkinan tinggi menangkap titik terobosan tren.
Indikator utama yang digunakan dalam strategi ini untuk menentukan sinyal masuk adalah:
Perubahan harga persentase (isFourPercentBull) - Menghitung perubahan persentase harga penutupan relatif terhadap harga penutupan hari sebelumnya untuk menentukan apakah harga telah berhasil menerobos.
Rasio harga penutupan terhadap harga tertinggi (HighCloseRatio) - Menghitung rasio harga penutupan terhadap harga tertinggi untuk menentukan kekuatan terobosan harga.
Volume perdagangan (volume) - Memerlukan volume perdagangan yang lebih besar dari hari sebelumnya untuk memastikan terobosan yang valid.
Rata-rata bergerak sederhana 200 hari (SMA) - Memerlukan harga penutupan dan harga pembukaan lebih tinggi dari garis 200 hari untuk menentukan arah tren.
Ketika beberapa kondisi di atas terpenuhi pada saat yang sama, sinyal beli dikeluarkan. Setelah itu, strategi menggunakan price tracking stop loss untuk secara aktif menghentikan kerugian dan mengunci keuntungan. Secara khusus, rumus perhitungan untuk garis stop loss trailing adalah:
trailPrice = close * (100 - trailPercent) / 100
Di mana trailPercent adalah persentase stop loss yang dapat dikonfigurasi. Ini memastikan bahwa selama harga naik, garis stop loss juga akan naik untuk mengunci keuntungan. Ketika harga jatuh kembali ke garis stop loss, tutup posisi untuk menghentikan kerugian.
Sebagai strategi breakout yang khas, ia memiliki keuntungan berikut:
Penyaringan multi-kondisi memastikan validitas penyusutan dan menghindari penyusutan palsu.
Mengadopsi pelacakan harga stop loss, yang dapat secara aktif memotong kerugian dan mengunci keuntungan untuk memaksimalkan menghindari penarikan.
Logika strategi sederhana dan jelas, mudah dipahami dan dioptimalkan.
Strategi ini juga memiliki beberapa risiko:
Masih ada kemungkinan kegagalan breakout yang tidak dapat sepenuhnya menghindari kerugian.
Perhentian yang terlalu agresif dapat menyebabkan berhenti yang sering.
Pengaturan parameter yang tidak benar dapat menyebabkan frekuensi perdagangan yang berlebihan atau sinyal yang terlewatkan.
Solusi untuk risiko yang sesuai adalah:
Mengoptimalkan parameter dan mengurangi stop loss besar untuk memastikan ruang yang cukup.
Rasional meringankan kondisi breakout untuk memastikan tren yang jelas tidak terlewatkan.
Uji varietas yang berbeda untuk mengevaluasi stabilitas strategi.
Mengingat frekuensi yang tinggi dari pemberhentian dalam strategi ini, arah berikut dapat dioptimalkan lebih lanjut:
Uji metode stop loss pelacakan lainnya, seperti pelacakan rata-rata bergerak, ATR dan pelacakan volatilitas.
Meningkatkan algoritma pembelajaran mesin untuk melatih penilaian kombinasi parameter kinerja yang lebih baik berdasarkan data historis.
Tambahkan kondisi penilaian tambahan berdasarkan volume break-out untuk memastikan efektivitas.
Evaluasi perbedaan pengaturan parameter di berbagai varietas untuk menemukan yang paling cocok.
Momentum Burst Tracking Strategy adalah strategi pelacakan tren yang sangat praktis secara keseluruhan. Strategi ini memecahkan masalah ketidakmampuan untuk secara efektif menghentikan kerugian dan keuntungan dalam mengambil strategi breakout, sambil tetap mengendalikan risiko dengan baik saat menangkap tren. Dengan ruang untuk perbaikan lebih lanjut dengan memperkenalkan optimasi dan pembelajaran mesin, itu layak penelitian dan aplikasi 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)