Bidirektionale Supertrend-Strategie


Erstellungsdatum: 2023-10-08 15:02:45 zuletzt geändert: 2023-10-08 15:02:45
Kopie: 0 Klicks: 676
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie beurteilt die Richtung des aktuellen Trends anhand der Berechnung des ATR-Indikators für Auf- und Abwärtstrends und gibt Kauf- und Verkaufssignale. Bei einem Aufwärtstrend ist der Kurs hoch, bei einem Abwärtstrend ist er niedrig.

Strategieprinzip

  1. Berechnung des ATR-Wertes, der die durchschnittliche Bandbreite der Preisschwankungen anzeigt
  2. Auf- und Unterbahnlinie multipliziert mit einer Multiplikation der ATR-Werte
  3. Beurteilung der Beziehung zwischen dem Preis und dem Trend und Bestimmung der Richtung der Tendenz
    • Wenn die Preise über der Spur sind, ist der Trend zu bullish.
    • Wenn die Preise unterhalb der Unterbahn sind, ist die Tendenz nach unten
  4. Geben Sie Kauf- und Verkaufssignale bei Trendwechsel
    • Wenn ein Abwärtstrend zu einem Aufwärtstrend wird, gibt ein Kaufsignal in der Nähe der Oberbahn
    • Wenn ein bullisher Trend zu einem bearisher Trend wird, geben Sie ein Verkaufssignal in der Nähe der Unterbahn
  5. Visuelle Anzeige von Auf- und Abwärtsbewegungen, Trendrichtung und Kauf- und Verkaufssignalen

Analyse der Stärken

  • Mit dem ATR-Indikator können Trends beurteilt werden und die richtigen Parameter für die Marktschwankungen eingestellt werden, so dass die Auf- und Abgleise besser an die Markttrends angepasst werden können.
  • Mit dem Durchbruch von Auf- und Abwärtsbahnen kann die Trendwende erfasst werden.
  • Filtersignale in Kombination mit Trends, um falsche Marktdurchbrüche zu vermeiden
  • Die Anzeige der Signals auf und ab der Bahn ist auf den ersten Blick sichtbar.

Risikoanalyse

  • ATR-Parameter, die zu groß oder zu klein eingestellt sind, können die Auf- und Abwärtslinie vom Preis ablenken und den Trend nicht effektiv verfolgen
  • Wenn die Parameter zu groß sind, gibt es mehr Falschsignale; wenn die Parameter zu klein sind, wird das Signal verzögert.
  • Die Umkehrzeit ist nicht genau, und es kann zu Verlusten kommen, wenn die Umkehrposition eröffnet wird
  • Strategie-Signalfilter in Kombination mit anderen Indikatoren zur Verringerung des Risikos von Arbitrage

Optimierungsrichtung

  • Dynamische Optimierung der ATR-Zyklusparameter kann in Betracht gezogen werden, um den Auf- und Abstieg besser auf die Marktschwankungen abzustimmen
  • Strategien zur Parameteranpassung für unterschiedliche Zyklen verschiedener Sorten
  • Trends können in Kombination mit anderen Indikatoren beurteilt werden, z. B. durch die Bestätigung von erhöhten Mengen
  • Die Parameter-Einstellungen können durch maschinelle Lerntechnik optimiert werden

Zusammenfassen

Die Strategie implementiert insgesamt die Idee, einen beidseitigen Trend anhand des ATR-Indikators zu beurteilen, ein Kauf- und Verkaufssignal durchbrechen und dann in Kombination mit der Trendrichtung filtern, um falsche Signalstörungen zu vermeiden. Durch die Parameteranpassung kann die Strategie an verschiedene Marktumgebungen angepasst werden. Es besteht jedoch auch ein gewisses Risiko, das weiter optimiert werden muss.

Strategiequellcode
/*backtest
start: 2022-10-01 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

TradeId = "RVG"

InitCapital = 1000
InitPosition = 1000
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true

//@version=4
// strategy("Supertrend RG", overlay = true,process_orders_on_close=true,commission_type=strategy.commission.percent,commission_value=InitCommission,
//  currency=currency.USD,initial_capital=InitCapital,default_qty_type=strategy.cash, default_qty_value=InitPosition, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick,pyramiding=InitPyramidMax)

//
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2018, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2100, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? 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.green)
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.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
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.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=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)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


strategy.entry(TradeId + " Long", true, when=buySignal[1] and time_cond)
strategy.entry(TradeId + " Short", false, when=sellSignal[1] and time_cond)