MQL4: Собираем тиковые данные на автомате

Всем привет!

Чем дольше вы занимаетесь разработкой автоматических торговых систем, тем чаще встает вопрос о необходимости использования качественных котировок торговых инструментов – без «дыр», пропусков баров и прочих неприятностей. Вообще, что нужно для того, чтобы грамотно работать над созданием торговых роботов? Конечно, нужно знать язык программирования. Безусловно, нужно иметь опыт торговли, чтобы разрабатывать системы. Само собой, нужно иметь средства для разработки советников (в нашем случае это терминал MT4 или MT5) и хорошо разбираться в особенностях его работы. Но что самое главное и что часто упускают из виду начинающие «ботоводы», нам нужна качественная история котировок. Есть даже такая поговорка «garbage in — garbage out», или «мусор на входе – мусор на выходе», что означает всего лишь одно: если вы тестируете свои советники на некачественных данных, очень вероятно, что вы получите результаты тестов крайне далекие от реального положения вещей.

Как решить эту проблему — в нашем сегодняшнем материале.

MQL4 пишем индикатор для сбора тиковой истории

Где же взять качественную историю?

Некоторые брокеры предоставляют свои собственные котировки. Например, если у вас открыт реальный счет у брокера Alpari, вы можете скачать прямо из терминала минутные котировки с 1999 года. Также некоторые брокеры предоставляют тиковые котировки, но, как правило, в лучшем случае с 2007 года. При этом чем более ранний год, тем хуже их качество.

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

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

Наши задачи

Таким образом, в результате наших рассуждений, мы подошли к нескольким насущным задачам:

1). Нам нужен инструмент для получения тиковой истории нашего родного брокера, на котором мы собираемся торговать. Эта история пусть и не позволит нам оптимизировать наши советники с «лохматых годов», но поможет нам понять, отличаются ли результаты при прогоне советника по сторонней истории от прогона на истории нашего брокера и на основании степени различия уже принимать решение.

2). Нам нужен инструмент для проверки качества сторонней истории котировок. Мы должны быть уверены, что наша история, на которой мы так кропотливо оптимизируем наши советники, не мусор и не решето.

3). Нам нужен инструмент для получения внятной сторонней истории котировок. Ну вот скачали вы тики из десятка различных источников и было бы неплохо их совместить, чтобы на выходе получить файл котировок, в котором все дыры заполнены. Но делать это вручную, для каждого инструмента – просто сумасшествие. Поэтому, руководствуясь тезисом о том, что лень – двигатель прогресса, нам нужно придумать способ делать это в автоматическом режиме, «не вставая с дивана».

4). Нам нужен инструмент для различных манипуляций с форматом истории котировок. Например, у нас есть *.tks файлы с тиками, а нам нужно получить *.Csv файлы с минутной историей. Как это сделать? Конечно, написав соответствующий скрипт. Или, например, когда уже дело доходит до тестирования советника, а у нас есть только наши *.csv файлы, нам нужно сконвертировать их в *.fxt формат, чтобы терминал их понимал и тестировал наши граали по ним.

5). Что еще такого интересного можно попутно сделать? Можно разработать критерии оценки качества потока котировок с сервера брокера, отследить средний спред в различные часы суток и дни недели, например. Думаю, сравнить данные от различных брокеров было бы довольно интересно, познавательно и, самое главное, это имеет немалый практический смысл.

Сбор тиков в автоматическом режиме

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

И первое, о чем мы с вами поговорим – как самим получить тиковые котировки вашего брокера (или брокеров). Для этого нам нужно иметь данные о времени прихода каждого тика и о ценах Bid и Ask, соответствующих каждой котировке. Получать подобный набор данных за продолжительное время мы будем при помощи сохранения этих данных в специальный файл в режиме онлайн, который потом и будем использовать дальше в нашей работе. Переложить основную часть работы можно на программу, которую мы сегодня и напишем. Оформим эту программу мы, пожалуй, в виде индикатора для терминала MT4 и все, что потребуется после ее написания, просто присоединить индикатор к графику в терминале.

С поступлением первого тика начнется сбор тиковых данных, о чем можно будет судить по появлению графиков Ask и Bid в «подвале». Данные будут сохраняться индикатором в каталог данных терминала в формате .tks – тиковые данные. При этом название файла будет совпадать с названием инструмента. Ну что же, основная картина, думаю, ясна, а с деталями мы разберемся «по ходу пьесы». Я не буду давать выкладки кода в письменном варианте, весь наш код мы разберем в видео уроке.

Заключение

Сегодня мы создали довольно простой индикатор для сбора тиковых данных из терминала MetaTrader4. У этого индикатора, несомненно, есть возможности для дальнейшего улучшения, особенно в плане удобства эксплуатации. Например, мы могли бы сразу готовить файлы csv с нужными нам периодами или в названия файлов добавлять названия брокеров. Также мы могли бы добавить в индикатор функционал, который позволил бы отсылать данные на другой сервер, который формировал бы файлы по группам и склеивал данные в один большой файл, а также реализовать интерфейс в виде простой web странички, которая выдавала бы нам файлы интересующего брокера, сконвертированные в формат csv нужного таймфрейма за заданные в параметрах запроса даты. То есть — дальнейшее улучшение индикатора ограничивается по большому счету вашей фантазией, возможностями и задачами, стоящими перед вами.

Скачать индикатор

Тема на форуме

Следующие уроки из цикла «Работа с Котировками»:

С уважением, Дмитрий аkа Silentspec
TradeLikeaPro.ru

Уроки по MQL4 , ,