
Strategi pelacakan ledakan momentum menentukan harga pecah dengan mengira peratusan perubahan harga, menggabungkan isyarat penapisan kuantiti lalu lintas, mencapai titik pecah yang menangkap trend dengan kebarangkalian tinggi. Apabila mencetuskan isyarat beli, strategi ini menggunakan cara pelacakan harga berhenti untuk mengunci keuntungan dan mengelakkan penarikan balik yang berlebihan.
Strategi ini digunakan untuk menentukan masa pembelian berdasarkan beberapa indikator:
Peratusan perubahan harga ((isFourPercentBull) - mengira peratusan perubahan harga penutupan berbanding harga penutupan hari sebelumnya untuk menentukan sama ada harga berjaya menembusi;
Nisbah harga penutupan ke harga tertinggi - mengira nisbah harga penutupan ke harga tertinggi untuk menilai kekuatan harga yang pecah;
Jumlah transaksi (volume) - memerlukan jumlah transaksi yang lebih besar daripada hari sebelumnya untuk memastikan penembusan yang berkesan;
200 hari purata bergerak mudah ((SMA) - Memerlukan harga penutupan dan harga pembukaan lebih tinggi daripada garis 200 hari untuk menentukan arah trend.
Apabila beberapa syarat di atas dipenuhi secara serentak, isyarat beli dikeluarkan. Selepas itu, strategi ini menggunakan harga untuk mengesan hentian untuk mengaktifkan hentian dan mengunci keuntungan. Khususnya, formula pengiraan untuk mengesan garis hentian adalah:
trailPrice = close * (100 - trailPercent) / 100
TrailPercent adalah peratusan pengesanan yang boleh dikonfigurasi. Dengan cara ini, apabila harga naik, barisan berhenti akan naik, dan ia akan mengunci keuntungan. Apabila harga kembali ke barisan berhenti, barisan berhenti akan ditutup.
Ini adalah strategi penembusan biasa yang mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Penyelesaian untuk menghadapi risiko adalah:
Berikutan frekuensi hentian kerugian yang tinggi, strategi ini dapat dioptimumkan dengan lebih lanjut dalam beberapa arah:
Strategi pengesanan ledakan momentum secara keseluruhan adalah strategi pengesanan trend yang sangat praktikal. Ia menyelesaikan masalah strategi penembusan yang tidak dapat menghentikan dan menghentikan secara berkesan, dan dapat mengawal risiko dengan baik sambil menangkap trend. Kesan strategi ini juga mempunyai ruang untuk meningkatkan lagi dengan pengenalan kaedah seperti pengoptimuman parameter dan pembelajaran mesin.
/*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)