
Strategi ini adalah strategi berhenti mengikut yang digunakan untuk E-mini S&P500 berjangka ((ES)). Ia menggunakan ATR 10 hari sebagai rujukan untuk menetapkan garis berhenti multi-kepala dan kosong dengan 3 kali ATR sebagai julat berhenti. Strategi ini menilai trend melalui perubahan arah garis ATR dan menghasilkan isyarat masuk pada titik perubahan trend.
Strategi ini menggunakan hl2 sebagai sumber harga. Pertama, ia mengira ATR 10 hari dan memberi pengguna pilihan sama ada untuk mengira ATR menggunakan kaedah SMA atau fungsi ATR terbina dalam. Selepas mengira ATR, tambahkan 3 kali ATR ke bawah sebagai julat. Kedua-dua garis julat adalah garis stop loss.
Kaedah untuk menilai trend adalah, apabila harga melebihi sempadan atas, maka bermulut; apabila harga jatuh ke bawah sempadan, maka berpusing. Apabila harga kembali masuk ke dalam julat, maka pembalikan trend akan disahkan. Pada masa ini, jika berputar lebih banyak, generate sinyal masuk bermulut; jika berputar lebih banyak, generate sinyal masuk berpusing.
Selepas masuk, garis hentian multihead disetel ke bawah 1 titik di sempadan atas, dan garis hentian kepala kosong disetel ke atas 1 titik di sempadan bawah, untuk perlindungan kebocoran yang tajam.
Strategi ini secara keseluruhannya merupakan strategi pengesanan trend yang lebih umum. Ia menyelesaikan masalah sukar menentukan ruang berhenti, mengurangkan risiko melalui penyesuaian ATR dinamik. Pada masa yang sama, penutupan kehilangan untuk melindungi keuntungan. Tetapi parameter ATR, algoritma berhenti kehilangan dan sebagainya masih mempunyai ruang untuk pengoptimuman.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)
// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1
// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1
strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)