
Strategi ini adalah strategi stop-follow yang diterapkan pada E-mini S&P 500 futures (ES). Strategi ini menggunakan 10 hari ATR sebagai referensi untuk mengatur stop-loss line dengan 3 kali ATR sebagai batas stop-loss. Strategi ini menilai tren melalui perubahan arah garis ATR dan menghasilkan sinyal masuk pada titik-titik perubahan tren. Setelah masuk, strategi ini akan menyesuaikan stop-loss line secara real-time, membiarkan stop-loss line berjalan mengikuti harga, untuk melindungi profit.
Strategi ini menggunakan hl2 sebagai sumber harga. Pertama menghitung 10 hari ATR, dan memberi pengguna pilihan untuk menghitung ATR menggunakan metode SMA atau fungsi ATR built-in. Setelah menghitung ATR, tambahkan 3 kali ATR ke bawah sebagai kisaran.
Metode untuk menilai tren adalah, ketika harga melebihi batas atas, maka adalah head; ketika harga jatuh ke bawah batas, maka adalah headless. Ketika harga kembali kembali ke dalam kisaran, maka dikonfirmasi trend reversal. Saat ini jika dari air overturn, generate headless masuk sinyal; jika dari air overturn, generate headless masuk sinyal.
Setelah masuk, multihead stop line diatur untuk 1 poin di bawah batas atas, dan head stop line kosong diatur untuk 1 poin di atas batas bawah, untuk perlindungan tailing yang tajam.
Strategi ini secara keseluruhan merupakan strategi pelacakan tren yang lebih umum. Strategi ini memecahkan masalah sulitnya menentukan batas stop loss, mengurangi risiko dengan penyesuaian dinamis ATR. Namun, parameter ATR, algoritma stop loss, dan lain-lain masih memiliki ruang untuk dioptimalkan. Dengan pengujian dan penyesuaian parameter lebih lanjut, strategi ini dapat menjadi strategi stop loss yang lebih robust.
/*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)