Strategie zur Umkehrung der durchschnittlichen Preisschwankungen

Schriftsteller:ChaoZhang, Datum: 2023-10-11 16:03:36
Tags:

Übersicht

Diese Strategie ermittelt Preisumkehrchancen, indem sie die Standardabweichung der Preisvolatilität berechnet.

Grundsätze

Die Strategie setzt auf zwei Hauptindikatoren:

  1. VixFix-Indikator: Berechnet die Standardabweichung des Preises über einen bestimmten Zeitraum, um festzustellen, ob es eine anomale Preisvolatilität gibt.
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl) 
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev 
upperBand = midLine + sDev

Bei wvf handelt es sich um die Preisvolatilität, bei sDev um die Standardabweichung, bei midLine um die Durchschnittslinie, bei lowerBand und upperBand um die unteren und oberen Grenzlinien.

  1. RSI-Indikator: Berechnet den Relative Strength Index des Preises, um den Zeitpunkt der Preisumkehr zu bestimmen.
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7) 
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

Wenn der RSI unter einem Schwellenwert liegt, zeigt er einen Überverkaufstatus und einen potenziellen Rückschlag an. Wenn der RSI einen Schwellenwert überschreitet, zeigt er einen Überkaufstatus und einen potenziellen Rückschlag an.

Einreise und Ausreise

Die Ein- und Ausstiegslogik lautet:

Long-Entry: Wenn der Preis die Obergrenze überschreitet oder die Volatilität den Schwellenwert überschreitet und der RSI unter einem Wert liegt, gehen Sie lang.

Kurzer Einstieg: Wenn der Preis die Obergrenze überschreitet oder die Volatilität den Schwellenwert überschreitet und der RSI einen Wert überschreitet, gehen Sie kurz.

Ausgang: Wenn die Leibrichtung des Leuchters der Positionrichtung entgegengesetzt ist, schließt er die Position.

Vorteile

  • Verwendet statistische Eigenschaften der anomalen Preisvolatilität, um die Preisumkehrung mit breiter Abdeckung zu ermitteln.
  • Die Kombination mit dem RSI zur Beurteilung von Überkauf/Überverkauf verbessert die Eingangsgenauigkeit.
  • Wenn man das unteren Abweichungsband als Einstiegssignal bricht, verringert man die fehlenden Chancen.
  • Die Umkehrung des Kerzenkörpers als Stop-Loss realisiert einen schnellen Stop-Loss und reduziert Verluste.

Risiken

  • Das niedrigere Abweichungsband kann für die Parameteroptimierung angepasst werden müssen.
  • Wenn man das untere Band bricht, garantiert das keine Umkehrung, es besteht die Gefahr, eingeklemmt zu werden.
  • RSI-Parameter müssen optimiert werden, falsche Werte führen zu ungenauen Signalen.
  • Der Stoppverlust des Leuchterkörpers ist möglicherweise zu aggressiv, muss angepasst werden.

Optimierungsrichtlinien

  • Optimierung der Berechnungszeit der Standardabweichung zur besseren Erfassung der anomalen Volatilität.
  • Optimieren Sie die RSI-Parameter, um bessere Kriterien für Überkauf/Überverkauf zu finden.
  • Versuchen Sie, andere Indikatoren wie KDJ, MACD zu kombinieren, um den Umkehrzeitpunkt zu bestimmen.
  • Optimieren Sie den Stop-Loss-Mechanismus, setzen Sie den Preisrückgang als Stop-Loss-Benchmark ein.

Schlussfolgerung

Die Strategie erkennt anomale Preisvolatilität durch Berechnung der Standardabweichung der Preisvolatilität, um Umkehrmöglichkeiten zu erfassen. Der RSI wird kombiniert, um den Überkauf/Überverkaufstatus zu beurteilen, um die Einstiegsgenauigkeit zu verbessern. Einfache Leuchterkörperrichtung Stop-Loss wird verwendet. Insgesamt ist die Strategie effektiv, um statistische Daten zur Erkennung von anomaler Volatilität zu verwenden, benötigt jedoch weitere Parameteroptimierung, um die Stabilität zu verbessern. Wenn der Stop-Loss-Mechanismus vernünftigerweise optimiert werden kann, um Verluste zu reduzieren, würde die Strategie noch besser funktionieren.


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

//Noro
//2018

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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
limit = input(40, defval = 40, minval = 2, maxval = 50, title = "RSI Limit")

pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0, minval = 1, maxval = 5, title = "Bollinger Band Standard Devaition Up")
lb = input(50, title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?")
sd = input(false, title="Show Standard Deviation Line?")

fromyear = input(1900, defval = 1900, 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")

//Vix Fix
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph
rangeLow = (lowest(wvf, lb)) * pl

col = wvf >= upperBand or wvf >= rangeHigh ? lime : gray

//RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

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

//Signals
up = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi < limit and close < open
dn = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi > (100 - limit) and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr