CopyTicks
Abruf der Ticks aus der Struktur MqlTick Struktur in eine Matrix oder einen Vektor. Die Elemente werden von der Vergangenheit bis zur Gegenwart gezählt, was bedeutet, dass der Tick mit dem Index 0 der älteste ist. Um einen Tick zu analysieren, prüft man das Feld Flags, das anzeigt, was genau sich in dem Tick geändert hat.
bool matrix::CopyTicks(
|
Vektor-Methode
bool vector::CopyTicks(
|
Parameter
symbol
[in] Symbolname
flags
[in] Eine Kombination von Flags aus der Enumeration ENUM_COPY_TICKS, die den Inhalt der angeforderten Daten angibt. Beim Kopieren in einen Vektor kann nur ein Wert aus der Enumeration ENUM_COPY_TICKS angegeben werden, sonst tritt ein Fehler auf.
from_msc
[in] Zeitpunkt, ab dem Ticks angefordert werden. Die Zeit wird in Millisekunden seit dem 01/01/1970 angegeben. Ist from_msc=0, wird die letzte Anzahl von Ticks zurückgegeben, die 'count' entspricht.
count
[in] Die Anzahl der angeforderten Ticks. Wenn die Parameter 'from_msc' und 'count' nicht angegeben werden, werden alle verfügbaren Ticks, jedoch nicht mehr als 2000, abgerufen.
Rückgabewert
Gibt bei Erfolg true zurück oder false, wenn ein Fehler aufgetreten ist.
Hinweis
Der erste Aufruf von CopyTicks() leitet die Synchronisation der auf der Festplatte gespeicherten Tick-Datenbank des betreffenden Symbols ein. Wenn die lokale Datenbasis nicht alle angeforderten Ticks enthält, werden die fehlenden Ticks automatisch vom Handelsserver heruntergeladen. Die in CopyTicks() angegebenen Ticks von from_msc bis zum aktuellen Zeitpunkt werden synchronisiert. Danach werden alle Ticks, die für dieses Symbol eintreffen, der Tick-Datenbasis hinzugefügt, sodass sie im synchronisierten Zustand bleibt.
Wenn die Parameter from_msc und count nicht angegeben werden, werden alle verfügbaren Ticks, aber nicht mehr als 2000, in die Matrix bzw. den Vektor geschrieben.
In Indikatoren liefert die Methode CopyTicks() sofort das Ergebnis: Wenn sie von einem Indikator aufgerufen wird, liefert CopyTick() sofort alle verfügbaren Ticks eines Symbols und startet eine Synchronisation der Tick-Datenbank, wenn die verfügbaren Daten nicht ausreichen. Alle Indikatoren für dasselbe Symbol arbeiten in einem gemeinsamen Thread, sodass der Indikator nicht auf das Ende der Synchronisierung warten kann. Nach der Synchronisierung gibt CopyTicks() beim nächsten Aufruf alle angeforderten Ticks zurück. In Indikatoren wird die Funktion OnCalculate() nach dem Eintreffen jedes Ticks aufgerufen.
In Expert Advisors und Skripten kann CopyTicks() bis zu 45 Sekunden auf das Ergebnis warten: Im Gegensatz zu Indikatoren arbeitet jeder Expert Advisor oder jedes Skript in einem eigenen Thread und kann daher bis zu 45 Sekunden auf den Abschluss der Synchronisation warten. Wenn die erforderliche Anzahl von Ticks in dieser Zeit nicht synchronisiert werden kann, gibt CopyTicks() die verfügbaren Ticks bis zum Timeout zurück und setzt dann die Synchronisierung fort. OnTick() in Expert Advisors reagiert nicht auf jeden Tick, sondern benachrichtigt den Expert Advisor nur über Veränderungen auf dem Markt. Dabei kann es sich um eine Reihe von Änderungen handeln: das Terminal kann gleichzeitig mehrere Ticks empfangen, während OnTick() nur einmal aufgerufen wird, um den Expert Advisor über den neuesten Marktzustand zu informieren.
Rate der Datenrückgabe: Das Terminal speichert 4096 letzte Ticks für jedes Instrument im Fast-Access-Cache (65536 Ticks für Symbole mit laufender Markttiefe). Anfragen, die diese Daten betreffen, werden am schnellsten ausgeführt. Wenn die angeforderten Ticks für die aktuelle Handelssitzung außerhalb des Cache liegen, ruft CopyTicks() die im Terminalspeicher gespeicherten Ticks auf. Diese Anfragen benötigen mehr Zeit zur Ausführung. Am langsamsten sind die Anfragen, die Ticks für andere Tage anfordern, da die Daten in diesem Fall vom Laufwerk gelesen werden.
Die Enumeration ENUM_COPY_TICKS enthält die Flags zur Angabe des Datentyps, der an die Matrix oder das Array übergeben werden soll. Die Flag-Kombination ermöglicht es, mehrere Zeitreihen aus der Historie in einer Anfrage zu erhalten. Die Reihenfolge der Zeilen in der Matrix entspricht der Reihenfolge der Werte in der Enumeration ENUM_COPY_TICKS. Mit anderen Worten: Die Zeile mit den hohen Daten wird in der Matrix immer höher stehen als die Zeile mit den niedrigen Daten.
ID |
Wert |
Beschreibung |
---|---|---|
COPY_TICKS_INFO |
1 |
Ticks mit Bid- und/oder Ask-Preisänderungen |
COPY_TICKS_TRADE |
2 |
Ticks mit letzter Preisänderung und/oder Volumensänderung |
COPY_TICKS_ALL |
3 |
Alle Ticks |
COPY_TICKS_TIME_MS |
1<<8 |
Tickzeit in Millisekunden |
COPY_TICKS_BID |
1<<9 |
Geldkurs (Bid) |
COPY_TICKS_ASK |
1<<10 |
Briefkurs (Ask) |
COPY_TICKS_LAST |
1<<11 |
Last-Preis (Preis des letzten Deals) |
COPY_TICKS_VOLUME |
1<<12 |
Volumen des Last-Preises |
1<<13 |
Tick-Flags |
|
Anordnung der Daten |
|
|
COPY_TICKS_VERTICAL |
32768 |
Ticks werden entlang der vertikalen Achse in die Matrix kopiert. Die erhaltenen Ticks werden in der Matrix vertikal angeordnet, d. h. die ältesten Ticks befinden sich in der ersten Zeile, während die jüngsten Ticks in der letzten Matrixzeile stehen.
Beim standardmäßigen Kopieren werden die Ticks in eine Matrix entlang der horizontalen Achse eingefügt.
Dies Flag ist nur beim Kopieren in eine Matrix anwendbar. |
Analysieren Sie die Tick-Flags, um herauszufinden, welche Daten sich geändert haben:
- TICK_FLAG_BID — der Tick hat den Geldkurs (Bid) geändert.
- TICK_FLAG_ASK — das Häkchen hat den Briefkurs (Ask) verändert.
- TICK_FLAG_LAST — der Tick hat den Preis des letzten Deals geändert.
- TICK_FLAG_VOLUME — der Tick hat das Volumen verändert.
- TICK_FLAG_BUY — der Tick ist das Ergebnis eines Kaufes.
- TICK_FLAG_SELL — der Tick ist das Ergebnis eines Verkaufs.
Siehe auch