Strategi Stop Multiple ATR Terbaik

Penulis:ChaoZhang, Tarikh: 2024-02-21 14:24:22
Tag:

img

Ringkasan

Strategi Stop Multiple ATR Terbaik adalah strategi mengikuti trend yang menggunakan kelipatan Julat Benar Purata (ATR) untuk menetapkan titik stop loss dan menyesuaikan risiko secara dinamik. Ia boleh keluar dari kedudukan dengan tepat pada masanya apabila trend harga berubah untuk mengelakkan kerugian besar.

Logika Strategi

Strategi ini mula-mula mengira purata bergerak mudah tempoh SMA yang cepat dan perlahan. Ia menjadi panjang apabila SMA yang cepat melintasi SMA yang perlahan, dan menjadi pendek apabila SMA yang cepat melintasi di bawah SMA yang perlahan.

Selepas memasuki, ia memantau nilai ATR dalam masa nyata. ATR mewakili turun naik purata dalam tempoh melihat kembali tertentu. Strategi ini membolehkan kita menetapkan tempoh ATR (pedefault 14) dan pengganda (pedefault 2). Sistem mengira nilai ATR pada kemasukan, kemudian mengalikannya dengan pengganda yang ditetapkan sebagai jarak berhenti.

Sebagai contoh, jika ATR selepas masuk adalah 50 mata, dan pengganda ditetapkan menjadi 2, maka jarak berhenti akan menjadi 100 mata. Jika harga kemudian bergerak lebih daripada 100 mata, pesanan stop loss akan dicetuskan. Ini membolehkan kerugian berhenti tepat pada masanya untuk mengelakkan kerugian berlebihan.

Strategi ini juga mempertimbangkan penentuan trend. Stop loss panjang hanya diaktifkan apabila isyarat beli sepadan dengan trend menaik. Stop loss pendek sepadan dengan trend menurun.

Garis stop loss digambarkan pada carta supaya kita boleh mengesahkannya secara real-time. Apabila keadaan stop loss dicetuskan, kedudukan yang sepadan ditutup secara automatik oleh sistem.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa ia secara dinamik menyesuaikan jarak stop loss dan secara automatik mengubah pendedahan risiko berdasarkan perubahan turun naik pasaran. Apabila turun naik berkembang, jarak berhenti juga meningkat, mengurangkan kemungkinan kerugian berhenti dipukul.

Berbanding dengan jarak stop loss tetap, pendekatan ini berkesan mengawal kerugian berdasarkan setiap perdagangan sambil mengesan trend.

Di samping itu, digabungkan dengan penentuan trend, kaedah stop loss seperti itu boleh mengurangkan kemungkinan dihentikan oleh whipsaws di zon penyatuan.

Analisis Risiko

Risiko utama strategi ini adalah kemungkinan harga menarik balik dalam jangka pendek semasa kedudukan, mencetuskan stop loss.

Satu lagi risiko ialah harga mungkin berlainan melalui tahap stop loss dalam pergerakan ganas. Ini memerlukan tetapan pengganda ATR yang lebih besar, tetapi itu juga bermakna potensi keuntungan yang berkurangan.

Akhirnya, strategi ini tidak mempertimbangkan kesan perdagangan selepas jam dan pra pasaran pada nilai ATR. Ini boleh membawa kepada pengiraan data ATR yang tidak tepat pada pembukaan atau penutupan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter tempoh ATR dan menguji kombinasi terbaik untuk pasaran yang berbeza

  2. Bandingkan kelipatan ATR tetap vs dinamik dari segi pulangan

  3. Menggabungkan data selepas jam dalam pengiraan ATR untuk mengurangkan jurang pada buka

  4. Tetapkan keadaan ATR: hanya membolehkan hentian apabila ATR mencapai tahap tertentu, mengelakkan hentian yang tidak perlu dalam persekitaran turun naik rendah

  5. Masukkan lebih banyak penapis: trend utama, penunjuk jumlah / momentum dll.

Kesimpulan

Strategi Stop Multiple ATR Terbaik secara berkesan menyeimbangkan trend berikut dan kawalan risiko dengan menyesuaikan jarak berhenti secara dinamik. Berbanding dengan berhenti tetap, ia memastikan potensi keuntungan sambil mengehadkan kerugian dengan berkesan.

Sudah tentu beberapa risiko masih kekal, seperti jurang harga dan hentian yang terlalu sensitif. pengoptimuman lanjut di pelbagai dimensi boleh meningkatkan ketahanan dan pulangan.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt
//This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

SystemName = "BEST ATR Stop Multiple Strategy"
TradeId = "BEST"

InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true


strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay )

fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1)
slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1)

src = close
// Calculate moving averages
fastSMA = sma(src, fastSMAperiod)
slowSMA = sma(src, slowSMAperiod)

// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)

// trend states
since_buy  = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend  = since_sell > since_buy
sell_trend = since_sell < since_buy 

is_signal = enterLong or enterShort

// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)

// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)

// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)



///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////

// use SL?
useSL = input(true, "Use stop Loss")
// ATR multiple Stop
stop_atr_length         = input(14,title="ATR Length", minval=1, type=input.integer)
stop_atr_mult           = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float)

// Global STOP

stop_price = 0.0, stop_price := nz(stop_price[1])

// STOP ATR
var stop_atr      = 0.0
var entry_stop_atr   = 0.0

stop_atr          := nz(atr(stop_atr_length))

if enterLong or enterShort
    entry_stop_atr := stop_atr * stop_atr_mult

// display the ATR value multiple
plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup, 
 location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small)

// var label atr_long_label = na
// var label atr_short_label = na
lapos_y_entry_up = lowest(30)
lapos_y_entry_dn = highest(30)

// text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#')

// if enterLong

//     label.delete(atr_long_label)

//     atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label, 
//      xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white, 
//      size=size.normal)    

// if enterShort

//     label.delete(atr_short_label)

//     atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label, 
//      xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black, 
//      size=size.normal)    

// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0

longStopPrice := if useSL and buy_trend
    stopValue = entry_price - entry_stop_atr
else
    0

shortStopPrice := if useSL and sell_trend
    stopValue = entry_price + entry_stop_atr
else
    999999

//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS  ***//
//////////////////////////////////////////////////////////////////////////////////////////

cond_long_stop_loss_hit  = useSL and buy_trend and crossunder(low, longStopPrice[1]) 

cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) 


// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice 
 ? longStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Long Trail Stop")

plot(series=useSL and sell_trend and high <= shortStopPrice 
 ? shortStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Short Trail Stop")

close_long  = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit

// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)

//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)


Lebih lanjut