CustomTicksAdd

Добавляет в ценовую историю пользовательского инструмента данные из массива типа MqlTick. Пользовательский символ должен быть выбран в окне MarketWatch (Обзор рынка).

bool  CustomTicksAdd(
   const string     symbol,             // имя символа
   const MqlTick&   ticks[],            // массив с тиковыми данными, которые необходимо применить к пользовательскому инструменту
   uint             count=WHOLE_ARRAY   // количество элементов, которые будут использованы из массива ticks[]
   );

Параметры

symbol

[in]  Имя пользовательского инструмента.

ticks[]

[in]   Массив тиковых данных типа MqlTick, упорядоченных по времени в порядке возрастания, то есть требуется чтобы ticks[k].time_msc <= ticks[n].time_msc, если k<n.

count=WHOLE_ARRAY

[in]  Количество элементов из массива ticks[], которые будут использованы для добавления. Значение WHOLE_ARRAY означает, что необходимо использовать все элементы массива ticks[].

Возвращаемое значение

Количество добавленных тиков либо -1 в случае ошибки.

Примечание

Функция CustomTicksAdd работает только для пользовательских символов, открытых в окне MarketWatch (Обзор рынка). Если символ не выбран в MarketWatch, то для вставки тиков необходимо использовать CustomTicksReplace.

Функция CustomTicksAdd позволяет транслировать тики так, как если бы они приходили от сервера брокера. Данные записываются не напрямую в базу тиков, а отправляются в окно "Обзор рынка". И уже из него терминал сохраняет тики в своей базе. При большом объеме данных, передаваемых за один вызов, функция меняет свое поведение для экономии ресурсов. Если передается более 256 тиков, данные делятся на две части. Первая часть (большая) сразу напрямую записывается в базу тиков (как это делает CustomTicksReplace). Вторая часть, состоящая из последних 128 тиков, передается в окно "Обзор рынка" и после этого сохраняется терминалом в базе.

Структура MqlTick имеет два поля со значением времени – time (время тика в секундах) и time_msc (время тика в миллисекундах) – которые ведут отсчет от 01 января 1970 года. Обработка этих полей в добавляемых тиках производится по следующим правилам в указанном порядке:

  1. если значение ticks[k].time_msc!=0, то используем его для заполнения поля ticks[k].time, то есть для тика выставляется время ticks[k].time=ticks[k].time_msc/1000 (деление целочисленное)
  2. если ticks[k].time_msc==0 и ticks[k].time!=0, то время в миллисекундах получается умножением на 1000, то есть  ticks[k].time_msc=ticks[k].time*1000
  3. если ticks[k].time_msc==0 и ticks[k].time==0, то в эти поля записывается текущее время торгового сервера с точностью до миллисекунд на момент вызова функции CustomTicksAdd.

Если значение полей ticks[k].bid, ticks[k].ask, ticks[k].last или ticks[k].volume больше нуля, то в поле ticks[k].flags пишется комбинация соответствующих флагов:

  • TICK_FLAG_BID – тик изменил цену бид
  • TICK_FLAG_ASK  – тик изменил цену аск
  • TICK_FLAG_LAST – тик изменил цену последней сделки
  • TICK_FLAG_VOLUME – тик изменил объем

Если значение какого-то поля меньше или равно нуля, соответствующий ему флаг не записываются в поле ticks[k].flags.

 

Флаги TICK_FLAG_BUY и TICK_FLAG_SELL в историю пользовательского инструмента не добавляются.

 

Смотри также

CustomRatesDelete, CustomRatesUpdate, CustomTicksReplace, CopyTicks, CopyTicksRange