Berdasarkan strategi penjejakan letusan momentum


Tarikh penciptaan: 2024-03-01 11:08:43 Akhirnya diubah suai: 2024-03-01 11:08:43
Salin: 0 Bilangan klik: 826
1
fokus pada
1617
Pengikut

Berdasarkan strategi penjejakan letusan momentum

Gambaran keseluruhan

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.

Prinsip Strategi

Strategi ini digunakan untuk menentukan masa pembelian berdasarkan beberapa indikator:

  1. Peratusan perubahan harga ((isFourPercentBull) - mengira peratusan perubahan harga penutupan berbanding harga penutupan hari sebelumnya untuk menentukan sama ada harga berjaya menembusi;

  2. Nisbah harga penutupan ke harga tertinggi - mengira nisbah harga penutupan ke harga tertinggi untuk menilai kekuatan harga yang pecah;

  3. Jumlah transaksi (volume) - memerlukan jumlah transaksi yang lebih besar daripada hari sebelumnya untuk memastikan penembusan yang berkesan;

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

Kelebihan Strategik

Ini adalah strategi penembusan biasa yang mempunyai kelebihan berikut:

  1. Penapisan pelbagai syarat untuk memastikan penembusan berkesan dan mengelakkan penembusan palsu;
  2. Menggunakan harga untuk mengesan henti kerugian, anda boleh secara aktif menghentikan kerugian dan mengunci keuntungan, dan mengelakkan penarikan balik sebanyak mungkin;
  3. Logik strategi mudah difahami dan dioptimumkan.

Risiko Strategik

Strategi ini mempunyai beberapa risiko:

  1. Kemungkinan untuk gagal menembusi masih ada dan kerugian tidak dapat dielakkan sepenuhnya;
  2. Penghentian pengesanan yang terlalu radikal boleh menyebabkan penghentian pengesanan yang kerap;
  3. Tetapan parameter yang tidak betul boleh menyebabkan frekuensi perdagangan yang terlalu tinggi atau kehilangan isyarat.

Penyelesaian untuk menghadapi risiko adalah:

  1. Mengoptimumkan parameter, mengurangkan stop loss, dan memastikan ruang yang mencukupi;
  2. Mengambil langkah-langkah yang bersesuaian untuk melonggarkan syarat-syarat penembusan untuk memastikan bahawa trend yang jelas tidak terlepas;
  3. Uji varieti yang berbeza untuk menilai kestabilan strategi.

Arah pengoptimuman

Berikutan frekuensi hentian kerugian yang tinggi, strategi ini dapat dioptimumkan dengan lebih lanjut dalam beberapa arah:

  1. Cubalah kaedah lain untuk menjejaki stop loss, seperti menjejaki purata, ATR dan kadar turun naik;
  2. Menambah algoritma pembelajaran mesin untuk menilai kombinasi parameter penembusan yang lebih baik berdasarkan latihan data sejarah;
  3. Menambah kriteria penilaian tambahan berdasarkan jumlah transaksi yang berjaya, untuk memastikan kejayaan yang berjaya;
  4. Menilai perbezaan dalam parameter pelbagai jenis untuk mencari jenis yang paling sesuai.

ringkaskan

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.

Kod sumber strategi
/*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)