Strategie zur Umkehrung abnormaler Preisschwankungen


Erstellungsdatum: 2023-10-11 16:03:36 zuletzt geändert: 2023-10-11 16:03:36
Kopie: 1 Klicks: 689
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie berechnet die Standarddifferenz des Preises, um zu beurteilen, ob ein außergewöhnlich großer Preiswechsel vorliegt. Wenn ein außergewöhnlich großer Preiswechsel vorliegt, wird als Chance für eine Preisumkehr beurteilt und eine Umkehrung durchgeführt.

Grundsätze

Die Strategie basiert hauptsächlich auf zwei Indikatoren:

  1. Der VixFix-Indikator berechnet die Standardabweichung der Preise innerhalb eines bestimmten Zeitraums, um festzustellen, ob die Preise außergewöhnlich schwanken. Die Berechnungsmethode ist:
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100 
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)  
lowerBand = midLine - sDev
upperBand = midLine + sDev

Die WVF ist die Preisfluktuationsrate, die sDev ist die Standardabweichung, die MidLine ist die Durchschnittslinie, die LowerBand und die UpperBand sind die Untergrenzen und die Obergrenzen. Wenn der Preis die Obergrenze überschreitet, wird eine außergewöhnliche Fluktuation vermutet.

  1. Der RSI-Indikator ist ein Indikator, der die relative Stärke und Schwäche von Preisen berechnet, um zu bestimmen, wann die Preise sich umdrehen.
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 bestimmten Wert liegt, bedeutet dies, dass der Preis überverkauft ist und möglicherweise eine Bounce auftritt. Wenn der RSI einen bestimmten Wert überschreitet, bedeutet dies, dass der Preis überkauft ist und möglicherweise zurückgeht.

Ein- und Ausreise

Die Ein- und Ausstiegslogik der Strategie lautet wie folgt:

Eintritt in eine Mehrposition: Eintritt in eine Mehrposition, wenn der Preis die Obergrenze überschreitet oder die Volatilität die Schwelle überschreitet und der RSI unter einem bestimmten Wert liegt.

Eintritt in eine leere Position: Wenn der Preis die Obergrenze überschreitet oder die Volatilität die Schwelle überschreitet und der RSI einen bestimmten Wert überschreitet, wird ein Leerlauf durchgeführt.

Ausstiegsbedingung: Platzierung der Position, wenn die Position in die entgegengesetzte Richtung zur K-Linie-Einheit geöffnet wird.

Vorteile

  • Die Statistiken über außergewöhnliche Preisschwankungen werden genutzt, um zu bestimmen, wann sich die Preise umdrehen.
  • In Kombination mit dem RSI kann die Genauigkeit des Eintritts verbessert werden.
  • Die Verwendung der Breaking Standard Differenz als Einstiegssignal reduziert die Wahrscheinlichkeit, dass ein Spiel verpasst wird.
  • Die Verwendung von Entity Reversal als Stop-Loss-Methode kann zu einem schnellen Stop-Loss führen und die Verluste senken.

Die Gefahr

  • Die Untergrenze für die Standarddifferenz kann angepasst werden und erfordert Optimierungsparameter.
  • Ein Überschreiten der unteren Standardabweichung bedeutet nicht unbedingt eine Rückkehr, es besteht die Gefahr, eingeschlossen zu werden.
  • Die RSI-Parameter müssen optimiert werden, was zu einer ungenauen Signalpräzision führen kann.
  • Die Einheitsrichtung kann zu radikal sein, um den Stop-Loss zu bestimmen und die Parameter anzupassen.

Optimierung

  • Optimierung der Periodiparameter für die Berechnung von Standardabweichungen, um außergewöhnliche Preisschwankungen besser einzufangen.
  • Optimieren Sie die Parameter des RSI, um bessere Überkauf- und Überverkaufskriterien zu finden.
  • Versuchen Sie es mit anderen Indikatoren wie KDJ, MACD und anderen, um die Umkehrzeit zu bestimmen.
  • Optimierung der Stop-Loss-Methode und Einstellung der Preiskorrektur als Stop-Loss-Maßstab.

Zusammenfassen

Die Strategie ermittelt die Standarddifferenz der Preisschwankungen, um festzustellen, ob ein außergewöhnlicher Kurswechsel auftritt, um eine Wende zu erfassen. Bei der Einstiegszeit wird der Überkauf-Überverkauf-Zustand des Preises in Verbindung mit dem RSI-Indikator ermittelt, um die Genauigkeit zu verbessern.

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