Die Ressourcen sind geladen. Beförderung...

Supertrend-ATR-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-29 11:29:15
Tags:

img

Übersicht

Dies ist eine Strategie, die auf dem Supertrend-Indikator und dem ATR-Indikator basiert. Die Hauptidee dieser Strategie besteht darin, den Supertrend-Indikator zu verwenden, um die aktuelle Markttrendrichtung zu bestimmen und Trades zu tätigen, wenn sich der Supertrend-Indikator ändert. Gleichzeitig verwendet diese Strategie den ATR-Indikator zur Berechnung von Stop-Loss- und Take-Profit-Preisen und berechnet die Positionsgröße basierend auf einem bestimmten Prozentsatz des Kontostandes zur Risikokontrolle.

Strategieprinzip

Die Grundsätze dieser Strategie sind folgende:

  1. Berechnen Sie den Wert des Supertrend-Indikators und erstellen Sie Kauf- oder Verkaufssignale, wenn sich der Supertrend-Indikator ändert.
  2. Der Stop-Loss-Preis ist der aktuelle Preis zuzüglich oder abzüglich des ATR-Wertes multipliziert mit einem Vielfachen, und der Take-Profit-Preis ist der Stop-Loss-Preis multipliziert mit einem Risiko-Rendite-Verhältnis.
  3. Berechnen Sie die Positionsgröße anhand eines bestimmten Prozentsatzes des Kontostandes und des Stop-Loss-Preises, um das Risiko jedes Handels zu kontrollieren.
  4. Wenn ein Kaufsignal erzeugt wird, wird eine Longposition eröffnet, wobei der Stop-Loss-Preis der Preis ist, zu dem das Signal erzeugt wurde, abzüglich des ATR-Wertes multipliziert mit einem Vielfachen, und der Take-Profit-Preis der Preis ist, zu dem das Signal erzeugt wurde, zuzüglich des ATR-Wertes multipliziert mit einem Vielfachen und dann multipliziert mit dem Risiko-Rendite-Verhältnis.
  5. Wenn ein Verkaufssignal generiert wird, wird eine Short-Position eröffnet, wobei der Stop-Loss-Preis der Preis ist, zu dem das Signal generiert wurde, plus der ATR-Wert multipliziert mit einem Vielfachen, und der Take-Profit-Preis der Preis ist, zu dem das Signal generiert wurde, abzüglich des ATR-Wertes multipliziert mit einem Vielfachen und dann multipliziert mit dem Risiko-Rendite-Verhältnis.

Strategische Vorteile

Die Vorteile dieser Strategie sind folgende:

  1. Es kombiniert Trend- und Volatilitätsindikatoren, um Trends effektiv zu erfassen und gleichzeitig das Risiko zu kontrollieren.
  2. Die Positionsgröße wird automatisch auf der Grundlage des Kontostandes und des Risikoniveaus berechnet, ohne dass eine manuelle Anpassung erforderlich ist, wodurch die Umsetzung erleichtert wird.
  3. Die Parameter können flexibel an verschiedene Märkte und Produkte angepasst werden.

Strategische Risiken

Die Risiken dieser Strategie sind wie folgt:

  1. In einem volatilen Markt können häufige Kauf- und Verkaufssignale zu hohen Transaktionskosten und zu Schwankungen führen.
  2. Festgelegte Stop-Loss- und Take-Profit-Verhältnisse können sich möglicherweise nicht an Marktveränderungen anpassen, was zu vorzeitigen Stop-Loss- oder geringen Gewinnen führt.
  3. Die Berechnung der Positionsgröße hängt von der historischen Volatilität ab, die bei plötzlicher Erhöhung der Volatilität zu großen Rückzügen führen kann.

Zur Bekämpfung der oben genannten Risiken können folgende Maßnahmen ergriffen werden:

  1. Hinzufügen von mehr Signalfilterbedingungen zur Verringerung der Handelsfrequenz.
  2. Optimieren Sie die Berechnungsmethode von Stop-Loss und Take-Profit, z. B. durch Verwendung von Trailing Stop-Loss oder Dynamic Take-Profit.
  3. Einführung von Risikokontrollfaktoren in die Positionsberechnung, z. B. Reduzierung von Positionen bei Ausbruch von Volatilität.

Strategieoptimierung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Einführung technischer Indikatoren wie MACD, RSI usw. als Hilfskonditionen für die Beurteilung des Trends und Signalfilterung zur Verbesserung der Signalgenauigkeit.
  2. Optimieren Sie die Parameter des Supertrend-Indikators und des ATR-Indikators für verschiedene Märkte und Produkte, um die beste Parameterkombination zu finden.
  3. Einführung mehrer Risikokontrollfaktoren in die Positionsberechnung, wie maximale Kontoentnahme, maximales Risiko pro Handel usw., um die Robustheit der Strategie zu verbessern.
  4. Zusätzliche Gewinnstrategie, z. B. Teilgewinn, nachläufige Gewinnnahme usw., um Gewinnwachstum zu gewährleisten.

Die oben genannten Optimierungen können die Rentabilität und Stabilität der Strategie verbessern und gleichzeitig ihr Risiko reduzieren und sie an unterschiedliche Marktumgebungen anpassungsfähiger machen.

Zusammenfassung

Diese Strategie kombiniert den Supertrend-Indikator und den ATR-Indikator, um Trends effektiv zu erfassen und gleichzeitig das Risiko zu kontrollieren. Durch die Berechnung der optimalen Positionsgröße ist das Risiko jedes Handels kontrollierbar. Allerdings kann diese Strategie in einem volatilen Markt hohe Transaktionskosten und Drawdowns erzeugen. Durch die Einführung mehrer technischer Indikatoren, die Optimierung von Parametern, das Hinzufügen von Risiko-Kontrollfaktoren und die Verbesserung von Take-Profit-Strategien kann die Leistung dieser Strategie weiter verbessert werden. Insgesamt ist diese Strategie eine einfache und effektive Trend-Folge-Strategie, die für den Einsatz in Trendmärkten geeignet ist.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
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='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', 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='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
//fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)


Mehr