Простой вопрос. Когда приходит тик?

 

Возникло некоторое недопонимание. Когда именно приходит тик и когда именно перезапускается функция start() советника?

Варианты:

1) Функция start() запускается в момент прихода сообщения в окно инструмента. Сообщение отправляется в окно только в том случае, если котировка по данному инструменту содержится в полученном пакете котировок. Т.е. в этом случае, "Тик" соответствует приходу котировки по отдельному инструменту и только если его окно открыто, иначе некому посылать сообщение. Если окон не открыто то и "тиков" нет, хотя котировки поступают.

В советнике, функция RefreshRates() обновит глобальные константы актуальными новыми значениями для текущего инструмента. Функция MarketInfo вернет всегда новые значения.


В связи с этим вопрос. Как заставить советника активироваться по любому тику любой котировки, т.е. реагировать не на частный тик, а на общий (смотри п.2) Иначе, чтобы получить данные по всем инструментам, придется открыть окна и запустить советников для всех инструментов. Это неприемлемо.


2) Функция start() запускается во всех открытых окнах одновременно в момент получения общего сообщения о приходе пакета котировок, даже если в этом пакете отсутствуют котировки по тем инструментам, окна которых открыты. В этом случае, тик соответсвует приходу пакета котировок вообще.

В советнике или скрипте, функция RefreshRates() обновит глобальные константы как новыми, так и старыми текущими значениями, в зависимости от инструмента. Функция MarketInfo вернет как старые так и новые значения. Определить новизну данных можно только сравнением, с предыдущим состоянием. Это неудобно и ресурсоемко.


В связи с этим дополнительный вопрос. Как получить массив символов и котировок, которые поступили в последнем пакете(общем тике)?

И желательно совместить это с активированием советника по общему тику, как описано в п.1.


3) Что-то другое.

Причина обращения: