Strategi ini adalah strategi trailing stop yang diterapkan pada E-mini S&P500 futures (ES). Strategi ini menggunakan ATR 10 hari sebagai referensi dan menetapkan rentang stop loss menjadi 3 kali ATR untuk mendefinisikan garis stop panjang dan pendek. Strategi ini menilai tren dengan perubahan arah garis ATR dan menghasilkan sinyal masuk pada titik balik tren. Setelah dimasukkan, akan menyesuaikan garis stop loss secara real time untuk melacak pergerakan harga, melindungi keuntungan.
Strategi ini menggunakan hl2 sebagai sumber harga. Pertama-tama menghitung ATR 10 hari, dan memungkinkan pengguna memilih antara menggunakan metode SMA atau fungsi ATR bawaan untuk menghitung ATR. Setelah mendapatkan ATR, ia menambahkan 3 kali ATR ke atas dan ke bawah untuk membentuk kisaran. Dua garis kisaran adalah garis stop loss.
Metode untuk menilai tren adalah ketika harga melebihi batas atas, itu panjang; ketika harga melanggar batas bawah, itu pendek. Ketika harga kembali ke kisaran, itu mengkonfirmasi pembalikan tren. Pada saat ini, jika diputar dari pendek ke panjang, itu akan menghasilkan sinyal masuk panjang; jika diputar dari panjang ke pendek, itu akan menghasilkan sinyal masuk pendek.
Setelah masuk, garis stop loss panjang diatur ke batas atas dikurangi 1 tik, dan garis stop loss pendek diatur ke batas bawah ditambah 1 tik, menyusul untuk melindungi keuntungan.
Pada umumnya, ini adalah strategi trend following yang kuat. Ini memecahkan masalah menentukan rentang stop loss dan mengurangi risiko dengan menyesuaikan stop secara dinamis berdasarkan ATR. Pada saat yang sama, trailing stop lock in profit. Tapi masih ada ruang untuk mengoptimalkan parameter seperti periode ATR, stop algorithm dll. Dengan pengujian dan tuning lebih lanjut, strategi ini dapat menjadi strategi trend following dengan ketahanan tinggi.
/*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)