Strategie zur Verfolgung von Volatilitätstrends

Schriftsteller:ChaoZhang, Datum: 2024-02-18 10:07:29
Tags:

img

Übersicht

Diese Strategie verwendet den WaveTrend-Indikator, um Preistrends und Überkauf/Überverkaufssituationen zu bestimmen.

Strategie Logik

Die Strategie verwendet den WaveTrend-Indikator zur Bestimmung der Kursentwicklung. Der WaveTrend-Indikator wird auf der Grundlage des Regenbogen-Indikators verbessert. Er beurteilt die Kursentwicklung, indem er die Differenz zwischen dem gleitenden Durchschnitt von Heikin-Ashi und dem absoluten Wert des Preises berechnet. Er erzeugt Handelssignale, indem er den RSI-Indikator kombiniert, um Überkauf/Überverkaufssituationen zu bestimmen.

Insbesondere lautet die WaveTrend-Formel in der Strategie:

esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10) 
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

Wo esa der berechnete gleitende Heikin-Ashi-Durchschnitt ist, d der Mittelwert der Differenz zwischen dem gleitenden Heikin-Ashi-Durchschnitt und dem absoluten Preiswert. ci der sogenannte adaptive Bereich, der die Volatilität der Preise widerspiegelt. wt der gleitende Durchschnitt von ci, der die Kursentwicklung bestimmt und der wichtigste Indikator für Long und Short ist.

Der RSI-Indikator wird zur Bestimmung von Überkauf-/Überverkaufssituationen verwendet.

rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) 

Der Standardwert beträgt 0-100. Über 70 ist Überkauf und unter 30 ist Überverkauf.

In Kombination mit diesen beiden Indikatoren wird, wenn der RSI unter 25 und der WaveTrend unter -60 liegt, überverkauft, um lang zu gehen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Der WaveTrend-Indikator kann die Kursentwicklungsrichtung genau und zuverlässig bestimmen.
  2. RSI-Filter können unnötige Trades vermeiden und die Gewinnrate verbessern.
  3. Die Trendverfolgungsmethode kann die Gewinne aus dem Erfassen von Preistrends maximieren.
  4. Die Strategieidee ist einfach und klar, die Parameter lassen sich flexibel an verschiedene Produkte und Märkte anpassen.
  5. Einfach zu implementieren und im Live-Handel zu testen, gut für die weitere Optimierung.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Sowohl WaveTrend als auch der RSI haben eine gewisse Verzögerung, können Preisumkehrpunkte verpassen.
  2. Trotz der Filter können in seitlichen Märkten immer noch falsche Signale auftreten.
  3. Fehlen einer wirksamen Stop-Loss-Methode zur Kontrolle einzelner Verluste.
  4. Eine angemessene Parameteranpassung muss den Merkmalen und der Handelsfrequenz entsprechen.

Lösungen:

  1. Hinzufügen von Indikatoren für Kombinationsoptimierungen zur Verbesserung der Signalgenauigkeit.
  2. Hinzufügen von Stop-Loss-Strategien zur Kontrolle von Einzelverlusten.
  3. Finden Sie optimale Parameterkombinationen, um die Strategie anzupassen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Änderung oder Hinzufügung von Beurteilungsindikatoren zur Verbesserung der Signalgenauigkeit, z. B. MACD, KD usw.

  2. Optimierung der Parameter-Einstellungen für die Anpassung verschiedener Produkte, z. B. Anpassung der Gleichlaufzeiten.

  3. Für die Berechnung der Risikopositionen werden die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 ermittelt.

  4. Betrachten Sie verschiedene Pyramidenstrategien, z.B. Martingale anstelle einer festen Menge.

  5. Optimieren Sie die Adaptivbereichsparameter, um die Urteilsgenauigkeit zu verbessern.

Schlussfolgerung

Die Gesamtidee der Strategie ist klar, wobei Volatilitätsindikatoren verwendet werden, um Preistrends zu bestimmen und Lärm effektiv zu filtern. Es gibt Raum für Optimierungen in mehreren Aspekten, um die Strategie robuster zu machen. Durch Parameter-Tuning kann sie an verschiedene Produkte angepasst werden und lohnt sich weitere Live-Tests.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Mehr