- Направление индексации в массивах и таймсериях
- Организация доступа к данным
- 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
Функция получает в массив ticks_array тики в формате MqlTick, при этом индексация ведётся от прошлого к настоящему, то есть тик с индексом 0 является самым старым в массиве. Для анализа тика необходимо проверять поле flags, которое сообщает, что именно было изменено в данном тике.
int CopyTicks(
|
Параметры
symbol_name
[in] Символ.
ticks_array
[out] Массив типа MqlTick для приема тиков.
flags
[in] Флаг, определяющий тип запрашиваемых тиков. COPY_TICKS_INFO – тики, вызванные изменениями Bid и/или Ask, COPY_TICKS_TRADE – тики с изменения Last и Volume, COPY_TICKS_ALL – все тики. При любом типе запроса в оставшиеся поля структуры MqlTick дописываются значения предыдущего тика.
from
[in] Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from=0, то отдаются последние count тиков.
count
[in] Количество запрашиваемых тиков. Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные последние тики, но не более 2000.
Возвращаемое значение
Количество скопированных тиков либо -1 в случае ошибки.
Примечание
Функция CopyTicks() позволяет запрашивать и анализировать все пришедшие тики. Первый вызов CopyTicks() инициирует синхронизацию базы тиков, хранящихся на жёстком диске по данному символу. Если тиков в локальной базе не хватает, то недостающие тики автоматически будут загружены с торгового сервера. При этом будут синхронизированы тики с даты from, указанной в CopyTicks(), по текущий момент. После этого все приходящие по данному символу тики будут поступать в тиковую базу и поддерживать её в актуальном синхронизированном состоянии.
Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные тики, но не более 2000. Параметр flags позволяет задать тип требуемых тиков.
COPY_TICKS_INFO – отдаются тики, в которых есть изменения цены Bid и/или Ask. Но при этом будут также заполнены данные остальных полей, например, если изменилась только цена Bid, то в поля ask и volume будут записаны последние известные значения. Чтобы узнать точно, что именно изменилось, необходимо анализировать поле flags, которое будет иметь значение TICK_FLAG_BID и/или TICK_FLAG_ASK. Если тик имеет нулевые значения цен Bid и Ask, и при этом флаги показывают, что эти данные цены изменились (flags=TICK_FLAG_BID|TICK_FLAG_ASK), то это говорит об опустошении стакана заявок. Другими словами, в этот момент отсутствуют заявки на покупку и продажи.
COPY_TICKS_TRADE – отдаются тики, в которых есть изменения последней цены сделки и объема. Но при этом будут также заполнены данные остальных полей, то есть в поля Bid и Ask будут записаны последние известные значения. Чтобы узнать точно, что именно изменилось, необходимо анализировать поле flags, которое будет иметь значение TICK_FLAG_LAST и TICK_FLAG_VOLUME.
COPY_TICKS_ALL – отдаются все тики, в которых есть хоть какое-то изменение. При этом неизмененные поля также заполняются последними известными значениями.
Вызов CopyTicks() с флагом COPY_TICKS_ALL выдает сразу все тики из запрашиваемого диапазона, в то время как вызов в других режимах требует некоторого времени на предобработку и выборку тиков, и поэтому не даёт существенного выигрыша по скорости выполнения.
При запросе тиков (неважно, COPY_TICKS_INFO или COPY_TICKS_TRADE), в каждом тике содержится полная ценовая информация на момент тика (bid, ask, last и volume). Это сделано для удобства анализа торговой обстановки на момент каждого тика, чтобы не приходилось каждый раз запрашивать глубокую тиковую историю и искать в ней значения по другим полям.
В индикаторах функция CopyTicks() возвращает результат немедленно: При вызове из индикатора CopyTick() сразу же вернёт доступные по символу тики, а также запустит синхронизацию базы тиков, если данных не хватило. Все индикаторы на одном символе работают в одном общем потоке, поэтому индикатор не имеет права ждать завершения синхронизации. После окончания синхронизации при последующем вызове CopyTicks() вернёт все запрашиваемые тики. Функция OnCalculate() в индикаторах вызывается после поступления каждого тика.
В экспертах и скриптах функция CopyTicks() может дожидаться результата до 45 секунд: В отличие от индикатора каждый эксперт и скрипт работает в собственном потоке, и поэтому может дожидаться окончания синхронизации до 45 секунд. Если за это время тики так и не будут синхронизированы в необходимом объёме, то CopyTicks() по таймауту вернёт только имеющиеся в наличии тики, при этом синхронизация продолжится. Функция OnTick() в экспертах не является обработчиком каждого тика, она лишь уведомляет эксперта об изменениях на рынке. Изменения могут быть пакетными: в терминал может одновременно прийти несколько тиков, но функция OnTick() будет вызвана лишь один раз для уведомления эксперта о последнем состоянии рынка.
Скорость выдачи: терминал хранит по каждому символу 4096 последних тиков в кеше для быстрого доступа (для символов с запущенным стаканом – 65536 тиков), запросы к этим данным выполняются быстрее всего. При запросе тиков текущей торговой сессии за пределами кеша CopyTicks() обращается уже к тикам, которые хранятся в памяти терминала, эти запросы требуют большего времени на выполнение. Самыми медленными являются запросы тиков за другие дни, так как в этом случае данные читаются уже с диска.
Пример:
#property copyright "Copyright 2016, MetaQuotes Software Corp."
|
Смотри также
SymbolInfoTick, Структура для получения текущих цен, OnTick()