Kurslücke - eine profitabele Strategie oder 50/50?

Vladimir Karputov | 12 Dezember, 2018

Einführung

Hier werden wir uns mit der Überprüfung von D1-Lücken an den Aktienmärkten befassen. Wie oft bewegt sich der Markt danach in Richtung der Lücke? Kehrt sich der Markt nach einer Lücke um? Ich werde versuchen, diese Fragen im Artikel zu beantworten, während benutzerdefinierte Grafiken mittels CGraphic erstellt werden, um die Ergebnisse zu visualisieren. Symboldateien werden mit der DLL-Funktion GetOpenFileName ausgewählt.


Welchen Markt sollte man wählen?

Mich interessieren ausschließlich die Kurslücke des D1-Zeitrahmens.

Offensichtlich gibt es die größte Anzahl von Lücken bei Wertpapieren und nicht bei Forexsymbolen, da Wertpapiere von morgens bis abends und nicht rund um die Uhr gehandelt werden. Ich interessiere mich besonders für Aktien, da für sie eine relativ umfangreiche Kurshistorie vorliegt. Futures hingegen sind nicht sehr geeignet, da sie oft eine Lebensdauer von 3 oder 6 Monaten haben, was nicht ausreicht, um die Historie in einem D1-Zeitraum zu untersuchen.

Das Skript TestLoadHistory.mq5 aus dem Dokumentationsteil "Datenzugriff organisieren" ermöglicht es, die Anzahl der auf dem Server vorhandenen aktuellen Symbol- und D1-Zeitrahmenleisten zu definieren. Nachfolgend finden Sie ein Beispiel für die Überprüfung der Anzahl der D1-Balken für das Symbol ABBV:

Symbol ABBV

Abb. 1. ABBV Symbol

Die Vorgehensweise ist wie folgt:

  1. Wir speichern zunächst das in der Dokumentation beschriebene Skript. Um dies zu erreichen, wird im MetaEditor 5 ein neues Skript erstellt ("Erstellen eines Skripts"). Nennen wir es TestLoadHistory.mq5. Nun müssen wir den Code des Skript aus der Dokumentation auswählen, kopieren und in das Skript TestLoadHistory.mq5 einfügen (der Text aus der Dokumentation sollte den gesamten Text im Skript ersetzen).
  2. Kompilieren wir das resultierende Skript (nach der Kompilierung wird das Skript im Navigatorfenster des Terminals sichtbar).
  3. Starten wir das Skript in MetaTrader 5. Da die Prüfung für das Symbol ABBV gestartet wurde, müssen wir das Chart vorbereiten: Wir öffnen das Chart von ABBV und ersetzen den Zeitrahmen durch D1. Wir nehmen das Skript aus dem Navigatorfenster und starten es auf dem Chart ABBV. Legen wir in dem Parameter des Skripts ABBV als Symbolnamen ein, wählen den D1-Zeitrahmen und geben das Jahr 1970 als Datum an:

Ausführen des Skripts

Abb. 2. Ausführen des Skripts TestLoadHistory.mq5

Ergebnisse des Skriptes:

TestLoadHistory (ABBV,D1)       Start loadABBV,Dailyfrom1970.03.16 00:00:00
TestLoadHistory (ABBV,D1)       Loaded OK 
TestLoadHistory (ABBV,D1)       First date 2015.09.18 00:00:00 - 758 bars

Historie beginnt 2015 und umfasst 758 D1 Balken. Diese Anzahl reicht für eine Analyse.

Arbeiten mit einer Gruppe von Symbolen

Um alle Kriterien zu analysieren und zu berechnen, müssen wir die Symbole einer Symbolgruppe vergleichen. In der Regel sind die Symbole im MetaTrader 5 Terminal bereits in Gruppen unterteilt (Rechtsklick im Fenster Market Watch und Auswahl von Symbolen oder Drücken von Strg + U):

Symbole der NASDAQ-Gruppe (SnP100)

Abb. 3. Symbole der NASDAQ-Gruppe (SnP100)

Die NASDAQ-Gruppe (SnP100) wird in der Abbildung ausgewählt. Diese Gruppe enthält das Symbol ABBV. Der bequemste Weg, mit einer Gruppe von Symbolen zu arbeiten, besteht darin, sicherzustellen, dass das Skript auf einem Chart dieses Symbols aus dieser Gruppe gestartet wird. Um über jede Gruppe hinweg zu iterieren, müssen wir manuell ein Symboldiagramm aus jeder Gruppe öffnen und das Hilfsskript Symbols on symbol tree.mq5 starten - dieses Skript sammelt alle Gruppensymbole (Symbolnamen) in einer separaten Datei.

