Mehrzeitrahmenstrategie zur Überprüfung von Supertrends

Schriftsteller:ChaoZhang, Datum: 15.01.2024
Tags:

img

Übersicht

Diese Strategie verwendet den ATR-Indikator, um einen dynamischen Trendkanal mit mehreren Zeitrahmen zu erstellen, um Trends zu verfolgen.

Strategie Logik

Die Strategie verwendet den ATR-Indikator, um einen Aufwärtstrendkanal und einen Abwärtstrendkanal zu erstellen. Insbesondere ist die Aufwärtstrendkanallinie der Schlusskurs minus N mal der ATR-Indikator; die Abwärtstrendkanallinie ist der Schlusskurs plus N mal der ATR-Indikator. Der N-Wert kann durch Parameter angepasst werden.

Wenn der Preis durch den Aufwärtstrendkanal bricht, wird ein Kaufsignal generiert; wenn der Preis durch den Abwärtstrendkanal bricht, wird ein Verkaufssignal generiert. Der Kanal passt sich dynamisch an die neuesten Preise an, um Trends zu verfolgen.

Darüber hinaus definiert die Strategie auch eine Trendvariable, um festzustellen, ob sich der Strom in einem Aufwärtstrend oder einem Abwärtstrend befindet.

Vorteile

  • Nutzt dynamische Kanäle, um Trends zu verfolgen und mit Trends zu handeln
  • Vermeidet das Verfolgen von Höchstwerten und Verkaufsschwellen und verringert das Risiko einer Umkehr des Marktes
  • Einstellbare Kanalparameter, hohe Anpassungsfähigkeit
  • Flexiblere Einstellungen für mehrere Zeitrahmen

Risiken

  • Eine übermäßig aggressive Verfolgung kann das Verlustrisiko erhöhen
  • Falsche Kanalparameter-Einstellungen führen zu weniger oder mehr falschen Signalen
  • Erfordert starke Programmierkenntnisse, um Parameter anzupassen

Verbesserung:

  • Der ATR-Multiplikator wird entsprechend auf eine niedrigere Spurengröße reduziert.
  • Optimieren Sie die Parameter, um die beste Kombination zu finden
  • Hinzufügen einer Stop-Loss-Strategie zur Verringerung von Verlusten pro Handel

Optimierungsrichtlinien

  • Hinzufügen anderer Indikatoren für Filter für zuverlässigere Signale
  • Hinzufügen einer Stop-Loss-Strategie zur Risikominderung
  • Parameteroptimierung durchführen, um das optimale zu finden
  • Optimierung der Ein- und Ausstiegszeiten zur Verbesserung der Gewinnrate

Zusammenfassung

Im Großen und Ganzen ist dies eine anständige Trendverfolgungsstrategie. Sie passt sich dynamisch an den Handel an und vermeidet Höhen und Verkaufstief. Mit Parameteroptimierung und angemessenen Verbesserungen können die Vorteile der Strategie weiter verbessert und die Risiken reduziert 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



Mehr