Die V-Reversal SMA-Strategie berechnet die 14-tägige absolute Differenz zwischen dem höchsten Preis und dem niedrigsten Preis des vorherigen Tages und die 14-tägige absolute Differenz zwischen dem niedrigsten Preis und dem höchsten Preis des vorherigen Tages. Dann berechnet sie ihre 14-tägigen einfachen gleitenden Durchschnitte, um die VI+- und VI-Kurven zu bilden. Ein Kaufsignal wird erzeugt, wenn VI+ über VI überschreitet. Ein Verkaufssignal wird erzeugt, wenn VI- unter VI+ überschreitet.
Die Kernindikatoren dieser Strategie sind VI+ und VI-. VI+ spiegelt eine bullische Dynamik wider, während VI- eine bärische Dynamik.
VMP = SUM(ABS(HIGH - LOW[1]),14)
VMM = SUM(ABS(LOW - HIGH[1]),14)
STR = SUM(ATR(1),14)
VI+ = VMP/STR
VI- = VMM/STR
Um Schwankungen in den Kurven zu beseitigen, werden 14-tägige einfache gleitende Durchschnitte auf VI+ und VI- berechnet, um SMA ((VI+) und SMA ((VI-) zu erhalten. Ein bullisches Signal wird erzeugt, wenn SMA ((VI+) über SMA ((VI-) kreuzt. Ein bärisches Signal wird erzeugt, wenn SMA ((VI-) unter SMA ((VI+) kreuzt.
Darüber hinaus kombiniert die Strategie auch den Aufwärts- und Abwärtsstatus von VI+ und VI- um den Trend zu beurteilen und Signale auszufiltern, indem sie nur lang geht, wenn der Trend abwärts ist, und nur kurz geht, wenn der Trend nach oben ist.
Durch die Kombination von Trendstatus und goldenem/toten Kreuz des VI-Indikators kann diese Strategie falsche Signale effektiv filtern und die Rentabilität verbessern.
Die wichtigsten Risiken dieser Strategie sind:
Der Indikator VI kann in bestimmten Perioden irreführende Signale erzeugen.
Märkte mit hohen Handelskosten und Schwankungen eignen sich nicht für diese Strategie, da sie die Gewinnspanne erheblich reduzieren würde.
Die Strategie kann in folgenden Aspekten optimiert werden:
Optimieren Sie die Parameter des VI-Indikators, um die beste Parameterkombination zu finden.
Verwenden Sie maschinelle Lernmethoden, um irreführende Signale automatisch zu identifizieren und die Signalqualität zu verbessern.
Optimierung der Exit-Mechanismen mit Stop-Loss und Geldmanagement zur Kontrolle von Einzelhandelsverlusten.
Optimierung der Auswahl der Handelsprodukte mit Schwerpunkt auf Märkten mit niedrigeren Handelskosten.
Die V-Reversal SMA-Strategie bestimmt Handelssignale, indem sie die VI+ und VI-Indikatoren berechnet und den Trendstatus kombiniert. Es ist eine relativ zuverlässige Trendfolgestrategie. Seine Stärke liegt in der hohen Signalqualität und der Fähigkeit, Lärm zu filtern.
/*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"}] */ //@version=4 //@author=SIDD //Sidd-Vortex strategy is using Vortex formula to generate 4 signals Bullish1 Bullish2 and Bearish1 Bearish2. //Bullish1 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIM is falling from previous bar smooth VIM //Bullish2 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIP is rising from previous bar smooth VIP //Bearish1 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIP is falling from previous bar smooth VIP //Bearish2 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIM is rising from previous bar smooth VIM //This strategy can be converted into study un-commenting the plotshape and 15th line strategy replace with study and overlay=false strategy(title = "SIDD-Vortex", shorttitle="SIDD-VORTEX", format=format.price, precision=4,overlay=true) period_ = input(14, title="Period", minval=2) len = input(14, minval=1, title="WMA Length") VMP = sum( abs( high - low[1]), period_ ) // sum of absolute current high and previous low with 14 period default VMM = sum( abs( low - high[1]), period_ ) // sum of absolute current low and previous high with 14 period default STR = sum( atr(1), period_ ) //sum of daily atr for 14 days VIP = VMP / STR VIM = VMM / STR simpleMAVIP=wma(VIP, len) smmaVIP = 0.0 smmaVIP := na(smmaVIP[1]) ? simpleMAVIP : (smmaVIP[1] * (len - 1) + VIP) / len // finding the Smoothing average simpleMAVIM=wma(VIM, len) smmaVIM = 0.0 smmaVIM := na(smmaVIM[1]) ? simpleMAVIM : (smmaVIM[1] * (len - 1) + VIM) / len // finding the Smoothing average risingVIP = rising(smmaVIP, 1) fallingVIP = falling(smmaVIP, 1) lineColorVIP = smmaVIP > 0.95 and risingVIP ? color.lime : smmaVIP > 0.95 ? #d65240 : smmaVIP < 0.95 and fallingVIP ? color.red : color.olive risingVIM = rising(VIM, 1) fallingVIM = falling(VIM, 1) lineColorVIM = smmaVIM > 0.95 and risingVIM ? color.red : smmaVIM > 0.95 ? color.olive : smmaVIM < 0.95 and fallingVIM ? color.lime : #d65240 plot(VIP, title="VI +", color=lineColorVIP) plot(VIM, title="VI -", color=lineColorVIM) longCondition = crossover(smmaVIP,smmaVIM) shortCondition = crossover(smmaVIM,smmaVIP) if (longCondition and fallingVIM) strategy.entry("Bullish1", strategy.long) if (shortCondition and fallingVIP) strategy.entry("Bearish1", strategy.short) if (longCondition and risingVIP) strategy.entry("Bullish2", strategy.long) if (shortCondition and risingVIM) strategy.entry("Bearish2", strategy.short) //plotshape(longCondition and fallingVIM, color=color.lime, location=location.belowbar, style=shape.triangleup,size= size.large,text="Bullish",offset=0,textcolor=color.white) //plotshape(longCondition and risingVIP, color=color.lime, location=location.belowbar, style=shape.labelup,size= size.large,text="Bullish",offset=0,textcolor=color.white) //plotshape(Diff > 0 and direction>0, color=color.lime, location=location.belowbar, style=shape.arrowup,size= size.normal,offset=0) //plotshape(shortCondition and fallingVIP , color=color.red, location=location.abovebar, style=shape.triangledown, size= size.large,text="Bearish",offset=0,textcolor=color.white) //plotshape( shortCondition and risingVIM , color=color.red, location=location.abovebar, style=shape.labeldown, size= size.large,text="Bearish",offset=0,textcolor=color.white) //band1 = hline(1.0 , title="Upper Line", linestyle=hline.style_dashed, linewidth=3, color=color.red) //band0 = hline(0.5, title="Lower Line", linestyle=hline.style_dashed, linewidth=3, color=color.lime) //fill(band1, band0, color=color.purple, transp=70)