CopyTicks
Получает в матрицу или вектор тики из структуры MqlTick. Отсчет элементов от стартовой позиции ведется от прошлого к настоящему, то есть тик с индексом 0 является самым старым. Для анализа тика необходимо проверять поле flags, которое сообщает, что именно было изменено в данном тике.
bool matrix::CopyTicks(
|
Метод вектора
bool vector::CopyTicks(
|
Параметры
symbol
[in] Символ.
flags
[in] Комбинация флагов из перечисления ENUM_COPY_TICKS, указывающих состав запрашиваемых данных. При копировании в вектор можно указать только одно значение из перечисления ENUM_COPY_TICKS, иначе будет ошибка.
from_msc
[in] Время, начиная с которого запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from_msc=0, то отдаются последние count тиков.
count
[in] Количество запрашиваемых тиков. Если параметры from_msc и count не указаны, то будут записаны все доступные последние тики, но не более 2000.
Возвращаемое значение
Возвращает true в случае успеха, иначе false в случае ошибки.
Примечание
Первый вызов CopyTicks() инициирует синхронизацию базы тиков, хранящихся на жёстком диске по данному символу. Если тиков в локальной базе не хватает, то недостающие тики автоматически будут загружены с торгового сервера. При этом будут синхронизированы тики с момента времени from_msc, указанного в CopyTicks(), по текущий момент. После этого все приходящие по данному символу тики будут поступать в тиковую базу и поддерживать её в актуальном синхронизированном состоянии.
Если параметры from_msc и count не указаны, то в матрицу/вектор будут записаны все доступные тики, но не более 2000.
В индикаторах метод CopyTicks() возвращает результат немедленно: При вызове из индикатора CopyTick() сразу же вернёт доступные по символу тики, а также запустит синхронизацию базы тиков, если данных не хватило. Все индикаторы на одном символе работают в одном общем потоке, поэтому индикатор не имеет права ждать завершения синхронизации. После окончания синхронизации при последующем вызове CopyTicks() вернёт все запрашиваемые тики. Функция OnCalculate() в индикаторах вызывается после поступления каждого тика.
В экспертах и скриптах метод CopyTicks() может дожидаться результата до 45 секунд: В отличие от индикатора каждый эксперт и скрипт работает в собственном потоке, и поэтому может дожидаться окончания синхронизации до 45 секунд. Если за это время тики так и не будут синхронизированы в необходимом объёме, то CopyTicks() по таймауту вернёт только имеющиеся в наличии тики, при этом синхронизация продолжится. Функция OnTick() в экспертах не является обработчиком каждого тика, она лишь уведомляет эксперта об изменениях на рынке. Изменения могут быть пакетными: в терминал может одновременно прийти несколько тиков, но функция OnTick() будет вызвана лишь один раз для уведомления эксперта о последнем состоянии рынка.
Скорость выдачи: терминал хранит по каждому символу 4096 последних тиков в кеше для быстрого доступа (для символов с запущенным стаканом – 65536 тиков), запросы к этим данным выполняются быстрее всего. При запросе тиков текущей торговой сессии за пределами кеша CopyTicks() обращается уже к тикам, которые хранятся в памяти терминала, эти запросы требуют большего времени на выполнение. Самыми медленными являются запросы тиков за другие дни, так как в этом случае данные читаются уже с диска.
Перечисление ENUM_COPY_TICKS содержит флаги для указания типа данных, которые необходимо передать в матрицу или массив. Комбинация флагов позволяет за один запрос получить несколько серий из истории. При этом порядок строк в матрице будет соответствовать порядку значений в перечислении ENUM_COPY_TICKS — то есть строка с данными High будет в матрице всегда выше строки с данными Low.
Идентификатор |
Значение |
Описание |
---|---|---|
COPY_TICKS_INFO |
1 |
Тики, содержащие изменения цен Bid и/или Ask |
COPY_TICKS_TRADE |
2 |
Тики, содержащие изменения цены Last и/или объема (Volume) |
COPY_TICKS_ALL |
3 |
Все тики |
COPY_TICKS_TIME_MS |
1<<8 |
Время тика в миллисекундах |
COPY_TICKS_BID |
1<<9 |
Цена Bid |
COPY_TICKS_ASK |
1<<10 |
Цена Ask |
COPY_TICKS_LAST |
1<<11 |
Цена Last (цена последней сделки) |
COPY_TICKS_VOLUME |
1<<12 |
Объем для цены Last |
1<<13 |
Флаги тиков |
|
Расположение данных |
|
|
COPY_TICKS_VERTICAL |
1<<15 |
Тики копируются в матрицу вдоль вертикальной оси. Это означает, что полученные тики в матрице расположены вертикально — то есть самые старые тики находятся в первой строке, а самые свежие в последней строке матрицы.
По умолчанию при копировании в матрицу тики добавляются вдоль горизонтальной оси.
Флаг имеет значение только при копировании в матрицу. |
Чтобы узнать, какие именно данные изменились с текущим тиком, анализируйте его флаги:
- TICK_FLAG_BID – тик изменил цену бид
- TICK_FLAG_ASK – тик изменил цену аск
- TICK_FLAG_LAST – тик изменил цену последней сделки
- TICK_FLAG_VOLUME – тик изменил объем
- TICK_FLAG_BUY – тик возник в результате сделки на покупку
- TICK_FLAG_SELL – тик возник в результате сделки на продажу
Смотри также