тел.: 8 800 200 86 47|+7 (812) 336 61 11Заказать звонок
Admiral Markets UK Admiral Markets UK Choose your country

MQLabs: Детализация истории котировок

Индикатор TicksCollector

Скрипт TicksToExcel

 

Увеличение производительности вычислительной техники и скорости передачи информации между удаленными компьютерами с каждым днем предъявляет все более высокие требования к объему и качеству рыночной информации. Совсем недавно, 10 лет назад, об автоматической торговле на рынке Форекс только начали говорить. При этом торговые роботы опирались на данные с периодом четыре, шесть, восемь часов, т. к. более глубокой детализации истории котировок попросту не было или было, но крайне мало. В нынешнее время большинство трейдеров свободно пользуется информацией, полученной на минутных графиках, за 10 и более лет.

Казалось бы, вот он - идеал. Минутные графики - что еще нужно? Но прогресс не стоит на месте - рыночные движения являются тому подтверждением. Все чаще на рынке возникают ситуации, когда детализации истории до одной минуты уже не хватает: в течение одной минуты цена проходит 20-30 пунктов в одном направлении, затем 30-40 - в обратном, а после этого вновь меняет направление и проходит такое же расстояние. Полученная минутная свеча, кроме амплитуды движения, нам ни о чем не говорит. Более того, если внутри этой свечи располагались уровни Take Profit и Stop Loss позиции, то при моделировании торговли в такой ситуации мы не сможем сказать однозначно, какой из уровней сработал первым. В итоге о результате сделки мы можем лишь догадываться.

Для таких неопределенных случаев многие трейдеры используют простой выход - считают, что сработал Stop Loss. Но в том то и дело, что, как сказано выше, описанная ситуация в современных реалиях не является такой редкой, как это было еще 2-3 года назад. В итоге стратегия, которая вполне могла бы быть отнесена к прибыльным стратегиям, считается трейдером убыточной, т. к. количество безосновательных срабатываний уровней Stop Loss оказывается существенным, серьезно искажая статистику стратегии.

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

 

Простой сборщик тиков

Начнем с простого - накопления тиковой истории. Для этого нам потребуется обычный индикатор, который, как известно, реагирует на каждый новый приходящий тик цены. Один тик содержит в себе три числовых значения: серверное время прихода котировки с точностью до секунды, цену Bid и цену Ask. Эти данные требуется сохранить в специальном файле, который и станет хранилищем тиковой истории.

Формат файла-хранилища будет донельзя прост - только записи о тиках. Описание каждого тика займет 20 байт:

  • 4 байта - дата и время поступления тика (в секундах)

  • 8 байт - цена Bid

  • 8 байт - цена Ask

У файла не будет никаких заголовков и прочей лишней информации. Чтобы отличать файлы тиков от других файлов, установим ему расширение tks (от ticks).

Созданием файла займется индикатор TicksCollector. За настройку процесса сбора тиков в нем отвечают первые два параметра:

1. i_setUserFileName - использовать имя файла для хранения тиковых данных, которое указал пользователь. Если указать значение false, то индикатор автоматически генерирует имя файла, которое состоит из имени символа и расширения tks. Например, для EURUSD имя файла будет EURUSD.tks. При указании значения параметра true имя файла считывается из следующего параметра.

2. i_userFileName - имя файла для записи данных тикового потока, которое действует только в случае, если параметр i_setUserFileName имеет значение true.

Помимо непосредственного сбора и записи тиков, индикатор в нижней части ценового графика отображает собранные данные (см. рис. 1).

Рис. 1. Отображение тикового потока индикатором TicksCollector.

Красная ломаная линия - цена Ask, бирюзовая - цена Bid. Такое представление ценового потока позволяет в режиме реального времени проследить за изменением спреда тех символов, у которых он не является фиксированным.

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

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

Настоятельно не рекомендуется присоединять более одной копии индикатора к одному символу (не графика, а именно символа!), т. к. это может привести к дублированию информации и, как следствие, искажению тиковой истории.

 

Конвертация данных о собранных тиках

Файл с собранными тиками индикатор TicksCollector располагает в папке терминала experts\files. Просмотреть содержимое файла визуально нельзя, т. к. это двоичный файл. Для того чтобы преобразовать полученные данные в текстовый вид, необходимо воспользоваться специальным скриптом TicksToExcel.

В момент запуска скрипта необходимо указать: имя файла, подлежащего конвертации (параметр i_sourceFile), имя файла для записи текстовой информации (параметр i_destinationFile) и количество значащих цифр после десятичной точки в значении цены для используемого символа (параметр i_digits). После завершения работы скрипта будет выдано соответствующее сообщение, а в папке experts\files появится новый файл формата csv. Его содержимое можно просмотреть как в блокноте (см. рис. 2), так и в Microsoft Excel.

Рис. 2. Содержимое csv-файла с тиковыми данными в блокноте.

Для корректного просмотра содержимого файла в Excel необходимо изменить настройку разделителя целой и дробной части с символа запятой (",")  на символ точки ("."). В Excel 2010 для этого нужно щелкнуть по кнопке "Офис", затем по кнопке "Параметры Excel", в появившемся окне выбрать пункт "Дополнительно". В параметрах правки нужно найти галку "Использовать системные разделители" и убрать ее, а в пункте "Разделитель целой и дробной части" поставить символ точки.

 

Создание графиков нестандартного периода

В качестве дополнительной возможности индикатор TicksCollector обладает функционалом, позволяющим создавать графики нестандартного периода. Ранее мы уже рассматривали процесс создания таких графиков при помощи штатного скрипта МТ4 period_converter (см. "Торговля и тестирование на нестандартных таймфреймах"). Но этот способ позволяет создавать таймфреймы с периодом, кратным одной минуте. Границы применимости индикатора TicksCollector более широкие - можно создавать таймфреймы с периодом, кратным одной секунде. Правда, все это при условии наличия тиковой истории для рассматриваемого исторического периода.

