- Richtung des Indizierens in Feldern, Puffern und Zeitreihen
- Datenzugriff organisieren
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
CopyTicks
Die Funktion nimmt Ticks im Dateiformat MqlTick in ticks_array entgegen, die Indizierung erfolgt von der Vergangenheit in die Gegenwart, d.h. der Tick mit dem Index 0 ist der älteste im Array. Für die Analyse eines Ticks muss das Feld flags überprüft werden, welches Änderungen in diesem Tick anzeigt.
int CopyTicks(
|
Parameter
symbol_name
[in] Symbol.
ticks_array
[out] Array vom Typ MqlTick für das Entgegennehmen von Ticks.
flags
[in] Flagge, die den Typ der angeforderten Ticks bestimmt. COPY_TICKS_INFO – Ticks, die durch Änderungen von Bid bzw. Ask verursacht wurden, COPY_TICKS_TRADE – Ticks mit Änderungen von Last und Volume, COPY_TICKS_ALL – alle Ticks. Bei jedem Anforderungstyp werden die Werte des vorherigen Ticks in die übrigen Felder der MqlTick Struktur geschrieben.
from
[in] Das Datum, von dem an Ticks abgerufen werden. Das Datum wird vom 01.01.1970 in Millisekunden angegeben. Wenn der Parameter from=0, dann werden die letzten count Ticks übermittelt.
count
[in] Anzahl angeforderter Ticks. Wenn die Parameter from und count nicht angegeben sind, dann werden alle vorhandenen Ticks im Array ticks_array[] gespeichert, aber nicht mehr als 2000.
Rückgabewert
Anzahl der kopierten Ticks oder -1 im Fehlerfall.
Hinweis
Die CopyTicks() Funktion erlaubt es, alle eingegangenen Ticks abzurufen und zu analysieren. Der erste Aufruf von CopyTicks() initiiert die Synchronisierung der Datenbank von Ticks, welche für jedes Symbol auf der Festplatte gespeichert sind. Wenn die Ticks in der lokalen Datenbank nicht ausreichend sind, dann werden fehlende Ticks vom Handelsserver heruntergeladen. Dabei werden die Ticks vom Datum from an, angegeben in CopyTicks(), bis zum aktuellen Moment synchronisiert. Danach werden alle Ticks für dieses Symbol in die Datenbank eingehen und diese in dem aktuellen synchronisierten Zustand aufrechterhalten.
Wenn die Parameter from und count nicht angegeben sind, werden alle vorhandenen Ticks im Array ticks_array[] gespeichert, aber nicht mehr als 2000. Der flags Parameter erlaubt es, den Typ der benötigten Ticks zu setzen.
COPY_TICKS_INFO – es werden die Ticks übermittelt, in welchen es Änderungen des Bid bzw. Ask Preises gibt. Dabei werden auch andere Felder ausgefüllt, z.B. wenn sich nur der Bid-Preis geändert hat, werden in den ask und volume Feldern die letzten bekannten Werte gespeichert. Um genau zu erfahren, was sich geändert hat, muss das Feld flagsanalysiert werden, das den Wert TICK_FLAG_BID bzw. TICK_FLAG_ASK haben wird. Wenn die Bid und Ask Preise des Ticks gleich Null sind, und die Flaggen dabei anzeigen, dass sich die Preisdaten geändert haben (flags=TICK_FLAG_BID|TICK_FLAG_ASK), weist das darauf hin, dass die Markttiefe leer ist. Mit anderen Worten, sind in diesem Moment weder Kauf- noch Verkaufsanfragen vorhanden.
COPY_TICKS_TRADE – es werden die Ticks übermittelt, in welchen es Änderungen von Last Price und des Volumens gibt. Aber dabei werden auch andere Felder ausgefüllt, d.h. in den Bid und Ask Feldern werden die letzten bekannten Werte gespeichert. Um genau zu erfahren, was sich geändert hat, muss das Feld flags analysiert werden, das den Wert TICK_FLAG_LAST und TICK_FLAG_VOLUME haben wird.
COPY_TICKS_ALL – alle Ticks werden übermittelt, in welchen es irgendeine Änderungen gibt. In den Feldern ohne Anderungen werden die letzten bekannten Werte gespeichert.
Der Aufruf von CopyTicks() mit der Flagge COPY_TICKS_ALL gibt gleichzeitig alle Ticks aus dem angefragten Intervall aus, während der Aufruf in anderen Modi einige Zeit für die Vorbereitung und Auswahl von Ticks, deswegen ist die Geschwindigkeit der Ausführung nicht besonders schneller.
Beim Abruf von Ticks (egal ob COPY_TICKS_INFO oder COPY_TICKS_TRADE) beinhaltet jeder Tick vollständige Preisinformationen im Moment des Ticks (bid, ask, last und volume). Das trägt zur Einfachheit der Analyse der Handelsumgebung im Moment jeden Ticks bei, damit man nicht jedes Mal eine tiefe Tick-Historie abrufen und Werte nach anderen Feldern in dieser Historie suchen muss.
In Indikatoren liefert die CopyTicks() Funktion das Ergebnis umgehend: Beim Aufruf aus dem Indikator gibt CopyTick() alle zugänglichen Ticks zurück und startet die Synchronisierung der Tick-Datenbank, wenn es nicht ausreichend Daten gibt. Alle Indikatoren arbeiten in einem gemeinsamen Thread auf einem Symbol, deswegen darf der Indikator nicht auf das Ende der Synchronisierung warten. Nach dem die Synchronisierung abgeschlossen ist, liefert CopyTicks() beim nächsten Aufruf alle angeforderten Ticks. Die OnCalculate() Funktion wird nach dem Eingehen jeden Ticks in den Indikatoren aufgerufen.
In Experten und Skripts kann die CopyTicks() Funktion bis zu 45 Sekunden auf das Ergebnis warten: Im Gegensatz zum Indikator arbeitet jeder Expert Advisor und Skript in einem eigenen Thread, deswegen kann er bis zu 45 Sekunden auf das Ende der Synchronisierung warten. Wenn die Ticks innerhalb dieser Zeit nicht im benötigten Volumen synchronisiert werden, liefert CopyTicks() nur vorhandene Ticks nach Time Out, dabei wird die Synchronisierung fortgesetzt. Die OnTick() Funktion dient nicht als Jeder-Tick-Handler in Expert Advisors, sie informiert den Expert Advisor über Änderungen auf dem Markt. Es kann sich um Paket-Änderungen handeln: mehrere Ticks können gleichzeitig ins Terminal eingehen, aber die OnTick() Funktion wird nur einmal aufgerufen, um den Expert Advisor über den letzten Zustand des Markts zu informieren.
Die Geschwindigkeit: das Terminal speichert die letzten 4096 Ticks für jeden Symbol im Cache für schnellen Zugriff (für Symbole mit der Markttiefe – 65536 Ticks), diese Daten werden am schnellsten abgerufen. Beim Abruf von Ticks der aktuellen Handelssitzung außerhalb des Cache greift CopyTicks() auf die Ticks im Speicher des Terminals zu. Das nimmt mehr Zeit in Anspruch. Am langsamsten werden die Ticks für andere Tage abgerufen, denn in diesem Fall werden die Daten von der Festplatte gelesen.
Beispiel:
#property copyright "Copyright 2016, MetaQuotes Software Corp."
|
Sieh auch
SymbolInfoTick, Struktur für das Empfangen aktueller Preise, OnTick()