Trendverfolgungsstrategie auf Basis dynamischer Pivotbands

Schriftsteller:ChaoZhang, Datum: 2023-12-26 11:57:20
Tags:

img

Übersicht

Diese Strategie berechnet die jüngsten höchsten und niedrigsten Preise über einen bestimmten Zeitraum, kombiniert mit dem aktuellen Preis, um eine dynamische mittlere Linie zu bilden. Der rote Abwärtskanal und der grüne Aufwärtskanal werden dann auf der Grundlage der jüngsten Volatilität generiert. Die drei Kanallinien bilden einen handelbaren Bereich. Wenn sich der Preis den Kanalgrenzen nähert, werden umgekehrte Operationen durchgeführt, die auf Gewinne zurück zur mittleren Linie abzielen. In der Zwischenzeit gibt es eine Trendberechnung innerhalb der Strategie, um Trades gegen den Trend zu filtern und zu vermeiden, dass sie vom großen Trend zerstört werden.

Strategie Logik

  1. Berechnung der dynamischen Mittellinie mit dem jüngsten Höchstpreis, dem niedrigsten Preis und dem aktuellen Schlusskurs
  2. Erstellen dynamischer Bands basierend auf ATR und Multiplikator, Breitenänderungen mit Marktvolatilität
  3. Gehen Sie lang, wenn der Preis vom unteren Band abprallt, gehen Sie kurz, wenn er vom oberen Band abprallt
  4. Haben Sie Profit- und Stop-Loss-Logik mit dem Ziel der mittleren Linie
  5. Mittlerweile berechnen Sie den Trendindex, um Trades gegen den Trend zu filtern

Analyse der Vorteile

  1. Dynamische Bands passen sich der Echtzeit-Marktvolatilität an
  2. Hohe Wahrscheinlichkeit eines Trendhandels
  3. Stop-Loss-Steuerelemente für Einzelverluste

Risikoanalyse

  1. Eine unsachgemäße Optimierung der Parameter kann zu Überhandelungen führen
  2. Nicht in der Lage, gegentrendige Geschäfte unter großen Trends vollständig zu beseitigen
  3. Einseitiger Ausbruch kann weiterlaufen.

Optimierungsrichtung

  1. Anpassung der Parameter der Bands an verschiedene Produkte
  2. Feinabstimmung der Trendindexparameter zur Verbesserung der Wahrscheinlichkeit eines Trendhandels
  3. Einführung von Maschinellen Lernelementen für die dynamische Parameteroptimierung

Zusammenfassung

Diese Strategie stützt sich hauptsächlich auf die Schwingungen des Marktes, um Gewinne zu erzielen. Durch die dynamische Erfassung von Preisumkehrpunkten mit den Bands, kombiniert mit dem Trendfilter, kann sie effektiv von der Mittelumkehr profitieren, während Risiken kontrolliert werden. Der Schlüssel liegt in der Parameter-Ausrichtung, um die Bands reaktionsschnell zu machen, aber nicht überempfindlich. Der Trendindex benötigt auch geeignete Perioden, um seine Rolle zu spielen. Mit theoretisch günstigem Trend und Stopps kann diese Strategie durch Optimierung anständige Renditen erzielen.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-12-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Strategy - Bobo PAPATR", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000)

// === STRATEGY RELATED INPUTS AND LOGIC ===
len = input(24, minval=1, title="Pivot Length, defines lookback for highs and lows to make pivots")
length = input(title="ATR lookback (Lower = bands more responsive to recent price action)", type=input.integer, defval=22)
myatr = atr(length)
dailyatr = myatr[1]
atrmult = input(title="ATR multiplier (Lower = wider bands)", type=input.float, defval=3)
pivot0 = (high[1] + low[1]  + close[1]) / 3

// PIVOT CALC
h = highest(len)
h1 = dev(h, len) ? na : h
hpivot = fixnan(h1)
l = lowest(len)
l1 = dev(l, len) ? na : l
lpivot = fixnan(l1)
pivot = (lpivot + hpivot + pivot0) / 3
upperband1 = (dailyatr * atrmult) + pivot
lowerband1 = pivot - (dailyatr * atrmult)
middleband = pivot

// == TREND CALC ===
i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually
i2=input(20, "Slow Period", minval=1)
i3=input(5, "Fast Period", minval=1)
i4=input(3, "Smoothing Period", minval=1)
i5=input(4, "Signal Period", minval=1)
i6=input(50, "Extreme Value", minval=1)
hiDif = high - high[1]
loDif = low[1] - low
uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0
dDM =  loDif > hiDif and loDif > 0 ? loDif : 0
ATR = rma(tr(true), i1)
DIu = 100 * rma(uDM, i1) / ATR
DId = 100 * rma(dDM, i1) / ATR
HLM2 =  DIu - DId
DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) /  ema(ema(ema(abs(HLM2), i2), i3), i4)
signal = ema(DTI, i5)


// === RISK MANAGEMENT INPUTS ===
inpTakeProfit   = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3])
exitLong = (high > middleband)
strategy.entry(id = "Long", long = true, when = enterLong) 
strategy.close(id = "Long", when = exitLong)

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3])
exitShort = (low < middleband)
strategy.entry(id = "Short", long = false, when = enterShort)
strategy.close(id = "Short", when = exitShort)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss)

// === CHART OVERLAY ===
plot(upperband1, color=#C10C00, linewidth=3)
plot(lowerband1, color=#23E019, linewidth=3)
plot(middleband, color=#00E2E2, linewidth=3)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Mehr