Erfahren Sie, wie Sie ein Handelssystem anhand des Relative Vigor Index entwickeln können
Mohamed Abdelmaaboud | 26 September, 2022
Einführung
Willkommen zu meinem neuen Artikel in unserer Serie, um neue technische Werkzeuge im Detail kennenzulernen und ein einfaches Handelssystem mit diesem Werkzeug zu entwerfen. Es handelt sich um den Indikator Relative Vigor Index (RVI), den wir in den folgenden Themen behandeln werden:
- Relative Vigor Index - Definition
- Relative Vigor Index - Strategie
- Relative Vigor Index - Strategieplan
- Relative Vigor Index - Handelssystem
- Schlussfolgerung
Wir werden die MQL5 (MetaQuotes Language 5) IDE verwenden, um unsere Codes zu schreiben und das MetaTrader 5 Trading Terminal, um unser Handelssystem auszuführen. Ich rate Ihnen, das Gelernte selbst anzuwenden, wenn Sie Ihre Programmierkenntnisse als Anfänger verbessern wollen, denn Übung ist sehr wichtig. Wenn Sie nicht wissen, wie man MetaTrader 5 und MQL5 herunterlädt und verwendet, können Sie das Thema Schreiben von MQL5-Code in MetaEditor aus einem früheren Artikel für mich lesen.
Alle genannten Strategien sind nur für Bildungszwecke, so können Sie feststellen, dass sie brauchen Optimierung und das ist normal, wie das Hauptziel dieses Artikels und diese einfachen Strategien ist es, das wichtigste Konzept dahinter zu lernen. Sie müssen sie also sehr gut testen, bevor Sie sie in Ihrem echten Konto verwenden, um sicherzustellen, dass sie für Ihren Handel nützlich sind.
Haftungsausschluss: Alle Informationen werden in der vorliegenden Form nur zu Informationszwecken bereitgestellt und sind nicht für Handelszwecke oder als Ratschläge gedacht. Die Informationen garantieren keinen Erfolg. Wenn Sie sich dafür entscheiden, diese Materialien auf einem Ihrer Handelskonten zu verwenden, tun Sie dies auf eigenes Risiko und Sie sind allein verantwortlich.
Relative Vigor Index - Definition
In diesem Thema werden wir erfahren, was der Relative Vigor Index (RVI) im Detail ist. Es handelt sich um einen technischen Momentum- und Oszillator-Indikator. Durch den Vergleich des Schlusskurses mit dem Eröffnungskurs misst dieser Indikator die Stärke des Trends. Während des Aufwärtstrends schließt der Schlusskurs höher als der Eröffnungskurs, während des Abwärtstrends schließt der Schlusskurs niedriger als der Eröffnungskurs. Darüber hinaus wurden die Ergebnisse mit Hilfe des einfachen gleitenden Durchschnitts geglättet. Dieser RVI-Indikator schneidet in Trendmärkten besser ab als in Seitwärtsperioden, was seiner Natur entspricht. Wir können feststellen, dass die Berechnung dieses RVI dem stochastischen Oszillator ähnlich ist, aber der RVI vergleicht den Schlusskurs mit dem Eröffnungskurs und der stochastische Oszillator vergleicht den Schlusskurs mit der Kursspanne während eines bestimmten Zeitraums. Wenn wir den RVI manuell berechnen wollen, können wir dies mit den folgenden Schritten tun:
AD = (CLOSE - OPEN) / (HIGH - LOW) * VOL
Wobei:
CLOSE = Schlusskurs
OPEN = Eröffnungskurs
HIGH = Höchstpreis
LOW = Tiefstpreis
Normalerweise erscheint der RVI, den wir verwenden, als zwei Linien mit unterschiedlichen Komponenten in der Berechnung, und im Folgenden wird beschrieben, wie wir sie berechnen können.
1- 1. Zeile der Berechnung:
- Berechnung des Zählers:
MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)
Wobei:
CLOSE = Aktueller Schlusskurs
CLOSE 1, CLOSE 2, CLOSE 3 = Schlusskurse von vor 1, 2 und 3 Perioden
OPEN = Aktueller Eröffnungskurs
OPEN 1, OPEN 2, OPEN 3 = Eröffnungspreise von vor 1, 2 und 3 Perioden
- Berechnung des Nenners:
RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)
Wobei:
HIGH = Letzter Höchstpreis
HIGH, HIGH 2, HIGH 3 = Letzte Höchstpreise von vor 1, 2 und 3 Balken
LOW = Letzter Tiefstpreis
LOW 1, LOW 2, LOW 3 = Letzte Tiefstpreise von vor 1, 2 und 3 Balken
- Berechnen wir die Summe dieser Durchschnittswerte wie folgt:
2- 2. Zeile der Berechnung:
RVI-Signal = (RVI-Durchschnitt + 2 * RVI-Durchschnitt-1 + 2 * RVI-Durchschnitt-2 + RVI-Durchschnitt-3)/6
Jetzt haben wir das Hauptkonzept hinter diesem Indikator verstanden, nachdem wir gelernt haben, wie man ihn manuell berechnet, aber wir müssen das nicht tun, weil er im MetaTrader 5-Handelsterminal berechnet wird und alles, was wir tun müssen, ist, ihn aus den verfügbaren Indikatoren auszuwählen. Im Folgenden wird beschrieben, wie man sie auf dem Chart startet:
Beim Öffnen des MetaTrader 5 Terminals --> Einfügen --> Indikatoren --> Oszillatoren --> Relative Vigor Index
Nachdem wir auf den Relative Vigor Index gedrückt haben, sehen wir das Fenster mit den Parametern wie folgt:
1- Bestimmung der Periodenlänge.
2- Bestimmung Farbe der AD-Linie.
3- Bestimmung des Stils der WPR-Linie.
4- Bestimmung der Linienstärke.
5- Bestimmung der Farbe der Signallinie.
6- Bestimmung der Art der Signallinie.
7- Bestimmung der Dicke der Signallinie.
Nachdem wir alle Parameter bestimmt haben, werden wir feststellen, dass der Indikator wie folgt zu sehen ist:
Wie wir im vorherigen Chart sehen können, ist der RVI-Indikator auf dem Chart gestartet und weist zwei Linien auf, die um die Nulllinie oszillieren.
Relative Vigor Index - Strategie
Nachdem wir das Hauptkonzept des RVI kennengelernt haben, werden wir lernen, wie wir es auf der Grundlage seines Hauptkonzepts durch einfache Strategien anwenden können. Was ich hier noch einmal bestätigen muss, ist sicherzustellen, dass Sie jede Strategie testen, bevor Sie sie auf Ihrem realen Konto verwenden, um sicherzustellen, dass sie für Ihren Handel geeignet und profitabel ist, da das Hauptkonzept hier ist, einfache Strategien nur für Bildungszwecke zu teilen, und es ist normal, dass Sie finden, dass sie Optimierungen benötigen.
- Strategie eins: RVI Crossover - Aufwärtstrend:
Auf der Grundlage dieser Strategie müssen wir während des Aufwärtstrends unter einer bestimmten Bedingung Kauf- und Schließsignale erhalten. Wenn der aktuelle RVI-Wert und der RVI-Signalwert größer als die Nulllinie sind und gleichzeitig der RVI-Wert größer als der Wert des RVI-Signals ist, handelt es sich um ein Kaufsignal. Umgekehrt, wenn der RVI-Wert und der RVI-Signalwert unter Null liegen, während der RVI-Wert gleichzeitig unter dem Wert des RVI-Signals liegt, handelt es sich um ein Schließ-Signal.
Einfach:
RVI-Wert > 0 und RVI-Signalwert > 0 und RVI-Wert > RVI-Signalwert --> Kaufen
RVI-Wert < 0 und RVI-Signalwert < 0 und RVI-Wert < RVI-Signalwert --> Schließen
- Strategie zwei: RVI Crossover - Abwärtstrend:
Auf der Grundlage dieser Strategie müssen wir die entgegengesetzten Signale der vorherigen Crossover (Kreuzen zweier Linien) der Aufwärtstrend-Strategie des RVI erhalten, da wir Verkaufs- und Schließ-Signale bekommen wollen. Wenn der aktuelle RVI-Wert und der aktuelle RVI-Signalwert niedriger als die Nulllinie sind und gleichzeitig der RVI-Wert niedriger als der Wert des RVI-Signals ist, handelt es sich um ein Verkaufssignal. Umgekehrt, wenn der aktuelle RVI-Wert und der aktuelle RVI-Signalwert über die Nulllinie liegen, während der RVI-Wert gleichzeitig über dem aktuellen Wert des RVI-Signals liegt, handelt es sich um ein Schließ-Signal (cover signal).
Einfach:
RVI-Wert < 0 und RVI-Signalwert < 0 und RVI-Wert < RVI-Signalwert --> Verkaufen
RVI-Wert > 0 und RVI-Signalwert > 0 und RVI-Wert > RVI-Signalwert --> Schließen
- Strategie drei: RVI und MA Crossover:
Auf der Grundlage dieser Strategie müssen wir Kauf- und Verkaufssignale auf der Grundlage spezifischer Bedingungen erhalten, da wir ein Kaufsignal erhalten müssen, wenn der Schlusskurs über dem gleitenden 100-Perioden-Durchschnitt liegt und gleichzeitig der aktuelle RVI-Wert größer ist als der aktuelle RVI-Signalwert. Im anderen Szenario müssen wir ein Verkaufssignal erhalten, wenn der Schlusskurs unter dem gleitenden 100-Perioden-Durchschnitt liegt und gleichzeitig der aktuelle RVI-Wert unter dem aktuellen RVI-Signalwert liegt.
Einfach:
Schlusskurs >100- Gleitender Durchschnitt und RVI-Wert > RVI-Signalwert --> Kaufen
Schlusskurs <100- Gleitender Durchschnitt und RVI-Wert < RVI-Signalwert --> Verkaufen
Relative Vigor Index - Strategieplan
Nachdem wir gelernt haben, wie wir den RVI durch unsere erwähnte Strategie nutzen können, werden wir einen Schritt-für-Schritt-Entwurf für jede Strategie erstellen, um uns zu helfen, ein Handelssystem reibungslos zu erstellen.
- Strategie eins: RVI Crossover - Aufwärtstrend:
Nach dieser Strategie müssen wir ein Handelssystem erstellen, das während des Aufwärtstrends Kauf- und Schließsignale gibt, indem es kontinuierlich die folgenden Werte überprüft:
- Der aktuelle RVI-Wert
- Der aktuelle RVI-Signalwert
- Der Null-Level des RVI-Indikators
Wenn der aktuelle RVI-Wert größer als Null ist, der aktuelle RVI-Signalwert größer als der Null ist und der aktuelle RVI-Wert größer als der aktuelle RVI-Signalwert ist, muss das Handelssystem die folgenden Werte als Kommentar auf dem Chart ausgeben:
- Kaufsignal (Buy Signal)
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Im anderen Szenario, wenn der aktuelle RVI-Wert niedriger als Null, der aktuelle RVI-Signalwert niedriger als der Null und der aktuelle RVI-Wert niedriger als der aktuelle RVI-Signalwert ist, muss das Handelssystem die folgenden Werte als Kommentar auf dem Chart ausgeben:
- Schließ-Signal
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Nachfolgend finden Sie eine schrittweise Anleitung für diese Strategie:
- Strategie zwei: RVI Crossover - Abwärtstrend:
Nach dieser Strategie müssen wir ein Handelssystem erstellen, das uns Signale für Leerverkäufe und Deckungen während des Abwärtstrends geben kann, indem wir kontinuierlich die gleichen Werte der vorherigen Strategie überprüfen:
- Der aktuelle RVI-Wert
- Der aktuelle RVI-Signalwert
- Der Null-Level des RVI-Indikators
Die Bedingungen werden jedoch je nach den gewünschten Signalen leicht unterschiedlich sein. Wenn der aktuelle RVI-Wert unter Null liegt, der aktuelle RVI-Signalwert gleichzeitig auch unter dem Null liegt und der RVI-Wert niedriger als der RVI-Signalwert ist, muss das Handelssystem die folgenden Werte als Kommentar auf dem Chart ausgeben:
- Verkaufssignal
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Auf der anderen Seite, wenn der aktuelle RVI-Wert ist höher als die Nulllinie, die aktuelle RVI-Signal Wert ist höher als die Nulllinie zur gleichen Zeit, die RVI-Wert ist höher als die RVI-Signal-Wert, wir brauchen das Handelssystem, um die folgenden Werte als Kommentar auf dem Chart:
- Schließen
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Nachfolgend finden Sie die Blaupause dieses Handelssystems:
- Strategie drei: RVI & MA Crossover
Nach dieser Strategie müssen wir ein Handelssystem erstellen, das Kauf- und Verkaufssignale gibt, indem es kontinuierlich die folgenden Werte überprüft:
- Der Schlusskurs
- Der gleitende 100-Perioden-Durchschnitt (MA)
- Der aktuelle RVI-Wert
- Der aktuelle RVI-Signalwert
Wenn der Schlusskurs höher ist als der 100-Perioden-MA und der aktuelle RVI-Wert höher ist als der aktuelle RVI-Signalwert, muss das Handelssystem die folgenden Werte als Kommentar auf dem Chart ausgeben:
- Kaufsignal (Buy Signal)
- Schlusskurs
- Ma-Wert
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Wenn der Schlusskurs jedoch unter dem 100-Perioden-MA liegt und der aktuelle RVI-Wert niedriger ist als der aktuelle RVI-Signalwert, muss das Handelssystem die folgenden Werte als Kommentar auf dem Chart ausgeben:
- Verkaufssignal (Sell Signal)
- Schlusskurs
- Ma-Wert
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Das Folgenden ist die Blaupause dieser Strategie:
Relative Vigor Index - Handelssystem
Nachdem wir gelernt haben, wie man den RVI durch einfache Strategien und die Erstellung einer Schritt-für-Schritt-Blaupause für jede Strategie verwendet, um uns zu helfen, unser Handelssystem zu erstellen. Nun werden wir für jede der genannten Strategien ein Handelssystem erstellen. Zunächst werden wir ein einfaches Handelssystem erstellen, das den aktuellen RVI-Wert als Kommentar auf dem Chart zurückgibt, und im Folgenden wird der Code zur Erstellung dieses Handelssystems Schritt für Schritt beschrieben.
Erstellung von zwei Arrays für das RVI- und das RVI-Signal mit Hilfe der Funktion double:
double rviArray[]; double rviSignalArray[];
Setzen des AS_SERIES-Flags in Arrays, um einen booleschen Wert (true oder false) zurückzugeben, indem die Funktion „ArraySetAsSeries“ verwendet wird:
ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true);
Definition des RVI mit Hilfe der Funktion „iRVI“, die das Handle des Indikators Relative Vigor Index zurückgibt. Die Parameter sind:
- symbol: Zur Bestimmung des Symbolnamens, wir verwenden „_Symbol“, das aktuelle Symbol des Charts.
- period: Zur Bestimmung des zu nutzenden Zeitraums, wir verwenden „_Period“, der auf den aktuellen Zeitrahmen angewendet wird.
- ma_period: zur Festlegung des Mittelungszeitraums verwenden wir 10.
int rviDef = iRVI(_Symbol,_Period,10);
Wir holen uns die Daten aus dem Puffer des RVI-Indikators mit der Funktion „CopyBuffer“. Die Parameter sind:
- indicator_handle: Wir verwenden die Variable deMarkerDef mit dem vordefinierten Indikator-Handle.
- buffer_num: Dient zur Bestimmung der Nummer des Indikatorpuffers, wir verwenden 0 und 1.
- start_pos: Als Startposition verwenden wir 0, 0.
- count: Bestimmt die kopierende Anzahl, wir benötigen 3, 3.
- buffer[]: Um das zu kopierende Ziel-Array zu bestimmen, wird (rviArray, rviSignalArray) verwendet.
CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray);
Definition der Werte von RVI und RVI-Signal durch Verwendung der Funktion „NormalizeDouble“, um einen Wert vom Typ double zurückzugeben. Die Parameter sind:
- value: zur Bestimmung der normierten Zahl. Wir werden rviArray[0] und rviSignalArray[0].
- digits: zur Bestimmung der Nachkommastellen. Wir werden 3 verwenden.
double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
Wir verwenden die Funktion „Comment“, um den Wert des aktuellen RVI-Indikators als Kommentar auf dem Chart auszugeben.
Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal);
Der vollständige Code sieht also wie folgt aus:
//+------------------------------------------------------------------+ //| Simple RVI.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } //+------------------------------------------------------------------+
Nach dem Kompilieren dieses Codes kann er im Navigator des MetaTrader 5 wie folgt gefunden werden:
Wenn Sie auf den Experten doppelklicken, um ihn im Handelsterminal auszuführen, sehen Sie das Fenster dieses Experten wie das folgende:
Wenn Sie auf „OK“ klicken, nachdem Sie das Häkchen neben „Algo Trading zulassen“ gesetzt haben, wird der Experte wie folgt an den Chart gestartet:
Jetzt sind wir bereit, auf der Grundlage dieses Handelssystems Signale zu generieren. Wir werden also ein Signal wie das folgende erhalten:
In der oberen linken Ecke des Diagramms ist ein Kommentar mit dem aktuellen RVI-Wert zu sehen.
- Strategie eins: RVI Crossover - Aufwärtstrend:
Das Folgende ist der vollständige Code zum Erstellen eines Handelssystems für diese Strategie:
//+------------------------------------------------------------------+ //| RVI Crossover - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Close","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Unterschiede in diesem Code:
Bedingungen der Strategie:
Im Falle eines Kaufsignals:
if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Im Falle eines Schließsignals
if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Close","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Nach dem Kompilieren dieses Codes und der Ausführung auf dem Trading-Terminal in der gleichen Weise, wie beim einfachen RVI-Handelssystem bereits beschrieben, werden wir wie folgt feststellen, dass der Experte auf dem Chart gestartet wurde:
Dann können wir die gewünschten Signale auf der Grundlage dieses Handelssystems wie die folgenden erhalten:
Im Falle eines Kaufsignals:
Wie wir auf dem Chart in der oberen linken Ecke sehen können, haben wir ein Signal mit den folgenden Werten erhalten:
- Kaufsignal (Buy Signal)
- Relativer Vigor-Index-Wert
- RVI-Signalwert
Im Falle eines knappen Signals:
Wie wir auf dem Chart in der oberen linken Ecke sehen können, haben wir ein Signal mit den folgenden Werten erhalten:
- Schlusskurs
- Relativer Vigor-Index-Wert
- RVI-Signalwert
Es ist klar, dass dieses Signal dem entspricht, was wir auf der Grundlage unserer erwähnten Handelsstrategie und ihrer Bedingungen während des Aufwärtstrends benötigen.
- Strategie zwei: RVI Crossover - Abwärtstrend:
Im Folgenden finden Sie den vollständigen Code zur Erstellung eines Handelssystems für diese Handelsstrategie:
//+------------------------------------------------------------------+ //| RVI Crossover - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Short Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Cover","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Unterschiede in diesem Code:
Bedingungen der Strategie:
Im Falle eines Verkaufssignals
if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Short Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Im Falle eines Schließ-Signals (cover);
if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Cover","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Nach dem Kompilieren und Ausführen dieses Codes, wie wir es zuvor gelernt haben, werden wir feststellen, dass der Experte auf dem Chart wie folgt gestartet wurde:
Jetzt sind wir bereit, Signale zu empfangen, die auf dieser Strategie und diesem Handelssystem basieren. Das Folgende sind Beispiele aus dem Testen von Signalen,
Im Falle eines Verkaufssignals:
Wie wir auf dem Chart in der oberen linken Ecke sehen können, haben wir ein Signal mit den folgenden Werten erhalten:
- Verkaufssignal
- Relativer Vigor-Index-Wert
- RVI-Signalwert
Im Falle eines Schließ-Signals (cover):
Wie wir sehen können, haben wir ein Signal mit den folgenden Werten:
- Schließen (cover)
- Relativer Vigor-Index-Wert
- RVI-Signalwert
Jetzt haben wir ein Handelssystem entwickelt, das auf der Strategie des RVI Crossover - Downtrend basiert, um Signale während des Abwärtstrends zu generieren.
- Strategie drei: RVI & MA Crossover:
Im Folgenden finden Sie den vollständigen Code zur Erstellung eines Handelssystems für diese Handelsstrategie:
//+------------------------------------------------------------------+ //| RVI & MA Crossover.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { MqlRates pArray[]; double maArray[]; double rviArray[]; double rviSignalArray[]; int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(maArray,true); ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); CopyBuffer(maDef,0,0,3,maArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); double maVal = NormalizeDouble(maArray[0],3); if(pArray[0].close>maVal && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(pArray[0].close<maVal && rviVal<rviSignalVal) { Comment("Sell Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Unterschiede in diesem Code:
Erstellen von vier Arrays (pArray, maArray, rviArray, rviSignalArray). Wir verwenden den Typ „double“, wie oben beschrieben verwenden, mit Ausnahme von pArray. Wir werden die Funktion MqlRates verwenden, die Informationen über den Preis, das Volumen und den Spread speichert.
MqlRates pArray[]; double maArray[]; double rviArray[]; double rviSignalArray[];
Setzen des AS_SERIES-Flags für die Arrays, um einen booleschen Wert (true oder false) zurückzugeben, indem die Funktion „ArraySetAsSeries“ verwendet wird. Definieren von Daten mit Hilfe der Funktion „CopyRates“, um historische Daten der Struktur MqlRates zu erhalten, ihre Parameter sind:
- symbol_name: Zur Bestimmung des Symbolnamens, wir verwenden „_Symbol“, das aktuelle Symbol des Charts.
- timeframe: Zur Bestimmung des Zeitrahmens, wir werden _Period verwenden, um auf den aktuellen Zeitrahmen angewendet zu werden.
- start_pos: Als Startposition verwenden wir 0.
- count: Bestimmt die zu kopierende Anzahl, wir benötigen 1.
- rates_array[]: Um das zu kopierende Ziel-Array zu bestimmen, wird pArray verwendet.
int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(maArray,true); ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true);
Definieren des RVI mit der Funktion iRVI, wie bereits erwähnt, und des gleitenden Durchschnitts mit der Funktion iMA, um das Handle des Indikators für den gleitenden Durchschnitt zurückzugeben, und die Parameter sind:
- symbol: um den Namen des Symbols zu bestimmen, wir verwenden _Symbol.
- period: Um den Zeitraum des Zeitrahmens zu bestimmen, wir verwenden _Period.
- ma_period: um die Periode des gleitenden Durchschnitts zu bestimmen, wird 100 verwendet.
- ma_shift: um die horizontale Verschiebung zu bestimmen, wir verwenden 0.
- ma_method: um den Typ des gleitenden Durchschnitts zu bestimmen, wir werden den exponentiellen MA verwenden
- applied_price: Als Preistyp verwenden wir die Schlusskurse.
int rviDef = iRVI(_Symbol,_Period,10); int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);
Abrufen von Daten aus dem Puffer der RVI- und MA-Indikatoren mit Hilfe der Funktion „CopyBuffer“.
CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); CopyBuffer(maDef,0,0,3,maArray);
Festlegung der Werte von RVI, RVI-Signal und MA-Wert mit der Funktion NormalizeDouble.
double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); double maVal = NormalizeDouble(maArray[0],3);
Bedingungen der Strategie.
Im Falle eines Kaufsignals:
if(pArray[0].close>maVal && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Im Falle eines Verkaufssignals
if(pArray[0].close<maVal && rviVal<rviSignalVal) { Comment("Sell Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Nachdem wir diesen Code kompiliert und den Experten im Terminal ausgeführt haben, werden wir feststellen, dass der Experte auf dem Chart wie folgt gestartet wurde:
RVI, MA-Weiche gestartet alt
Jetzt können wir generierte Signale auf der Grundlage dieses Handelssystems erhalten, wie die folgenden Beispiele aus dem Test.
Im Falle eines Kaufsignals:
Wie wir im vorherigen Chart in der oberen linken Ecke sehen können, haben wir ein Signal mit den folgenden Werten:
- Kaufsignal (Buy Signal)
- Schlusskurs
- Ma-Wert
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Im Falle eines Verkaufssignals:
Wir haben ein Signal mit den folgenden Werten:
- Verkaufssignal (Sell Signal)
- Schlusskurs
- Ma-Wert
- Wert des Relativen Vigor-Index
- RVI-Signalwert
Nun haben wir für jede der genannten Strategien ein Handelssystem erstellt, um ein automatisches Signal auf der Grundlage ihrer Bedingungen zu erzeugen.
Schlussfolgerung
Nach dem, was wir in den vorangegangenen Kapiteln dieses Artikels gelernt haben, sollten wir diesen Indikator tiefgreifend verstanden haben, da wir ihn im Detail kennengelernt haben. Wir haben gelernt, was er ist, was er misst und wie wir ihn manuell berechnen können, um das Hauptkonzept des RVI-Indikators zu verstehen. Wir haben gelernt, wie man es durch drei einfache Strategien nutzen kann, und das waren:
- RVI Crossover - Aufwärtstrend: zur Generierung von Kauf- und Schließsignalen während des Aufwärtstrends.
- RVI Crossover - Abwärtstrend: zur Erzeugung von Verkaufs- und Schließ-Signalen während des Abwärtstrends.
- RVI & MA Crossover: zur Erzeugung von Kauf- und Verkaufssignalen auf der Grundlage einer speziellen Crossover-Technik.
Wir haben für jede der genannten Strategien einen Schritt-für-Schritt-Blaupause erstellt, damit wir den Handel mit ihnen reibungslos und einfach gestalten können. Wir haben für jede der genannten Strategien ein Handelssystem entwickelt, das nach der Ausführung im MetaTrader 5 automatische Signale generiert.
Ich hoffe, dass Sie versucht haben, das Gelernte selbst anzuwenden, um den größtmöglichen Nutzen aus diesem Artikel zu ziehen und Ihre Programmierkenntnisse zu verbessern. Ich hoffe auch, dass Sie diesen Artikel nützlich fanden, um Ihre Handelsergebnisse zu verbessern und nützliche Einblicke in das Thema des Artikels oder ein verwandtes Thema zu erhalten. Wenn Sie weitere ähnliche Artikel lesen möchten, um zu lernen, wie man ein Handelssystem auf der Grundlage der beliebtesten technischen Indikatoren entwickelt, können Sie meinen anderen Artikel in dieser Serie darüber lesen.