Strategi ini adalah strategi trailing stop yang digunakan pada niaga hadapan E-mini S&P500 (ES). Ia menggunakan ATR 10 hari sebagai rujukan dan menetapkan julat stop loss kepada 3 kali ATR untuk menentukan garis berhenti panjang dan pendek. Strategi ini menilai trend dengan perubahan arah garis ATR dan menghasilkan isyarat kemasukan pada titik perubahan trend. Setelah dimasukkan, ia akan menyesuaikan garis stop loss dalam masa nyata untuk mengikuti pergerakan harga, melindungi keuntungan.
Strategi ini menggunakan hl2 sebagai sumber harga. Mula-mula ia mengira ATR 10 hari, dan membolehkan pengguna memilih antara menggunakan kaedah SMA atau fungsi ATR terbina dalam untuk mengira ATR. Selepas mendapatkan ATR, ia menambah 3 kali ATR ke atas dan ke bawah untuk membentuk julat. Dua garis julat adalah garis stop loss.
Kaedah menilai trend adalah apabila harga melebihi batas atas, ia adalah panjang; apabila harga memecahkan batas bawah, ia adalah pendek. Apabila harga kembali ke dalam julat, ia mengesahkan pembalikan trend. Pada masa ini, jika diputar dari pendek ke panjang, ia akan menghasilkan isyarat masuk panjang; jika diputar dari panjang ke pendek, ia akan menghasilkan isyarat masuk pendek.
Selepas masuk, garis stop loss panjang ditetapkan pada had atas dikurangkan 1 tanda, dan garis stop loss pendek ditetapkan pada had bawah ditambah 1 tanda, di belakang untuk melindungi keuntungan.
Pada umumnya, ini adalah strategi trend berikut yang kuat. Ia menyelesaikan masalah menentukan julat kehilangan berhenti dan mengurangkan risiko dengan menyesuaikan berhenti secara dinamik berdasarkan ATR. Pada masa yang sama, berhenti menyusul kunci keuntungan. Tetapi masih ada ruang untuk mengoptimumkan parameter seperti tempoh ATR, algoritma berhenti dan lain-lain. Dengan pengujian dan penyesuaian lanjut, strategi ini boleh menjadi strategi trend berikut dengan ketahanan yang 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)