Die Super ATR Trend Following Strategie ist eine auf dem ATR-Indikator basierende Trend Following-Strategie. Sie verwendet den ATR-Indikator zur Messung der Marktvolatilität und setzt Stop Loss auf der Grundlage mehrerer ATRs, um Trends zu verfolgen.
Die Strategie berechnet zunächst den ATR-Indikator, der der gleitende Durchschnitt der Preisvolatilität in den letzten N Tagen ist, um Marktrisiko und Volatilität darzustellen.
Anschließend werden die oberen und unteren Bands auf der Grundlage des ATR-Wertes multipliziert mit einem Faktor berechnet, d. h.:close - Multiplier * ATR
für den oberen Band;close + Multiplier * ATR
Dies bildet einen ATR-basierten Trendkanal.
Wir beurteilen dann, ob der aktuelle Preis durch das obere oder untere Band des Kanals bricht. Wenn der Preis durch das obere Band bricht, wird er als Eintritt in einen Abwärtstrend beurteilt; wenn der Preis durch das untere Band bricht, wird er als Eintritt in einen Aufwärtstrend beurteilt. Wenn es einen Trendbruch gibt, machen wir den entsprechenden Kauf und Verkauf.
Darüber hinaus hat die Strategie ein Handelszeitrahmen festgelegt, in dem nur im angegebenen Datumszeitrahmen gehandelt wird.
Diese Indikator-Kanal-Trend-Folge-Strategie hat folgende Vorteile:
Im Allgemeinen handelt es sich hierbei um einen einfachen und praktischen Trend nach einer Strategie, die Risiken wirksam kontrollieren und gute Renditen erzielen kann.
Diese Strategie birgt auch einige Risiken:
Um diese Risiken zu kontrollieren, können wir folgende Maßnahmen ergreifen:
Diese Strategie kann weiter optimiert werden:
Diese Optimierungen können die Stabilität und Rentabilität der Strategie weiter verbessern.
Insgesamt ist dies ein sehr praktischer Trend-Folge-Strategie. Es baut einen anpassungsfähigen Kanal mit ATR-Indikator und bestimmt Einträge durch Kanal-Breakouts. Die Strategie ist einfach und effektiv, um Risiken zu kontrollieren, geeignet für die Verfolgung von mittelfristigen Trends. Wir haben auch weitere Risikokontrolle und Optimierungsvorschläge vorgeschlagen, um die Strategie robuster zu machen.
/*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