CopyTicks

Получает в матрицу или вектор тики из структуры MqlTick. Отсчет элементов от стартовой позиции ведется от прошлого к настоящему, то есть тик с индексом 0 является самым старым. Для анализа тика необходимо проверять поле flags, которое сообщает, что именно было изменено в данном тике.

bool  matrix::CopyTicks(
   string           symbol,                // имя символа
   ulong            flags,                 // флаг, определяющий тип получаемых тиков
   ulong            from_msc,              // время, начиная с которого запрашиваются тики
   ulong            count                  // количество тиков, которые необходимо получить
   );

Метод вектора

bool  vector::CopyTicks(
   string           symbol,                // имя символа
   ulong            flags,                 // флаг, определяющий тип получаемых тиков
   ulong            from_msc,              // время, начиная с которого запрашиваются тики
   ulong            count                  // количество тиков, которые необходимо получить
   );

Параметры

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 содержит флаги для указания типа данных, которые необходимо передать в матрицу или массив. Комбинация флагов позволяет за один запрос получить несколько серий из истории.  При этом порядок строк в матрице будет соответствовать порядку значений в перечислении 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

COPY_TICKS_FLAGS

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 – тик возник в результате сделки на продажу

 

Смотри также

Доступ к таймсериям и индикаторам, CopyTicks