Strategi Trailing Stop berasaskan ATR untuk ES

Penulis:ChaoZhang, Tarikh: 2024-01-12 14:52:23
Tag:

img

Ringkasan

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.

Logika Strategi

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.

Kelebihan

  1. Menggunakan ATR boleh menyesuaikan diri secara automatik dengan perubahan dalam turun naik pasaran dan mengurangkan kebarangkalian kehilangan berhenti yang dicetuskan.
  2. Kaedah pengesanan trend adalah mudah dan berkesan untuk mengelakkan risiko mengejar puncak dan bawah.
  3. Penghentian yang menjurus mengunci keuntungan dan mengelakkan memberikan kembali perdagangan yang menguntungkan.

Analisis Risiko

  1. Tetapan parameter ATR yang tidak betul boleh menyebabkan julat stop loss menjadi terlalu besar atau terlalu kecil.
  2. Perubahan drastis dalam turun naiknya asas boleh menyebabkan pemicu stop loss yang tidak normal.
  3. PEMANGGUNGAN penggambaran mungkin terlalu konservatif untuk terus mengikuti trend.

Arahan pengoptimuman

  1. Pertimbangkan untuk mengoptimumkan parameter ATR digabungkan dengan metrik turun naik.
  2. Uji algoritma penangguhan yang berbeza seperti peratusan penangguhan penangguhan dan sebagainya.
  3. Menapis isyarat kemasukan yang digabungkan dengan penunjuk trend untuk mengelakkan isyarat trend palsu.

Kesimpulan

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)


Lebih lanjut