
Die Strategie ist eine Strategie, bei der ein dynamischer Trendkanal mit dem ATR-Indikator für mehrere Zeitrahmen erstellt wird, um einen Trend zu verfolgen. Die Strategie erzeugt ein Signal, wenn der Preis den Kanal durchbricht, um einen größeren Trend zu erfassen, indem der Kanal ständig angepasst wird.
Die Strategie verwendet die ATR-Indikatoren, um einen Aufwärts- und einen Abwärts-Kanal zu erstellen. Konkret ist die Aufwärts-Kanallinie das N-fache des Abschlusspreises minus der ATR-Indikatoren; die Abwärts-Kanallinie ist das N-fache des Abschlusspreises plus der ATR-Indikatoren. Die Werte von N können durch Parameter angepasst werden.
Wenn der Preis den Aufwärtskanal durchbricht, erzeugt er ein Kaufsignal; wenn der Preis den Abwärtskanal durchbricht, erzeugt er ein Verkaufsignal. Der Kanal wird an die neueste Preisdynamik angepasst, um Trendverfolgung zu ermöglichen.
Außerdem definiert die Strategie eine Trendvariable, um zu beurteilen, ob ein Trend in einem Aufwärtstrend oder in einem Abwärtstrend ist. Die Trendvariablen werden in Kombination mit der Kanallinie verwendet, um falsche Signale zu vermeiden.
Optimierungsmethoden:
Die Strategie ist insgesamt eine gute Trend-Tracking-Strategie. Sie ist in der Lage, sich dynamisch anzupassen, um zu vermeiden, dass sie nach den Höhen und Tiefen folgt. Durch Optimierung der Parameter und entsprechende Verbesserungen können die Vorteile der Strategie weiter erhöht und das Risiko verringert werden, um bessere Ergebnisse zu erzielen.
/*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