
Strategi ini adalah strategi yang menggunakan indikator ATR untuk membina saluran trend yang dinamik dalam jangka masa yang berbilang untuk mencapai trend. Strategi ini akan menghasilkan isyarat apabila harga menembusi saluran dan menangkap trend yang lebih besar dengan terus menyesuaikan saluran.
Strategi menggunakan indikator ATR untuk membina saluran uptrend dan saluran downtrend. Secara khusus, garis saluran uptrend adalah harga penutupan tolak N kali ganda indikator ATR; garis saluran downtrend adalah harga penutupan ditambah N kali ganda indikator ATR. Nilai N boleh disesuaikan dengan parameter.
Apabila harga menembusi saluran naik, ia akan menghasilkan isyarat beli; apabila harga menembusi saluran turun, ia akan menghasilkan isyarat jual. Saluran ini akan menyesuaikan diri dengan pergerakan harga terkini, yang membolehkan trend dijejaki.
Selain itu, strategi ini juga mendefinisikan satu pembolehubah trend untuk menentukan sama ada trend sedang naik atau turun. Pembolehubah trend digunakan bersama dengan garis saluran untuk mengelakkan isyarat yang salah.
Kaedah pengoptimuman:
Strategi ini secara keseluruhannya adalah strategi trend-tracking yang lebih baik. Ia dapat menyesuaikan diri secara dinamik, mengikut keadaan, dan mengelakkan mengejar tinggi dan rendah. Dengan pengoptimuman parameter dan penambahbaikan yang sesuai, anda dapat meningkatkan lagi kelebihan strategi, mengurangkan risiko, sehingga mendapat kesan yang lebih baik.
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('超级趋势精简优化版', 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.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na