Программирование на MQL II: Статистика рынка.
|

Программирование на MQL II: Статистика рынка.

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


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


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


   Предлагаем рассмотреть пример эксперта, выясняющего активность рынка по дням недели.


   Несколько комментариев относительно данного эксперта:
   Эксперт для оценки активности рынка принимает объём совершённых сделок, это может быть не всегда правильной оценкой – всё зависит от рассматриваемого инструмента. Полагаю, что на рынке FOREX лучше было бы учитывать не объём проданной валюты, а тиковый объём, то есть количество совершённых сделок, но эти данные можно получить только при живой торговле. Если бы у нас возникла такая необходимость, то нужно было бы, внеся в исходный код эксперта некоторые изменения, касательно подсчёта объёма, оставить эксперта в режиме реальной торговли на длительное время.


   Следует помнить, что началом недели во многих зарубежных странах считается не понедельник, а воскресенье, именно поэтому в нашем эксперте переменной “Monday” присваивается значение “2”.
   Так же следует обратить внимание, что, если исторических данных слишком много, то переменные, которые аккумулируют общий объем, могут “переполниться”. Попробуем разобраться, что это означает, и с чем это связано: в памяти компьютера под каждую переменную отведено определённое место. В самом начале программы, когда мы создавали переменные, мы явно указали, что в переменных с суффиксом _activity мы собираемся хранить числа с дробной частью. Для этого при инициализации переменных мы указали не просто значение “0”, а указали ещё и дробную часть – “0.0”. В MQL II для хранения чисел с дробной частью используется тип double. Таким образом, для хранения переменных _activity в нашей программе при компиляции было выделено определённое место. Когда это место “заполняется до отказа”, программа может начать выдавать неожиданные результаты. При написании устойчивой программы, следовало бы вставить в код проверку на достижение максимального значения переменных, но этот код пропущен в целях облегчения восприятия примера. К тому же, самого большого числа, записываемого в переменную типа double, достичь, действительно, очень трудно.


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


   И последнее, что хотелось бы заметить, – не обязательно выводить полученные данные на экран. Если у программы не предполагается какой-либо итоговой цифры, а данные должны будут периодически заноситься в отчёт, то их можно записывать в отдельный файл. Или с помощью рассмотренных в предыдущих номерах журнала статьях об отладке способов (функций print() и SetDebugMode() ) “сбрасывать” информацию в так называемый лог-файл.


   Возможности по сбору статистики о рынке не ограничены рассмотренным примером, и мы уверены, что читатель сможет самостоятельно найти массу применений предложенному варианту использования экспертов MetaTrader’а.


Александр Иванов