Получить нестандартный график при помощи индикатора TicksCollector несложно. Для этого используются три его параметра:

1. i_convertToTime - производить конвертацию тикового потока в равновременные свечи (обычный график изменения цены во времени, представленный свечами). Значение true - производить, false - не производить.

2. i_secondsPerBar - количество секунд, соответствующих  одной свече (период графика).

3. i_resultTimeTFInMinutes - период графика, на котором будет отображен синтетический график, в минутах. Не должен совпадать с одним из стандартных таймфреймов.

Процесс создания и отображения графика состоит из нескольких шагов:

1. Запустить индикатор TicksCollector со значением параметра i_convertToTime = true.

2. Зайти в меню терминала МТ4 Файл и выбрать пункт "Открыть автономно".

3. В появившемся окне найти строку, состоящую из названия символа, к которому присоединен индикатор, и периода в минутах, указанного в параметре i_resultTimeTFInMinutes. Например, если в параметре указано значение 312, то период будет выглядеть как "М312".

4. Выделить эту строку курсором мыши и нажать кнопку "Открыть".

Если все сделано правильно, то появится новое окно с графиком нестандартного таймфрейма (см. рис. 3).

Рис. 3. Внешний вид графика с периодом 30 секунд в сравнении с минутным графиком.

В новом окне, несмотря на то, что его заголовок содержит слово "offline", будут отображаться все изменения цены до тех пор, пока работает основной индикатор TicksCollector. С момента его отключения автономное окно перестанет реагировать на новые тики.

С полученным окном графика нестандартного таймфрейма можно работать также полноценно, как и с обычным стандартным графиком: использовать индикаторы и даже советники (эта возможность проверена в 509-ом билде терминала и может быть недоступна в более поздних его билдах).

 

Графики равновысоких свечей

Термин "равновысокие свечи" означает представление свечного графика в виде свечей, образованных по принципу одинаковой высоты каждой из свечей. Этот способ представления графика был описан Рустемом Бигеевым в статье "Синтетические бары - новое слово в отображении ценовой графической информации". В этой же статье приведен индикатор synbar, при помощи которого создаются синтетические графики. Ограничением индикатора, как и в случае со скриптом period_converter, является использование данных не ниже минутного графика. На первый взгляд, для синтетических баров это не помеха, но, если копнуть глубже, то можно найти такие ситуации, в которых наличие данных тикового графика оказывается просто необходимым условием.

В подтверждение этих слов рассмотрим ситуацию, имевшую место 03.09.2013 в 15:00 по Гринвичу (см. рис. 4).

Рис. 4. Отображение одной и той же ситуации на различных графиках.

Верхний график - стандартный минутный таймфрейм. Средний график - синтетические бары (высота - 5 пунктов), сформированные индикатором synbar. Нижний график - синтетические бары (высота - 5 пунктов), сформированные индикатором TicksCollector.

На минутном графике мы видим одну свечу высотой 25 пунктов, которая на среднем графике представлена шестью свечами (в крайнюю левую свечу вошло несколько пунктов от свечи 14:59). При наблюдении этих графиков постфактум, у пользователя создается впечатление непрерывного поступательного движения цены от уровня 99.48 до уровня 99.73. Ситуация усугубляется тем, что на синтетическом графике, созданном индикатором synbar, одной минутной свече соответствует шесть равновысоких свечей, т. е. происходит навязывание мнения о непрерывном движении цены.

Если же взглянуть на график, созданный индикатором TicksCollector, то можно убедиться в ошибочности предыдущих представлений. Никакого поступательного движения цены в этот момент не было. Имел место геп - переход от цены 99.48 к цене 99.66. Да, после этого цена до уровня 99.73 двигалась более плавно, о чем свидетельствует наличие еще трех свечей, относящихся ко времени 15:00. Таким образом, наличие тиковой истории при построении каких бы то ни было графиков играет намного более важную роль, чем может показаться без проведения глубокого анализа данных.

Построение графика равновысоких свечей при помощи индикатора TicksCollector производится аналогично тому, как создавались графики нестандартных периодов, описанные в предыдущем разделе статьи. Отличие заключается лишь в использовании других параметров индикатора:

1. i_convertToPoints - производить (true) или не производить (false) создание графика равновысоких свечей.

2. i_pointsPerBar - максимальное количество пунктов, относящихся к одному бару. На графике могут быть бары с меньшим количеством пунктов, как это показано на рис. 4.

3. i_resultPointsTFInMinutes - период графика, на котором будет отображен синтетический график, в минутах.  Не должен совпадать ни с одним из стандартных таймфреймов. Для рис. 4 значение этого параметра равно 313.

Также как и в случае с графиками нестандартного временного периода, графики равновысоких свечей могут использоваться аналогично графикам стандартных периодов.

 

Заключение

Важность данных тикового потока признается далеко не всеми. Большинство трейдеров считают такую информацию избыточной, т. к. строят свои торговые системы на достаточно грубых рыночных закономерностях, где тики являются "шумом". Но как только у трейдера возникает необходимость скальпирования рынка, тиковый поток становится тем для него важнее, чем чувствительней его система к изменению цены на один пункт.

Другим препятствием на пути сбора тиковой истории является техническая сторона дела, которая предполагает хранение больших объемов информации, превышающей стандартный объем (минутная история) в 10 и более раз. Но, как было отмечено в начале статьи, эта проблема решится с течением времени, т. е. с естественным ходом технического прогресса.

 

 

Игорь Герасько

Сентябрь 2013

Специально для компании Admiral Markets

3.375
 
 
X
Loading