Basierend auf einer Volatilitätstrend-Tracking-Strategie


Erstellungsdatum: 2024-02-18 10:07:29 zuletzt geändert: 2024-02-18 10:07:29
Kopie: 0 Klicks: 538
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf einer Volatilitätstrend-Tracking-Strategie

Überblick

Die Strategie beurteilt die Preisentwicklung und den Überkauf durch den WaveTrend-Indikator, kombiniert mit dem RSI-Indikator, filtert die Signale und nutzt die Trendverfolgung, um die Überkauf-Überverkaufsposition umzukehren.

Strategieprinzip

Die Strategie verwendet die WaveTrend-Indikator, um die Richtung der Preisentwicklung zu bestimmen. Die WaveTrend-Indikator basiert auf der Verbesserung des Rainbow-Indikators, um die Richtung der Preisentwicklung zu bestimmen, indem die Differenz zwischen der Heikin-Ashi-Mittellinie und dem Preis-Absolute berechnet wird.

Die WaveTrend-Formel in der Strategie lautet:

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

Dabei ist esa die berechnete Heikin-Ashi-Mittellinie, d der Mittelwert der Differenz zwischen der Heikin-Ashi-Mittellinie und dem Preis-Absolute.

Der RSI-Indikator wird verwendet, um zu überkaufen und zu verkaufen. Die Berechnungsformel für den RSI im Code lautet:

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 liegt zwischen 0 und 100, über 70 sind Überkaufszonen und unter 30 sind Überverkaufszonen.

Wenn der RSI unter 25 liegt, ist der WaveTrend unter 60 ein Überverkaufssignal. Wenn der RSI über 75 liegt, ist der WaveTrend über 60 ein Überkaufssignal.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Der WaveTrend-Indikator kann die Richtung der Preisentwicklung genau und zuverlässig bestimmen.
  2. Der RSI-Filter verhindert unnötige Transaktionen und erhöht die Gewinnquote.
  3. Die Verwendung von Trend-Tracking-Methoden ermöglicht die maximale Nutzung von Preistrends.
  4. Die Strategie ist klar und verständlich, die Parameter sind flexibel eingestellt und an die verschiedenen Sorten und Märkte angepasst.
  5. Strategie ist einfach zu implementieren, leicht in der Praxis zu verifizieren und die Rahmenbedingungen zu optimieren.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der WaveTrend und der RSI sind beide etwas zurückgeblieben und könnten den Preiswendepunkt verpassen.
  2. Trotz der Filterbedingungen kann es zu Fehlsignalen bei Erschütterungen kommen.
  3. Die Strategie zur Verfolgung von Stop-Losses ist noch nicht perfektioniert und kann einzelne Verluste nicht wirksam kontrollieren.
  4. Es ist wichtig, dass die Parameter angemessen mit den Merkmalen der Sorte und der Handelsfrequenz abgestimmt werden.

Gegenmaßnahmen:

  1. In Kombination mit zusätzlichen Beurteilungsindikatoren wird die Signalgenauigkeit optimiert.
  2. Ein Stop-Loss-Strategien, um einzelne Verluste zu kontrollieren.
  3. Suche nach der optimalen Kombination von Parametern und Anpassung der Strategie an die Marktvarianten.

Optimierungsrichtung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Ersetzen oder erhöhen Sie die Judgment-Indikatoren, um die Genauigkeit des Signals zu optimieren. Zum Beispiel die Hinzufügung von MACD, KD usw.

  2. Optimierung der Parameter-Einstellungen für verschiedene Handelsarten. Zum Beispiel Anpassung der Glättungs-Zyklus, um die beste Kombination von Parametern zu finden.

  3. Einschließen Sie eine Strategie, die den Verlust verfolgt, um den Einzelschaden effektiv zu kontrollieren, z. B. den Restprozentsatz, den mobilen Stop usw.

  4. Berücksichtigen Sie verschiedene Anlagerungsstrategien, z. B. die Verwendung von Martingale-Anlagerungen anstelle von ursprünglich festgelegten Mengen.

  5. Optimierung der Anpassungsbereichsparameter und Suche nach optimalen Parametern zur Verbesserung der Beurteilungsgenauigkeit.

Zusammenfassen

Die Strategie hat eine klare Gesamtkonzeption, nutzt Indikatoren für die Volatilität, um Preistrends zu ermitteln, und filtert effektiv Noise-Trading-Signale. Die Strategie hat einen großen Optimierungsraum und kann aus mehreren Blickwinkeln verbessert werden, um die Strategie stabiler und zuverlässiger zu machen. Die Optimierung kann durch Parameteranpassung an verschiedene Handelsarten angepasst werden und lohnt sich für weitere Tests und Tests.

Strategiequellcode
/*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()