Das Skript Symbols on symbol tree.mq5 arbeitet nach folgendem Algorithmus: Es holt sich einen Pfad im Symbolbaum SYMBOL_PATH; sucht sich die letzte Gruppe von Symbolen aus dem gefundenen Pfad (hier ist es die Gruppe NASDAQ(SnP100)); wählt sich alle Symbole aus dieser Gruppe aus und speichert diese Symbole in der Datei. Der Dateiname ist ein Pfad in einem Symbolbaum, in dem alle "/" und "\"-Zeichen durch "_" ersetzt werden (die Ersetzung erfolgt durch das Skript automatisch, der Dateiname wird auch automatisch generiert). Nach dem Ersetzen von Symbolen wird der folgende Name für die Symbolgruppe NASDAQ(SnP100) generiert: "Stock Markets_USA_NYSE_NASDAQ(SnP100)_.txt".

Warum müssen wir jede Gruppe in eine separate Datei eintragen? Anschließend wird es möglich sein, Symbolnamen einfach aus Gruppendateien zu lesen, ohne über alle Symbole zu iterieren und die Richtung der Lücken zu analysieren. Im Allgemeinen entfernt das Hilfsskript Symbols on symbol tree.mq die Notwendigkeit manuell die Symbole aus einer bestimmten Symbolgruppe auszuwählen.


Das Skript Symbols on symbol tree.mq5

Besprechen wir nun das Skript.

HINWEIS: Nur der Text "Everything is fine. There are no errors" in der Registerkarte Experten garantiert, dass die Arbeit des Skripts erfolgreich war und die erhaltene Datei mit Symbolen für die weitere Arbeit verwendet werden kann!

Um den Code von Dateioperationen zu verkürzen, wird die Klasse CFileTxt eingebunden, und die Arbeit mit der Textdatei wird von dem Klassenobjekt m_file_txt - CFileTxt durchgeführt. Das Skript durchläuft sieben Schritte aus:

//+------------------------------------------------------------------+
//|                                       Symbols on symbol tree.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Files\FileTxt.mqh>
CFileTxt       m_file_txt;       // file txt object
//---
string   m_file_name="";         // File name
//+------------------------------------------------------------------+
//| Script Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- SCHRITT 1
   string current_path="";
   if(!SymbolInfoString(Symbol(),SYMBOL_PATH,current_path))
     {
      Print("ERROR: SYMBOL_PATH");
      return;
     }
//--- SCHRITT 2
   string sep_="\\";                 // Ein Separator als Zeichen
   ushort u_sep_;                    // Der Zahlencode des Separatorzeichens
   string result_[];                 // Ein Array für die Zeichenketten
//--- Abfrage des Separator-Zeichens 
   u_sep_=StringGetCharacter(sep_,0);
//--- Aufteilen der Zeichenkette in Teile 
   int k_=StringSplit(current_path,u_sep_,result_);
//--- SCHRITT 3
//--- Ausgabe der erhaltenen Zeichenketten 
   if(k_>0)
     {
      current_path="";
      for(int i=0;i<k_-1;i++)
         current_path=current_path+result_[i]+sep_;
     }
//--- SCHRITT 4
   string symbols_array[];
   int symbols_total=SymbolsTotal(false);
   for(int i=0;i<symbols_total;i++)
     {
      string symbol_name=SymbolName(i,false);
      string symbol_path="";
      if(!SymbolInfoString(symbol_name,SYMBOL_PATH,symbol_path))
         continue;
      if(StringFind(symbol_path,current_path,0)==-1)
         continue;

      int size=ArraySize(symbols_array);
      ArrayResize(symbols_array,size+1,10);
      symbols_array[size]=symbol_name;
     }
//--- SCHRITT 5
   int size=ArraySize(symbols_array);
   if(size==0)
     {
      PrintFormat("ERROR: On path \"%s\" %d symbols",current_path,size);
      return;
     }
   PrintFormat("On path \"%s\" %d symbols",current_path,size);
