
Die V-basierte Umkehr-SMA-Strategie bildet die VI+- und VI-Kurve, indem sie die absolute Differenz zwischen dem 14-Tage-Höchstwert und dem Vortags-Höchstwert und dem 14-Tage-Höchstwert und dem Vortags-Höchstwert berechnet und anschließend den 14-Tage-Simple Moving Average berechnet.
Die zentralen Indikatoren der Strategie sind VI+ und VI−. VI+ entspricht der Mehrkopfkraft, VI− der Leerkopfkraft. Die Berechnungsformel lautet:
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 die Erschütterungen der Kurve zu entfernen, wurden jeweils 14-Tage-Simple Moving Averages für VI+ und VI- berechnet, die SMA ((VI+) und SMA ((VI-) ≠ ergeben, wenn ein Mehrkopfsignal erzeugt wird, wenn SMA ((VI+) durch SMA ((VI-) getragen wird; wenn ein Leerkopfsignal erzeugt wird, wenn SMA ((VI-) durch SMA ((VI+) getragen wird.
Darüber hinaus wird die Strategie in Kombination mit den Aufwärts- und Abwärtszuständen von VI+ und VI- verwendet, um Trends zu beurteilen und so zu filtern, indem sie nur mehr macht, wenn der Trend nach unten geht, und leer ist, wenn der Trend nach oben geht.
Die Strategie kombiniert Trend-Status und Gold-Fork-Death-Fork-VI-Indikator, um die False-Signal-Filterung zu verbessern und die Gewinnwahrscheinlichkeit zu erhöhen. Im Vergleich zu einfachen Moving-Average-Strategien ist das Durchbruchsignal zuverlässiger.
Es gibt zwei große Risiken bei dieser Strategie:
Der VI-Indikator erzeugt in bestimmten Perioden falsche Signale. Die Kombination von Trendfilterung und Stop-Loss ist erforderlich, um das Risiko zu kontrollieren.
Markte mit hohen Transaktionsgebühren und Slip-Point-Kosten sind für diese Strategie nicht geeignet und reduzieren den Gewinnspielraum erheblich.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung der Periodiparameter für den Indikator VI, um die optimale Kombination von Parametern zu finden.
Mit Hilfe von maschinellen Lernmethoden werden fehlerhafte Signale automatisch erkannt und die Signalqualität verbessert.
Die Optimierung der Ausstiegsmechanismen in Kombination mit Stop-Loss- und Geldmanagement, um die Verluste bei einzelnen Transaktionen zu kontrollieren.
Optimierung der Handelsvarianten und Auswahl von Märkten mit niedrigeren Handelskosten.
Die SMA-Strategie, die auf V-Rückkehrindikatoren basiert, ist eine zuverlässige Trendverfolgungsstrategie, die den Zeitpunkt für den Kauf und Verkauf durch die Berechnung von VI+ und VI-Indikatoren in Verbindung mit der Trendsituation bestimmen kann. Die Strategie hat den Vorteil, dass sie eine gute Signalqualität hat und Geräusche effektiv filtert.
/*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)