Strategi kuantitatif henti untung berganda dan henti rugi bergerak berganda


Tarikh penciptaan: 2024-01-19 15:07:04 Akhirnya diubah suai: 2024-01-19 15:07:04
Salin: 3 Bilangan klik: 598
1
fokus pada
1617
Pengikut

Strategi kuantitatif henti untung berganda dan henti rugi bergerak berganda

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan kuantitatif Bitcoin berdasarkan double stop, double stop loss, dan mobile stop loss. Strategi ini menggunakan silang EMA dan WMA sebagai isyarat masuk, mengambil pendekatan pengurusan risiko double stop double stop loss, mengambil stop loss mobile untuk menjamin sebahagian keuntungan selepas titik berhenti pertama dicapai, dan terus mengejar lebih banyak keuntungan.

Prinsip Strategi

Apabila EMA memakai WMA dari bawah, ia akan melakukan entri tambahan; apabila EMA memakai WMA dari atas, ia akan melakukan entri kosong.

Pada halangan, dua halangan ditetapkan, yang pertama ditetapkan sebagai 20 titik di atas titik masuk, dan yang kedua ditetapkan sebagai 40 titik di atas titik masuk.

Pada halangan, dua titik berhenti juga ditetapkan, titik berhenti pertama ditetapkan sebagai 20 titik di bawah titik masuk, dan titik berhenti kedua ditetapkan sebagai titik masuk itu sendiri.

Apabila harga mula-mula menyentuh titik berhenti pertama, anda akan melonggarkan kedudukan anda sebanyak 50% dan memindahkan titik berhenti anda ke titik masuk, dan terus mengejar keuntungan yang lebih besar dari titik berhenti kedua.

Ini akan membawa kepada tiga hasil:

  1. Harga mula-mula mencecah titik henti rugi, kehilangan 2% daripada jumlah pokok;
  2. Harga mula-mula menyentuh titik berhenti pertama dan mendapat keuntungan 1%, kemudian menyentuh titik berhenti kedua dan akhirnya mendapat keuntungan 1%;
  3. Harga mula-mula menyentuh titik berhenti pertama dan mendapat keuntungan 1%, kemudian terus beroperasi menyentuh titik berhenti kedua dan akhirnya mendapat keuntungan 3%.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah sistem pengurusan risiko. Dengan menetapkan double stop double stop loss, anda boleh mengambil stop loss bergerak untuk mengunci keuntungan dan terus mengejar keuntungan yang lebih besar selepas mendapat sebahagian daripada keuntungan. Ini dapat meningkatkan keuntungan secara signifikan.

Kelebihan lain ialah strategi ini membahagikan hasil perdagangan tunggal kepada tiga keadaan, mengurangkan kebarangkalian kerugian tunggal, menjadikan keuntungan keseluruhan lebih rata. Strategi biasa hanya mempunyai dua hasil, sama ada kehilangan 2% atau keuntungan yang lebih besar daripada 2%. Strategi ini mempunyai tiga hasil, iaitu kehilangan 2%, keuntungan 1%, dan keuntungan 3%. Ini juga lebih baik mengawal risiko ekor.

Analisis risiko

Risiko strategi ini adalah terutamanya dari penyetempatan titik berhenti. Jarak berhenti yang terlalu longgar boleh menyebabkan kerugian yang terlalu besar; dan jarak berhenti yang terlalu sempit mudah terserang oleh bunyi pasaran. Ini memerlukan penyetempatan yang sesuai berdasarkan ciri-ciri dan kadar turun naik yang berbeza.

Risiko lain ialah terdapat risiko kerugian bagi bahagian yang masih memegang kedudukan selepas titik berhenti pertama. Jika kerugian melebihi keuntungan di titik berhenti pertama, sebahagian atau semua keuntungan akan dilumpuhkan. Ini memerlukan pelaksanaan yang ketat untuk menghentikan pergerakan untuk mengunci keuntungan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Uji kombinasi parameter yang berbeza untuk mencari tetapan parameter yang optimum. Sebagai contoh, anda boleh menguji 15 titik, 25 titik stop loss jarak.

  2. Cuba kombinasi indikator lain seperti KDJ, MACD dan lain-lain untuk menentukan kemasukan.

  3. Perkadaran kedudukan yang dioptimumkan untuk titik penangguhan pertama adalah 50% sesuai atau 30% atau 70% lebih baik.

  4. Uji tetapan kelajuan pengesanan kerugian bergerak untuk memastikan ruang kerugian seminimum mungkin dengan jaminan keuntungan.

ringkaskan

Strategi ini sangat stabil secara keseluruhan, dengan double stop double stop dan stop loss bergerak, dapat meningkatkan tahap keuntungan dengan ketara, mengurangkan risiko ekor. Ruang pengoptimuman juga agak besar, dan hasil yang lebih baik dapat diperoleh melalui penyesuaian parameter dan gabungan indikator.

Kod sumber strategi
/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=2019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)