
Strategi ATR Stop Loss Multiple Optimal adalah satu strategi trend yang menggunakan perkalian rata-rata gelombang sebenar ((ATR) untuk menetapkan titik berhenti, risiko penyesuaian dinamik. Ia boleh berhenti tepat pada masanya apabila trend harga berubah, dan mengelakkan kerugian besar.
Strategi ini mula-mula mengira purata bergerak sederhana untuk kitaran SMA cepat dan kitaran SMA perlahan, melakukan plus apabila melewati SMA perlahan pada SMA cepat, dan melakukan minus apabila melewati SMA perlahan di bawah SMA cepat.
Setelah masuk, ia akan memantau nilai ATR secara langsung. ATR menunjukkan purata turun naik dalam tempoh masa tertentu yang lalu. Dasar ini membolehkan kita menetapkan panjang kitaran ATR (default 14) dan kelipatan (default 2). Sistem akan mengira nilai ATR semasa masuk, kemudian kalikan dengan kelipatan yang ditetapkan, sebagai jarak berhenti.
Sebagai contoh, jika ATR selepas masuk adalah 50 mata dan kelipatan ditetapkan sebagai 2, jarak hentian adalah 100 mata. Jika harga kemudiannya berjalan lebih dari 100 mata, pesanan hentian akan dicetuskan. Ini dapat menghentikan kerugian tepat pada masanya dan mengelakkan kerugian yang berlebihan.
Strategi ini juga mengambil kira penghakiman trend, dan hanya akan mengaktifkan hentian kedudukan panjang apabila isyarat membeli sepadan dengan trend naik. Isyarat shorting diaktifkan apabila ia sepadan dengan trend turun.
Garis hentian akan digambarkan pada carta, dan kami dapat mengesahkan secara langsung. Apabila keadaan hentian tercetus, kedudukan yang sesuai juga akan ditapis secara automatik oleh sistem.
Kelebihan utama strategi ini ialah penyesuaian jarak berhenti secara dinamik, yang dapat mengubah suai celah risiko secara automatik mengikut perubahan kadar turun naik pasaran. Apabila kadar turun naik meningkat, jarak berhenti juga akan meningkat, mengurangkan kemungkinan penembusan. Dalam pasaran yang kurang turun naik, jarak berhenti akan berkurangan.
Berbanding dengan jarak berhenti tetap, kaedah ini dapat mengawal kerugian tunggal dengan berkesan sambil mengikuti trend. Ia menjamin ruang keuntungan dan memberi perhatian kepada pengurusan risiko.
Di samping itu, jika digabungkan dengan penilaian trend, halangan seperti ini dapat mengurangkan kemungkinan terjatuh akibat gegaran di kawasan yang disusun.
Risiko utama strategi ini adalah bahawa garis pendek harga akan ditarik ke belakang semasa memegang kedudukan, yang akan mencetuskan perintah hentian kerugian. Terutama apabila ATR terlalu pendek, jarak hentian tidak dapat menyaring sepenuhnya kesan turun naik jangka pendek.
Risiko lain ialah, dalam keadaan yang melampau, pergerakan harga yang melompat mungkin langsung menembusi garisan stop loss. Ini memerlukan penyetempatan pekali stop loss yang lebih besar, tetapi juga bermakna ruang keuntungan yang lebih kecil.
Akhirnya, strategi ini tidak mengambil kira kesan perdagangan malam dan perdagangan sebelum tutup pada nilai ATR. Ini boleh menyebabkan data ATR yang dikira oleh strategi tidak tepat pada waktu buka atau tutup.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Mengoptimumkan parameter kitaran ATR, menguji kombinasi parameter terbaik di bawah pasaran yang berbeza
Perbandingan kadar pulangan dalam tetapan pekali tetap dan pekali dinamik
ATR dikira dengan gabungan data malam dan pra-pertukaran untuk mengurangkan kesan kenaikan harga pembukaan
Tetapkan syarat ATR: hanya diaktifkan selepas ATR mencapai tahap tertentu, untuk mengelakkan kerugian yang tidak perlu dalam pasaran turun naik rendah
Menggabungkan lebih banyak syarat penapisan: seperti trend skala besar, penunjuk tenaga kuantitatif dan lain-lain
Strategi ATR Stop Loss Multiplier yang terbaik mencapai keseimbangan yang berkesan antara pengesanan trend dan kawalan risiko dengan menyesuaikan jarak berhenti secara dinamik. Berbanding dengan jarak berhenti tetap, ia dapat mengehadkan kerugian tunggal dengan berkesan sambil memastikan ruang untuk keuntungan.
Sudah tentu, masih perlu berhati-hati dengan beberapa risiko yang berpotensi, seperti harga yang melonjak, penutupan terlalu sensitif, dan sebagainya. Kita boleh terus mengoptimumkan dari pelbagai peringkat, meningkatkan kestabilan strategi dan kadar 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)