Super ATR Trend Mengikut Strategi

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

img

Ringkasan

Super ATR Trend Following Strategy adalah strategi trend mengikut indikator ATR. Ia menggunakan indikator ATR untuk mengukur turun naik pasaran dan menetapkan stop loss berdasarkan pelbagai ATR untuk mengesan trend.

Logika Strategi

Strategi ini mula-mula mengira penunjuk ATR, yang merupakan purata bergerak turun naik harga selama N hari yang lalu, untuk mewakili risiko pasaran dan turun naik. Strategi ini membolehkan kita mengubah kaedah pengiraan ATR, sama ada ATR biasa atau SMA.

Kemudian jalur atas dan bawah dikira berdasarkan nilai ATR didarabkan dengan faktor, iaitu:close - Multiplier * ATRuntuk band atas;close + Multiplier * ATRIni membentuk saluran trend berasaskan ATR.

Kami kemudian menilai sama ada harga semasa menembusi jalur atas atau bawah saluran. Jika harga menembusi jalur atas, ia dinilai sebagai memasuki trend penurunan; jika harga menembusi jalur bawah, ia dinilai sebagai memasuki trend menaik. Apabila terdapat trend breakout, kami membuat pembelian dan penjualan yang sepadan.

Di samping itu, strategi telah menetapkan tetingkap masa dagangan untuk hanya berdagang dalam julat masa tarikh yang ditentukan.

Analisis Kelebihan

Strategi trend berdasarkan saluran ini mempunyai kelebihan berikut:

  1. Menggunakan penunjuk ATR untuk menyesuaikan kedudukan stop loss secara automatik berkesan mengawal risiko
  2. ATR mengambil kira turun naik harga, lebih munasabah stop loss
  3. Tingkatkan ketepatan kemasukan dengan pecah saluran
  4. Membolehkan penyesuaian kaedah pengiraan ATR, lebih fleksibel
  5. Menetapkan tetingkap dagangan mengelakkan kegagalan strategi semasa peristiwa penting

Secara amnya, ini adalah trend yang mudah dan praktikal mengikut strategi yang dapat mengawal risiko dengan berkesan dan memperoleh pulangan yang baik.

Analisis Risiko

Terdapat juga beberapa risiko untuk strategi ini:

  1. Pasaran mungkin mempunyai perubahan ganas yang ATR gagal bertindak balas tepat pada masanya, mengakibatkan stop loss yang terlalu longgar
  2. Harga boleh berkisar dalam saluran apabila sentimen berlainan, meningkatkan risiko perdagangan
  3. Gantian tetap mungkin tidak sesuai untuk semua produk, perlu disesuaikan
  4. setWindow mengehadkan peluang dagangan, mungkin kehilangan perdagangan yang baik jika tidak ditetapkan dengan betul

Untuk mengawal risiko ini, kita boleh mengambil langkah-langkah berikut:

  1. Gabungkan penunjuk lain untuk menentukan keadaan pasaran, elakkan bergantung hanya pada ATR
  2. Tambah penapis untuk mengelakkan penembusan yang tidak sah yang memperkenalkan risiko perdagangan
  3. Pilih pengganda yang betul mengikut ciri sejarah produk yang berbeza
  4. Mengoptimumkan dan menguji setWindow parameter untuk memastikan persediaan yang betul

Pengoptimuman

Terdapat ruang untuk mengoptimumkan lagi strategi ini:

  1. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan pengganda secara dinamik
  2. Menggabungkan penunjuk sentimen dan lain-lain untuk mengoptimumkan julat saluran
  3. Tambah pengesahan jumlah atau turun naik untuk mengelakkan pecah yang tidak sah
  4. Menggunakan kerangka strategi berasaskan masa maju untuk backtest

Pengoptimuman ini dapat meningkatkan kestabilan dan keuntungan strategi.

Kesimpulan

Secara keseluruhannya ini adalah strategi trend berikut yang sangat praktikal. Ia membina saluran adaptif menggunakan penunjuk ATR dan menentukan entri dengan penembusan saluran. Strategi ini mudah dan berkesan untuk mengawal risiko, sesuai untuk mengesan trend jangka menengah dan panjang. Kami juga mencadangkan kawalan risiko dan cadangan pengoptimuman lebih lanjut untuk menjadikan strategi lebih mantap.


/*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 lanjut