//--- SCHRITT 6
   m_file_name=current_path;
   StringReplace(m_file_name,"\\","_");
   StringReplace(m_file_name,"/","_");
   if(m_file_txt.Open("5220\\"+m_file_name+".txt",FILE_WRITE|FILE_COMMON)==INVALID_HANDLE)
     {
      PrintFormat("ERROR: \"%s\" file in the Data Folder Common folder is not created",m_file_name);
      return;
     }
//--- SCHRITT 7
   for(int i=0;i<size;i++)
      m_file_txt.WriteString(symbols_array[i]+"\r\n");
   m_file_txt.Close();
   Print("Everything is fine. There are no errors");
//---
  }
//+------------------------------------------------------------------+

Algorithmus des Skripts:

Achten wir auf Schritt 6: Die Datei wird im Ordner 5220 im Gesamtordner (das Flag FILE_COMMON wird verwendet) erstellt.

Jetzt prüfen wir, ob das Skript fehlerfrei endete. Die folgende Meldung sollte auf der Registerkarte Experten erscheinen: "Everything is fine. There are no errors. Create file:". Der Dateiname wird in der nächsten Zeile angezeigt — wir kopieren ihn und fügen ihn in das Skript "Getting gap statistics ..." ein. Die erfolgreiche Datei-Generierung wird unten angezeigt:

On path "Stock Markets\USA\NYSE/NASDAQ(SnP100)\" 100 Symbole
Everything is fine. There are no errors. Create file:
Stock Markets_USA_NYSE_NASDAQ(SnP100)_

Als Ergebnis erhalten wir die Datei (hier ist es Stock Markets_USA_NYSE_NASDAQ(SnP100)_) mit einem einzelnen Symbol in jeder Zeile. Die ersten fünf Zeilen der Datei:

AAPL
ABBV
ABT
ACN
AGN

Datenerhebung

Die OHLC-Daten der Historie der Symbole und die statistische Berechnung werden vom Hauptskript Getting gap statistics.mq5 durchgeführt. Die Struktur SGapStatistics wird für jedes Symbol ausgefüllt:

   struct SGapStatistics
     {
      string            name;                // symbol name
      int               d1_total;            // total number of D1 bars
      int               gap_total;           // total number of gaps
      int               gap_confirmed;       // gap was confirmed
     };

name — Symbolname
d1_total — Anzahl der D1-Balken des Symbols
gap_total — Anzahl der gefundenen Lücken
gap_confirmed — Anzahl der bestätigten Lücken (zum Beispiel öffnet ein Tag mit einer Aufwärtslücke und schließt als Aufwärtsbalken)

Die am besten geeignete Funktion zur Ermittlung der OHLC-Preise pro Symbol ist CopyRates. Wir verwenden das dritte Beispiel - mit Start- und Enddatum des gewünschten Zeitintervalls. Als Startzeit nehmen wir die aktuelle Zeit des TimeTradeServer Trade Server plus einen Tag, während das Enddatum der 1. Januar 1970 ist.

Nun müssen wir nur noch definieren, wie wir den Fehler behandeln sollen ("-1" wird als Ergebnis von der Funktion zurückgegeben) oder wie wir uns entscheiden wollen, dass nicht alle Daten als Ergebnis der Anfrage erhalten wurden (z.B. wurden noch nicht alle Daten vom Server hochgeladen). Wir können einen einfachen Weg gehen (Datenabfrage — Pause N — Sekunden — neue Datenabfrage) oder den richtigen. Die richtige Lösung basiert auf der Verbesserung des Skripts TestLoadHistory.mq5 aus dem Dokumentationsteil "Datenzugriff organisieren".

Die Ergebnisse der Ausführung von Skriptanfragen sind unten aufgeführt:

   switch(res) 
     { 
      case -1 : Print("Unknown symbol",InpLoadedSymbol);                        break; 
      case -2 : Print("Number of requested bars exceeds the one that can be displayed on chart"); break; 
      case -3 : Print("Execution interrupted by user");                    break; 
      case -4 : Print("Indicator cannot upload own data");          break; 
      case -5 : Print("Upload failed");                              break; 
      case  0 : Print("All data uploaded");                                      break; 
      case  1 : Print("Present timeseries data sufficient");               break; 
      case  2 : Print("Timeseries made of existing terminal data");         break; 
      default : Print("Execution result not defined"); 
     }

