Tren Super ATR Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2024-02-19 11:41:20
Tag:

img

Gambaran umum

Super ATR Trend Following Strategy adalah strategi trend following berdasarkan indikator ATR. Ini menggunakan indikator ATR untuk mengukur volatilitas pasar dan menetapkan stop loss berdasarkan beberapa ATR untuk melacak tren.

Logika Strategi

Strategi ini pertama-tama menghitung indikator ATR, yang merupakan moving average dari volatilitas harga selama N hari terakhir, untuk mewakili risiko pasar dan volatilitas.

Kemudian band atas dan bawah dihitung berdasarkan nilai ATR dikalikan dengan faktor, yaitu:close - Multiplier * ATRuntuk band atas;close + Multiplier * ATRIni membentuk saluran tren berbasis ATR.

Kami kemudian menilai apakah harga saat ini menembus band atas atau bawah saluran. Jika harga menembus band atas, itu dinilai sebagai memasuki tren penurunan; jika harga menembus band bawah, itu dinilai sebagai memasuki tren naik. Ketika ada trend breakout, kami membuat pembelian dan penjualan yang sesuai.

Selain itu, strategi telah menetapkan jendela waktu perdagangan untuk hanya berdagang dalam rentang waktu tanggal yang ditentukan.

Analisis Keuntungan

Strategi trend yang didasarkan pada saluran indikator ini memiliki keuntungan berikut:

  1. Menggunakan indikator ATR untuk menyesuaikan posisi stop loss secara otomatis secara efektif mengendalikan risiko
  2. ATR mempertimbangkan volatilitas harga, stop loss yang lebih wajar
  3. Meningkatkan presisi masuk dengan saluran pecah
  4. Memungkinkan penyesuaian metode perhitungan ATR, lebih fleksibel
  5. Menetapkan jendela perdagangan menghindari kegagalan strategi selama peristiwa penting

Secara umum, ini adalah tren yang sederhana dan praktis mengikuti strategi yang dapat secara efektif mengendalikan risiko dan mendapatkan pengembalian yang baik.

Analisis Risiko

Ada juga beberapa risiko untuk strategi ini:

  1. Pasar mungkin mengalami perubahan yang keras sehingga ATR gagal bereaksi tepat waktu, sehingga stop loss terlalu longgar
  2. Harga dapat bervariasi dalam saluran ketika sentimen berbeda, meningkatkan risiko perdagangan
  3. Multiple tetap mungkin tidak cocok untuk semua produk, perlu penyesuaian sesuai
  4. setJendela membatasi peluang perdagangan, mungkin kehilangan perdagangan yang baik jika tidak diatur dengan benar

Untuk mengendalikan risiko ini, kita dapat mengambil langkah-langkah berikut:

  1. Gabungkan indikator lain untuk menentukan kondisi pasar, hindari hanya mengandalkan ATR
  2. Tambahkan filter untuk menghindari keluar yang tidak valid yang memperkenalkan risiko perdagangan
  3. Pilih pengganda yang tepat sesuai dengan karakteristik historis produk yang berbeda
  4. Mengoptimalkan dan menguji setWindow parameter untuk memastikan pengaturan yang benar

Optimalisasi

Ada ruang untuk optimalisasi lebih lanjut dari strategi ini:

  1. Memperkenalkan algoritma pembelajaran mesin untuk secara dinamis mengoptimalkan pengganda
  2. Masukkan indikator sentimen dll untuk mengoptimalkan rentang saluran
  3. Tambahkan konfirmasi volume atau volatilitas untuk menghindari penyusutan yang tidak valid
  4. Menggunakan kerangka strategi berbasis waktu lanjutan untuk backtest

Optimalisasi ini dapat meningkatkan stabilitas dan profitabilitas strategi.

Kesimpulan

Secara keseluruhan ini adalah tren yang sangat praktis mengikuti strategi. Ini membangun saluran adaptif menggunakan indikator ATR dan menentukan entri oleh saluran breakout. Strategi ini sederhana dan efektif untuk mengendalikan risiko, cocok untuk melacak tren jangka menengah dan panjang. Kami juga mengusulkan lebih lanjut kontrol risiko dan saran optimasi untuk membuat strategi lebih kuat.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.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
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Lebih banyak