Recursive Momentum Trading Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-31 16:56:31
Tags:

img

Übersicht

Diese Strategie ist eine Trend-Folge- und Breakout-Strategie, die auf dem von Alexgrover entwickelten Indikator Recursive Bands basiert.

Strategie Logik

Berechnung des Indikators für rekursive Bands

Der Indikator der rekursiven Bands besteht aus einem oberen Band, einem unteren Band und einer mittleren Linie.

Obergrenze = Max ((vorangegangene Bars Obergrenze, Schließpreis + nVolatilität) Unterer Band = Min(Vorheriger Barunterer Band, Schlusskurs - nVolatilität) Mittellinie = (Oberband + Unterband)/2

Hier ist n ein Skalierungskoeffizient, und die Volatilität kann aus ATR, Standardabweichung, durchschnittlichem wahren Bereich oder einer speziellen RFV-Methode ausgewählt werden.

Handelsregeln

Die Strategie prüft zunächst, ob sich die unteren und die oberen Bands in der gleichen Richtung bewegen, um falsche Ausbrüche zu vermeiden.

Wenn der Preis unterhalb des unteren Bandes bricht, gehen Sie lang. Wenn der Preis über das obere Band bricht, gehen Sie kurz.

Darüber hinaus wird die Stop-Loss-Logik implementiert.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Effiziente Berechnung der Indikatoren unter Verwendung eines rekursiven Rahmens und Vermeidung wiederholter Berechnungen
  2. Flexible Anpassung der Parameter an verschiedene Marktordnungen
  3. Kombination von Trend und Ausbruch, Vermeidung falscher Ausbrüche
  4. Filter für den Momentumzustand sorgen für die Signalqualität

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Falsche Einstellungen von Parametern können zu Überschreitung oder schlechter Signalqualität führen
  2. Bei großen Trendwechseln mit hohen Verlusten konfrontiert
  3. Unzureichende Schlupfkontrolle bei extremen Bewegungen kann Verluste verstärken

Diese Risiken können durch Optimierung der Parameter, Einführung von Stop-Loss, Erhöhung der Schlupfschwelle usw. verwaltet werden.

Optimierungsrichtlinien

Einige Richtungen zur Optimierung der Strategie:

  1. Einbeziehung von Indikatoren über mehrere Zeitrahmen hinweg für die Robustheit
  2. Hinzufügen eines Maschinellen Lernmoduls für die adaptive Parameteroptimierung
  3. Durchführung einer quantitativen Korrelationsanalyse zur Suche nach optimalen Parameterkombinationen
  4. Verwenden Sie Deep Learning zur Prognose von Preisverläufen und zur Verbesserung der Signalgenauigkeit

Schlussfolgerung

Zusammenfassend ist dies eine sehr praktische und effiziente Trend-Folge-Strategie. Sie kombiniert den rekursiven Rahmen für die Recheneffizienz, nutzt Trendunterstützung/Widerstand, um wichtige Trends zu bestimmen, fügt Momentumbedingungen hinzu, um falsche Ausbrüche zu filtern und die Signalqualität zu gewährleisten. Mit angemessener Parameter-Tuning und Risikokontrolle kann sie gute Ergebnisse erzielen. Würdig weiterer Forschung und Optimierung, um sich komplexeren Marktregimen anzupassen.


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

// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)

Mehr