— was bedeutet, dass das Ausführungsergebnis kleiner als Null ist — dies ist ein Fehler. In diesem Fall sieht das Vorgehen wie folgt aus: Wir öffnen die Symboldatei und stellen für jedes Symbol eine Datenabfrage. Zusammenfassen der negativen Ergebnisse. Wenn mindestens ein negatives Ergebnis vorliegt, zeigen wir die Nachricht zur Anforderungsausgabe an. In diesem Fall muss der Nutzer das Skript erneut starten (die Historie wird wahrscheinlich zu diesem Zeitpunkt hochgeladen oder erstellt worden sein). Wenn keine Fehler vorliegen, holen wir uns die OHLC-Daten und zählen die Anzahl der Kurslücken.


Das Skript Getting Gap statistics.mq5

Dieses Skript zeigt die Statistik der Kurslücken auf der Registerkarte Experten des Terminals an. Im Weiteren werden wir den Wortlaut "bestätigte Kurslücke" (Gap Confirmation) verwenden. Eine bestätigte Kurslücke bedeutet, dass der Tagesbalken in Richtung der Kurslücke schloss, während eine unbestätigte Kurslücke bedeutet, dass der Tagesbalken in die entgegengesetzte Richtung der Kurslücke schloss:


Gaps

Abb. 4. Bestätigte und unbestätigte Kurslücken

Das Skript verfügt über einen einzigen Parameter "File name" — einen Dateinamen, der durch das Hilfsskript Symbols on symbol tree.mq5 gebildet wurde (wie wir uns erinnern, wird diese Datei im Ordner 5220 des Gesamtordners erstellt). Der Dateiname wird ohne Angabe von Verzeichnis und Erweiterung angegeben, z.B. so:

Die eingaben von Getting gap statistics

Abb. 5. Der Eingabeparameter des Skripts "Getting gap statistics"

Daher müssen wir mehrere Schritte unternehmen, um die Statistik zu erhalten:

  1. Wir wählen eine Symbolgruppe aus, für die die Berechnung der Kurslücken durchgeführt werden soll.
  2. Wir wählen ein Symbol aus der ausgewählten Gruppe aus und öffnen dessen Chart.
  3. Wir platzieren das Skript Symbols on symbol tree.mq5 auf dem Chart — die Datei mit allen Symbolen der ausgewählten Symbolgruppe wird dadurch erstellt. Prüfen wir nun, dass während des Skriptdurchlaufs keine Fehler auftreten. Die folgende Meldung sollte auf der Registerkarte Experten erscheinen: "Everything is fine. There are no errors"
  4. Ziehen Sie das Skript Getting gap statistics.mq5 auf dem Chart.

Auf der Registerkarte "Experten" werden daher solche Statistiken zur Anzahl der Kurslücken angezeigt. Ansicht für die ersten fünf Symbole:

      [name] [d1_total] [gap_total] [gap_confirmed]
[ 0] "AAPL"        7238        3948            1640
[ 1] "ABBV"         759         744             364
[ 2] "ABT"          762         734             374
[ 3] "ACN"          759         746             388
[ 4] "AGN"          761         754             385

Verwenden von CGraphic

Die Anzeige der gesamten Daten auf der Registerkarte Experten ist nicht sehr informativ, daher erstellt das Skript Getting gap statistics CGraphic.mq5 mittels CGraphic Grafiken. Das Skript hat die folgenden Parameter:

Berechnungsergebnis — Prozentkurve der bestätigten Kurslücken:

Getting gap statistics CGraphic

Abb. 6. Die Ergebnisse des Skripts Getting gap statistics CGraphic.mq5

Die Zahlen auf dem Diagramm:

Die Grafik verdeutlicht, dass die Werte der Kurslücken um 50% plus minus 6% schwanken, obwohl es drei Ausreißer von weniger als 42% gibt. Diese drei Ausreißer der bestätigten Kurslücken von weniger als 42% bedeuten, dass sich ein Tagesbalken der drei Symbole mit einer Wahrscheinlichkeit von 58% gegen die Kurslücke bewegt.

Jetzt können wir eine andere Gruppe von Symbolen überprüfen — Stock Markets\RussiaMICEX20. Getting gap statistics CGraphic.mq5 Berechnungsergebnis des Skripts für Stock Markets\RussiaMICEX20:

Stock Markets_Russia_MICEX20_

Abb. 7. Die Statistik der Kurslücken für die Gruppe Stock Markets\RussiaMICEX20

Hier gibt es zwei ungewöhnliche Ausreißer. Allerdings können wir das Bild und das Symbol in der aktuellen Version nicht verlinken. Deshalb müssen wir das Skript leicht verbessern.


