
Strategi pelacakan ledakan momentum menentukan harga terobosan dengan menghitung persentase perubahan harga, menggabungkan sinyal penyaringan lalu lintas, dan mencapai titik terobosan dengan probabilitas tinggi untuk menangkap tren. Setelah memicu sinyal beli, strategi ini menggunakan cara pelacakan harga stop loss untuk mengunci keuntungan dan menghindari penarikan balik yang terlalu besar.
Strategi ini didasarkan pada beberapa indikator:
Persentase perubahan harga (isFourPercentBull) - menghitung persentase perubahan harga penutupan relatif terhadap harga penutupan hari sebelumnya untuk menentukan apakah harga berhasil menerobos;
Rasio harga penutupan dengan harga tertinggi - menghitung rasio harga penutupan dengan harga tertinggi untuk menilai kekuatan harga yang terjatuh;
Volume - Memerlukan volume transaksi yang lebih besar dari hari sebelumnya untuk memastikan terobosan yang efektif;
200-Day Simple Moving Average (SMA) - Meminta harga close dan open berada di atas garis 200-day untuk menentukan arah tren.
Ketika beberapa kondisi di atas terpenuhi secara bersamaan, sinyal beli dikeluarkan. Kemudian, strategi ini mengadopsi stop loss dan kunci keuntungan dengan cara pelacakan harga. Secara khusus, rumus perhitungan untuk melacak garis stop loss adalah:
trailPrice = close * (100 - trailPercent) / 100
TrailPercent adalah persentase tracking stop loss yang dapat dikonfigurasi. Dalam Ensure, setiap kali harga naik, stop loss juga akan naik, sehingga mengunci keuntungan.
Ini adalah strategi terobosan yang khas, dengan keuntungan berikut:
Strategi ini juga memiliki beberapa risiko:
Solusi untuk menghadapi risiko adalah:
Mengingat frekuensi stop loss yang lebih tinggi dari strategi ini, beberapa arah dapat dioptimalkan lebih lanjut:
Strategi pelacakan ledakan momentum secara keseluruhan adalah strategi pelacakan tren yang sangat praktis. Ini memecahkan masalah yang tidak dapat dihentikan dan dihentikan secara efektif dalam strategi terobosan, dan dapat mengendalikan risiko dengan baik sambil menangkap tren. Efek strategi ini juga memiliki ruang untuk ditingkatkan lebih lanjut melalui pengenalan alat seperti pengoptimalan 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)