В том случае, если к одному графику или к разным графикам одного символа присоединено более одного индикатора, относящегося к типу "Тиковые объемы" (в дальнейшем будет фигурировать общее название "Индикатор тиков"), то следует придерживаться описанного ниже алгоритма работы с ними. Связано это с тем, что каждый из индикаторов ведет собственный учет тиков, полученных за время его работы. В свою очередь, необходимость хранения новых тиков связана с возможностью подхвата индикатором накопленной истории при переключении таймфрейма. Причем параллельная работа сборщика тиков не поможет, т. к. у него есть собственная частота сохранения данных, которую достаточно трудно синхронизировать с моментами переключения таймфреймов графиков, к которым подключен Индикатор тиков.

 

Техническое описание проблемы

Если читателю вникать в суть проблемы не очень хочется, то можно сразу перейти к разделу "Решение проблемы", который следует ниже.

Рассмотрим простейший пример работы двух Индикаторов тиков на одном графике. В момент подключения первого индикатора он загружает имеющуюся тиковую историю по текущему символу из основного файла истории, имя которого имеет общий вид: ХХХХХХ.tks, где ХХХХХХ - имя символа. Эти данные сразу же обрабатываются индикатором, не оставаясь в оперативной памяти, и отображаются в виде показаний индикатора. После этого индикатор обращается к альтернативному файлу тиковой истории (мог быть создан в результате окончания работы любого Индикатора тиков), имя которого имеет вид: ХХХХХХtemp.tks, где ХХХХХХ - имя символа. Содержимое файла загружается в оперативную память полностью и хранится до момента деинициализации индикатора. Из загруженных данных обрабатываются только те, время которых больше, чем время последнего тика, хранящегося в основном файле истории тиков.

При поступлении нового тика он пополняет коллекцию альтернативной истории индикатора. Эта история будет сохранена в файл только в случае деинициализации индикатора (переключение таймфрейма или символа графика, переключение счета, закрытие графика, отключение индикатора, повторная компиляция индикатора). А до момента деинициализации история продолжает храниться в памяти компьютера.

Через какое-то время после начала работы первого индикатора происходит подключение к этому же графику второго Индикатора тиков. Он использует файлы основной и альтернативной истории в том же состоянии, в котором их прочитал первый индикатор. То есть сбор новых тиков этот индикатор начинает с более позднего момента, чем первый индикатор. Если спустя несколько новых тиков переключить таймфрейм графика, то оба индикатора сохранят свою тиковую историю в один и тот же файл альтернативной истории. Причем в файле окажется информация от того индикатора, который сделал это первым. К сожалению, заранее определить, кто будет первым, невозможно. Если первым сохранит свои данные индикатор с большей тиковой историей, то проблем не возникнет, а вот в противном случае тиковая история, собранная первым индикатором, не попадет в файл и будет утеряна. В итоге первый индикатор может изменить свои показания после переключения таймфрейма.

Рассмотрим описанную последовательность в рисунках (см. рис. 1). 

Рис. 1. Моменты №1 и №2.

 

Левой вертикальной линией отображен момент подключения к графику индикатора BearBullBalance (см. "Баланс сил быков и медведей"). Назовем это время Момент №1. Правая вертикальная линия - момент подключения индикатора BearBullBalance_HiddenGeneral. Это Момент №2. Ко времени Момент №2 файл альтернативной истории не сохранен. Поэтому второй индикатор начинает работу с чистого листа, будто истории тиков не существует. История тиков между 13:00 и 13:06 является потенциально потерянной для обоих индикаторов.

Ждем Момента №3, в который производим переключение периода графика и моментальное переключение обратно на таймфрейм М1 (см. рис. 2).

 Рис. 2. Момент №3.

 

Как видно, нам не повезло - первым сохранение данных произвел индикатор BearBullBalance_HiddenGeneral. В момент попытки сохранения данных индикатором BearBullBalance последний записанный в файл EURUSDtemp.tks тик имел те же дату/время, что и записанный индикатором BearBullBalance_HiddenGeneral. В итоге данные не были обновлены, а история между Моментом №1 и Моментом №2 так и осталась в оперативной памяти, где впоследствии была уничтожена.

 

Решение проблемы

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

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

Эти два действия синхронизируют тиковые истории обоих индикаторов.

 

Если второй индикатор уже подключен

В тех случаях, когда трейдер забыл об имеющейся проблеме, но случайно вспомнил о ней только после того, как второй Индикатор тиков был подключен к графику, также можно выйти из положения без потери истории. Выручит следующая последовательность действий:

  1. Отключить только что загруженный второй индикатор. Он сохранит свою альтернативную историю.
  2. Дождаться прихода одного нового тика. Первый индикатор нарастит тиковую историю, что сделает ее отличной от той, которая сохранена в файле.
  3. Выполнить действия 1 и 2 из предыдущего раздела.

 

Универсальный рецепт

Ну а универсальным рецептом при работе с Индикаторами тиков является предварительная настройка всех необходимых индикаторов в начале дня и использование их без всяческих рокировок.