Das Skript Getting gap statistics CGraphic 2.mq5

Änderungen: In der Version 2.0 werden in der Registerkarte Experten die Statistiken über bestätigte Kurslücken in % angezeigt. Wenn also Log Statistics aktiviert ist, können leicht zwei anomale Symbole für die Gruppe Stock Markets\RussiaMICEX20 erkannt werden:

          [name] [d1_total] [gap_total] [gap_confirmed] [confirmed_per]
***
[14] "NVTK.MM"          757         737             347           47.08
[15] "PIKK.MM"          886         822             282           34.31
[16] "ROSN.MM"          763         746             360           48.26
[17] "RSTI.MM"          775         753             357           47.41
[18] "RTKM.MM"          753         723             324           44.81
[19] "SBER.MM"          762         754             400           53.05
[20] "SBER_p.MM"        762         748             366           48.93
[21] "SNGS.MM"          762         733             360           49.11
[22] "TATN.MM"          765         754             370           49.07
[23] "SNGS_p.MM"        751         708             305           43.08
[24] "URKA.MM"          765         706             269           38.10
[25] "VTBR.MM"          763         743             351           47.24
[26] "RASP.MM"          778         756             354           46.83

Für die Symbole PIKK.MM und URKA.MM bedeuten 34% und 38% bestätigte Kurslücken, dass die Tagesbalken der Symbole mit der Wahrscheinlichkeit von 66% bzw. 62% schlossen.


Die Anzahl der Symbole (Instrumente) in der Datei begrenzen

Bei der Analyse verschiedener Symbolgruppen fand ich Gruppen mit mehr als tausend Symbolen. Die Arbeit mit einem so großen Set ist sehr umständlich: Es dauert ziemlich lange, bis eine so große Anzahl von Symbolen in das Fenster Market Watch eingefügt wird, während die endgültige Grafik unlesbar wird — zu viele Daten, die sehr nah beieinander liegen.

Deshalb entschied ich mich, das Skript Symbols on symbol tree.mq5 zu aktualisieren und schrieb Symbols on symbol tree 2.mq5. In dieser Version darf die maximale Anzahl der Symbole in der Datei 200 nicht überschreiten, und die jew. Nummer des Teils der Gruppe wird dem Dateinamen hinzugefügt. Zum Beispiel enthält die Symbolgruppe Stock Markets\USA\NYSE/NASDAQ(SnP100)\ 100 Symbole, was bedeutet, dass es nur einen Teil gibt. Der Dateiname sieht wie folgt aus: Aktienmärkte_USA_NYSE_NASDAQ(SnP100)_part_0.txt.


Dateiauswahl über den Systemdialog "Select txt file".

Nachdem ich mit den Skripten dieses Artikels gearbeitet hatte, wurde mir klar, dass das Hinzufügen des Dateinamens in den Eingabeparametern des Skripts Getting Gap Statistics CGraphic 2.mq5 zu unangenehm ist. Wir müssen mehrere Aktionen durchführen: Wir öffnen den Gesamtordner aller Terminals, kopieren den Dateinamen und fügen den kopierten Dateinamen in das Skript ein.

Daher wird die Dateiauswahl mit der System-DLL-Funktion GetOpenFileName durchgeführt. Um dies zu erreichen, füge ich die Datei GetOpenFileNameW.mqh hinzu. Die Funktion OpenFileName aus dieser Datei gibt den vollständigen Pfad der ausgewählten *.txt-Datei zurück. Der Pfad kann beispielsweise wie folgt aussehen: "C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\Common\Files\5220\Stock Markets_USA_NYSE_NASDAQ(SnP100)_part_0.txt". Jetzt müssen wir den Dateinamen aus der Datei holen.

Das Skript Getting gap statistics CGraphic 3.mq5 verwendet die DLL-Funktion GetOpenFileName:

DLL erlauben

Abb. 8. Anfrage DLL zu erlauben, wenn das Skript Getting gap statistics CGraphic 3.mq5 gestartet wird

Hier sieht man, wie die Dateien über den Dialog "Select txt file" ausgewählt werden:

Dateiauswahl

Abb. 9. Dateiauswahl


Statistiken anderer Wertpapiere

Jetzt können wir die Statistik der Kurslücken für andere Symbolgruppen erstellen.


Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs)

Die Symbolgruppen sind in sieben Dateien aufgeteilt:

Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_0

Abb. 10. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 0


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_1

Abb. 11. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 1


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_2

Abb. 12. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 2


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_3

Abb. 13. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 3


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_4

Abb. 14. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 4


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_5

Abb. 15. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 5


Stock Markets_USA_NYSE_NASDAQ(ETFs)_part_6

Abb. 16. Die Gruppe Stock Markets\USA\NYSE\NASDAQ(ETFs), part 6


Stock Markets\United Kngdom\LSE Int. Die Gruppe (ADR/GDR)\

Stock Markets_United Kngdom_LSE Int. (ADR_GDR)_

Abb. 17. Stock Markets\United Kngdom\LSE Int. Die Gruppe (ADR/GDR)\


Die Gruppe Stock Markets\United Kngdom\LSE (FTSE350)\

Diese Gruppe umfasst 350 Symbole, daher werden auf zwei Dateien aufgeteilt.

Stock Markets_United Kngdom_LSE (FTSE350)_part_0

Abb. 18. Die Gruppe Stock Markets\United Kngdom\LSE (FTSE350)\, part 0


Stock Markets_United Kngdom_LSE (FTSE350)_part_1

Abb. 19. Die Gruppe Stock Markets\United Kngdom\LSE (FTSE350)\, part 1


Die Gruppe Stock Markets\Germany\XETRA (IBIS)\Dax100\

Stock Markets_Germany_XETRA (IBIS)_Dax100_part_0

Abb. 20. Die Gruppe Stock Markets\Germany\XETRA (IBIS)\Dax100\


Die Gruppe Stock Markets\France\Eurnext (CAC40)\

Stock Markets_France_Eurnext (CAC40)_part_0

Abb. 21. Die Gruppe Stock Markets\France\Eurnext (CAC40)\

Schlussfolgerung

Bei der Analyse mehrerer Wertpapiermärkte habe ich gesehen, dass nach einer Kurslücke die Wahrscheinlichkeiten einer anhaltenden Bewegung und einer Umkehrung bei fast 50% liegen, was bedeutet, dass der Versuch, eine Lücke zu schließen, die Erfolgsquote von 50/50 hat. Gleichzeitig gibt es Wertpapiere mit einer Wahrscheinlichkeit (sowohl der Fortsetzung als auch der Umkehrung) von deutlich mehr als 65%. Diese Wertpapiere könnte man für den Handel von Kurslücken verwenden.

Das Archiv mit den im Artikel beschriebenen Skripten ist unten angehängt:

Skriptname Beschreibung
Symbols on symbol tree.mq5 Hilfsskript. Das Skript definiert eine Gruppe von Symbolen und sichert alle Symbole dieser Gruppe in einer Datei (Gesamtordner, Verzeichnis 5220)
Symbols on symbol tree 2.mq5  Hilfsskript. Das Skript definiert eine Gruppe von Symbolen und sichert alle Symbole dieser Gruppe in einer Datei (Gesamtordner, Verzeichnis 5220). Es verteilt außerdem die Symbole dieser Symbolgruppe in Dateien mit bis zu 200 Symbolen.
Getting gap statistics.mq5 Das Skript lädt die Symbole aus der Datei, die von dem Hilfsskript erstellt wurde und zeigt die Statistik der Kurslücken in der Registerkarte Experten
Getting gap statistics CGraphic.mq5 Das Skript lädt alle Symbole aus der Datei, die von dem Hilfsskript erstellt wurde und zeigt die Statistik der Kurslücken als Grafik an. Es wird CGraphic verwendet.
Getting gap statistics CGraphic 2.mq5 Das Skript lädt alle Symbole aus der Datei, die von dem Hilfsskript erstellt wurde und zeigt die Statistik der Kurslücken als Grafik an. Es wird CGraphic verwendet. Die Statistik wird in % und in der Registerkarte Experten dargestellt
Getting gap statistics CGraphic 3.mq5 Das Skript lädt alle Symbole aus der Datei, die von dem Hilfsskript erstellt wurde und zeigt die Statistik der Kurslücken als Grafik an. Es wird CGraphic verwendet. Die Statistik wird in % und in der Registerkarte Experten dargestellt. Der Dialog "Select txt file" wird verwendet, um eine Datei mit den Symbolen auszuwählen 
GetOpenFileNameW.mqh Einzubindende Datei, die die Arbeit mit dem Dialog "Select txt file" bereitstellt