Strategi Pengesanan Ledakan Momentum

Penulis:ChaoZhang, Tarikh: 2024-03-01 11:08:43
Tag:

img

Ringkasan

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.

Prinsip Strategi

Indikator utama yang digunakan oleh strategi ini untuk menentukan isyarat kemasukan adalah:

  1. Perubahan harga peratusan (isFourPercentBull) - Hitung perubahan peratusan harga penutupan berbanding harga penutupan hari sebelumnya untuk menentukan sama ada harga telah berjaya menerobos.

  2. Nisbah harga penutupan kepada harga tertinggi (HighCloseRatio) - Hitung nisbah harga penutupan kepada harga tertinggi untuk menentukan kekuatan harga terobosan.

  3. Volume dagangan (volume) - Memerlukan jumlah dagangan lebih besar daripada hari sebelumnya untuk memastikan kejayaan yang sah.

  4. 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.

Kelebihan Strategi

Sebagai strategi breakout biasa, ia mempunyai kelebihan berikut:

  1. Penapisan pelbagai keadaan memastikan kesahihan penembusan dan mengelakkan penembusan palsu.

  2. Mengambil harga penjejakan stop loss, yang boleh secara aktif mengurangkan kerugian dan mengunci keuntungan untuk memaksimumkan mengelakkan drawdowns.

  3. Logik strategi adalah mudah dan jelas, mudah difahami dan dioptimumkan.

Risiko Strategi

Strategi ini juga mempunyai beberapa risiko:

  1. Masih ada kebarangkalian kegagalan yang tidak dapat mengelakkan kerugian sepenuhnya.

  2. Perhentian yang terlalu agresif boleh menyebabkan perhentian yang kerap.

  3. Tetapan parameter yang tidak betul boleh menyebabkan kekerapan perdagangan yang berlebihan atau isyarat yang terlepas.

Penyelesaian kepada risiko yang sepadan adalah:

  1. Mengoptimumkan parameter dan mengurangkan stop loss besar untuk memastikan ruang yang mencukupi.

  2. Melancarkan keadaan penembusan dengan munasabah untuk memastikan trend yang jelas tidak terlepas.

  3. Uji pelbagai jenis untuk menilai kestabilan strategi.

Arahan pengoptimuman

Memandangkan kekerapan hentian yang tinggi dalam strategi ini, arah berikut boleh dioptimumkan lagi:

  1. Cuba kaedah lain untuk mengesan stop loss, seperti mengesan purata bergerak, ATR dan mengesan turun naik.

  2. Meningkatkan algoritma pembelajaran mesin untuk melatih penilaian kombinasi parameter yang lebih baik berdasarkan data sejarah.

  3. Tambah keadaan penilaian tambahan berdasarkan pemisahan jumlah untuk memastikan keberkesanan.

  4. Menilai perbezaan dalam tetapan parameter di pelbagai jenis untuk mencari yang paling sesuai.

Kesimpulan

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)

Lebih lanjut