В процессе повседневной торговли большинство из нас регулярно сталкивается с различными программами, написанными для терминала MetaTrader 4. Скрипты, индикаторы, советники – их суть – помочь нам принять решение о выставлении или закрытии ордера (а то и вообще полностью автоматизировать этот процесс). 90% времени они работают абсолютно нормально, и нас это устраивает. Однако в оставшиеся 10% возникают ситуации, когда программы не передают полностью ситуацию на рынке. В такие моменты возникает непреодолимое желание заняться их оптимизацией (читай – улучшением): добавить новое условие входа или выхода, немного подправить поведение, в конце концов, просто вывести предупреждающее сообщение – вот лишь некоторые примеры из большого числа тех различных мелких правок, которые иногда так хочется (или даже необходимо) внести.
Все не так сложно, как кажется
Однако большинство трейдеров совершенно не знакомо с программированием. Зачастую они думают, что это сложный и совершенно неподъемный навык, изучение которого потребует очень много сил и средств, а отдача от него не принесет желаемой выгоды. В итоге они вынуждены обращаться к сторонним программистам (платя, разумеется, за это деньги), на форумы (где нередко начинающие программисты вместо грамотной модификации лишь добавляют очередной «костыль», который рано или поздно приведет к сливу всего депозита), либо просто отказываются от идеи что-то менять.
Что ж, не буду вас разубеждать. Сразу скажу: программирование в общем – это очень сложная наука, и написать что-то наподобие MS Word, не говоря уже MS Windows – сложная задача для большого коллектива разработчиков, требующая огромного количества человеко-часов опытных программистов. Однако большинство программ для MT4 не настолько сложны, и одному, даже начинающему программисту, вполне под силу разобраться в них.
Для разработки программ для терминала MetaTrader 4 используется приложение, называемое средой разработки, MetaEditor. Вы можете запустить её либо из папки с терминалом, либо нажав на значок восклицательного знака в желтом ромбике на панели инструментов MetaTrader 4. Для того, чтобы передать свои мысли компьютеру (т.е. написать программу), используется специальный язык, называемый языком программирования. В терминале MetaTrader 4 – это MQL4. Это Си-подобный функциональный компилируемый язык.
Давайте чуть подробнее разберем, что значат все эти слова. «Си-подобный» означает, что он очень похож на язык программирования Си (не путать с C++), придуманный Деннисом Ритчи и Кеном Томпсоном в 1969 – 1973 годах. Впрочем, для начинающих программистов это скорее занятный факт, чем какая-то инструкция к действию. «Функциональный» означает, что в его основе лежит принцип разбиения задачи на подзадачи, и это разбиение реализуется через специальную конструкцию языка, называемую «функцией». Однако мы не будем говорить об этом в рамках данной статьи.
«Компилируемый» — это, пожалуй, самое важное для нас слово. Оно означает, что после того, как мы написали программу, прежде чем её запустить, требуется произвести «компиляцию», т.е. превратить текст на языке программирования непосредственно в программу. Для этого используется команда «компиляция» пункта «Файл» меню программы MetaEditor (либо просто горячая клавиша F5).
Несмотря на то, что язык MQL4 достаточно прост, осветить всего его возможности в рамках одной статьи невозможно. Мы постараемся сконцентрироваться на базовых понятиях, а так же идеях. Изучение деталей я оставляю на откуп читателей.
Важный шаг к пониманию программы на MQL 4
Итак, у нас есть программа, которую мы хотим модифицировать. У нас уже «чешутся руки», и хочется что-то сделать. С чего же следует начать?
Для начала, стоит убедиться, что у программы есть исходный код. Многие программы, которые вы скачиваете из Интернета, поставляются уже в готовом виде (т.е. после компиляции), файлы с ними имеют расширение «.ex4». Модификация таких программ невозможна. Файлы с исходным кодом имеют расширение «.mq4», и для большинства программ их реально найти в Интернете. Ключевые слова для поиска «Название программы + исходники», «Название программы + sources», «Название программы + mq4».
Для программ, входящих в стартовый набор поставки MT4 (т.е. то, что есть сразу после установки), исходники уже доступны и лежат в соответствующих подпапках каталога установки.
После того, как вы скачали файл с исходным кодом, его требуется расположить в правильной папке. Иначе он не будет подхвачен вашим терминалом. Эксперты форекс должны располагаться в папке experts, скрипты в папке experts\scripts, а индикаторы в папке experts\indicators. Папка experts расположена в каталоге установки клиентского терминала.
Расположив файл в нужном месте, вы можете попробовать его открыть в программе MetaEditor и скомпилировать. Если все в порядке, то скомпилированная программа автоматически добавится к вашему клиентскому терминалу и станет доступна, например, в окне «Навигатор».
Внимание! Во избежание различных конфликтов рекомендую переименовывать файлы с исходным кодом, добавляя в начало слово «My», например «MovingAverage.mq4» в «MyMovingAverage.mq4».
Если же компиляция завершится неудачей, об этом появится сообщение на вкладке «Ошибки» окна «Инструментарий» в MetaEditor. Текст ошибки (или ошибок) будет написан на английском языке с указанием строчки, где возникла ошибочная ситуация.
Запустив и убедившись, что все работает как надо, можно приступать к самому сложному… И нет, это не исправление исходного кода. Самое сложное – это полностью, досконально разобраться с алгоритмом работы программы. Вы должны кристально ясно понимать, по какому принципу она работает, что делает, какие у неё принципиальные этапы.
Например, если мы говорим о MACD, то принципиальные этапы – это расчет скользящего среднего с длинным периодом, расчет скользящего среднего с коротким периодом и построение сигнальной линии. Вы должны отлично понимать, что и на каком этапе происходит.
В этом очень помогает изучение материалов, найденных по ключевым словам «название программы + алгоритм работы».
Понимание алгоритма – один из самых важных шагов к пониманию программы!
Структура скриптов, индикаторов и советников, написанных на языке MQL 4
После того, как мы разобрались с алгоритмом – перед нами встает следующая задача – соотнести текстовое описание с тем, что написано на языке программирования. Однако для этого требуется хотя бы примерно представлять структуру программы. И именно о ней мы поговорим в этом разделе.
Для MT4 существует 3 типа программ – советники, индикаторы и скрипты. Самая простая структура – у скриптов. У них есть некая заголовочная информация, после чего следует функция старт. Выглядит в коде она так:
int start()
{
А тут располагаются какие-то команды
}
При запуске скрипта заголовочная информация инициализируется, после чего запускается функция start. Начинается последовательное исполнение строчек с первой, расположенной после фигурной открывающейся скобки и до фигурной закрывающейся скобки (либо оператора прерывания функции – return(…)).
Советники и индикаторы работают по чуть более сложной схеме. У них целых три функции – init, deinit и start. Выглядят они точно так же, как и функция start у скрипта, а вот работают немного по-другому. Функция init вызывается при присоединении программы к графику, здесь обычно производится первичная инициализация ресурсов программы (наиболее ярко это выражено в случае со скриптом), затем вызывается функция start. Они вызывается каждый раз при поступлении нового тика. Это позволяет динамически обновлять индикаторы и советников. При отсоединении программы от графика вызывается функция deinit, которая производит деинициализацию программы. Внимание! Функции init и/или deinit могут отсутствовать в программе. В таком случае предполагается, что они ничего не делают.
Таким образом, структура программы уже начинает приобретать некие, пусть и размытые, но формы.
Комментарии – признак умного программиста
В этой статье хочется затронуть ещё одну тему. В хорошем исходном коде, написанном грамотными программистами, есть специальные элементы, упрощающие понимание того, что делает тот или иной участок кода. Эти элементы называются «Комментарии». Они могут выглядеть двумя способами:
1). «//» — Двойная наклонная черта. Все, что расположено после нее и до конца строчки считается комментарием
2) «/*» и «*/» — Все, что расположено между этими символами так же считается комментарием. При этом такой комментарий может быть многострочным.
Примеры:
// Однострочный комментарий
/* Многострочный
комментарий */
В коде комментарии обычно подсвечиваются серым цветом.
В комментариях может содержаться совершенно любой текст – он все равно не компилируется и не входит в результирующую программу. Однако наличие грамотного комментария всегда упрощает чтение и понимание программы. Вы сами убедитесь, что пара строчек комментариев порой экономит несколько часов на попытках понять «зачем нужен этот код?».
Поэтому правило №1: когда вы беретесь модифицировать программу, не поленитесь и поставьте комментарий с описанием того, что же вы на самом деле хотите сделать. Это существенно упростит вашу дальнейшую работу с этой программой!
В следующем номере журнала мы начнем разбираться с азами языка программирования MQL 4. Не пропустите!