Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):


 

Здравствуйте, дорогие друзья, MQL программисты и трейдеры, желающие автоматизировать свои Форекс стратегии.

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

Дело в том, что составление алгоритма MQL4 непосредственно перед самим программированием позволяет с одной стороны, систематизировать все Ваши мысли по поводу торговой идеи и на основе этого построить все причинно-следственные взаимосвязи в Вашей торговой стратегии.

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

Компьютер не может отойти «куда-то в сторону», он не способен думать сам, он думает по заданному алгоритму, то есть либо да, либо нет (если «да», то он делает одно действие, если «нет», то он делает другое действие).

 

Простейший алгоритм на основе бытового процесса

Давайте для начала рассмотрим процессы алгоритмов на простом бытовом примере — помыть посуду.

Если мы будем рассуждать о данном процессе со стороны нас (людей), то процесс будет выглядеть так: есть грязная посуда, её необходимо вымыть. Что же мы делаем? Мы подходим к раковине, берем губку, моем посуду и всё — посуда вымыта.

Для компьютера такое описание процесса категорически не подойдет.

Ему необходимо четко и пошагово расписать каждое действие. Давайте рассмотрим, как это происходит.

Алгоритм бытового процесса

 

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

Далее, мы ставим условие компьютеру и спрашиваем: «Есть ли грязные тарелки?». Так как он не может мыть что-то, если грязных тарелок не будет. Если они есть, то компьютер выполняет действие «Вымыть тарелку». Далее, он возвращается снова к нашему условию.

Мы снова спрашиваем: «Есть ли грязные тарелки?». Если грязные тарелки еще есть, то компьютер заново выполняет действие «Вымыть тарелку». После чего, он снова приходит к нашему условию «Есть ли грязные тарелки?» — если «нет», то это значит, что компьютер завершил мыть посуду — всё вымыто. Далее компьютер по заданному алгоритму выходит в конец процесса.

Как мы видим, несмотря на то, что это достаточно легкий процесс, для компьютера мы должны расписать весь процесс от и до, то есть, каждое действие.

 


 

Алгоритм программирования на MQL4 простейшей торговой Форекс стратегии

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

Итак, начнем.

Алгоритм торговой стратегии на MQL4

 

Исходная задача (торговая стратегия).

Имеется скользящая средняя, назовем ее MA. Если цена выше скользящей средней, то мы закрываем все продажи и открываем покупки. Если цена ниже, чем наша скользящая средняя, то мы закрываем все покупки и открываем продажи. Такая вот простая торговая стратегия.

В данном случае скользящую среднюю мы обозначаем как MA, а цену — как BID.

Если кто не знает, то в трейдинге и в нашем терминале MetaTrader4 есть два типа цен: тот, который мы видим на нашем обычном графике — это цена BID.

Цена Bid

 

Но есть еще другая цена — цена ASK. Чтобы её увидеть, необходимо щелкнуть по графику правой кнопкой мыши, далее кликнуть на Свойства — Общие. В появившемся окне поставить галочку на панели возле графы «Показывать линию Ask».

Показать линию Ask

 

Белая линия на графике — это цена Bid, красная линия — это цена Ask. Расстояние между этими линиями — это и есть спред, который взимается с нас всеми брокерами при торговле.

Ask, Bid и спред

 

Вернемся к алгоритмам. В условиях нашей задачи мы цену будем обозначать BID.

Итак, имеется весь наш процесс, начало процесса, конец процесса.

Алгоритм торговой стратегии на MQL4

 

Данный процесс у нас будет выполняться по тикам, то есть, с приходом каждого тика.

Напоминаю, тик — это каждое изменение цены, которое приходит в наш терминал.

С приходом каждого тика будет выполняться весь наш процесс: от самого начала до конца.

Итак, рассмотрим все по порядку.

Пришел первый тик — начало процесса. Мы записали значение нашей скользящей средней в значение переменной MA. Далее, мы записали значение цены BID. После чего, мы сравниваем значение цены BID со значением скользящей средней MA. Если значение цены стало больше, чем значение средней скользящей, тогда по условиям задачи мы должны купить — условие «Да». Если меньше, то, по идее, мы должны продать.

Бывает несколько состояний: цена больше чем MA, цена меньше чем MA. Если больше — мы покупаем, если меньше — мы продаем. Но есть еще третье состояние, когда цена равна значению средней скользящей. По условиям задачи данное равенство у нас никак не описано, соответственно мы ничего не должны делать.

То есть, при первом состоянии (цена больше MA) — покупаем, при втором (цена меньше MA) — продаем, при третьем состоянии (цена равна MA) — ничего не делаем, соответственно, выходим из процесса.

Вернемся к нашему примеру. Допустим, что, действительно, цена больше чем MA — мы должны купить, но, прежде чем открыть какой-либо новый ордер, мы должны посмотреть, есть ли у нас какие-либо старые Sell ордера и если есть, то закрыть их по условиям. В нашем случае условия открытия — Buy, значит перед открытием Buy ордера, мы должны закрыть все Sell ордера.

Алгоритм торговой стратегии на MQL4

 

Давайте все протестируем подробнее: пришел первый тик — мы записали значение средней скользящей MA, записали значение цены BID, сравнили значение цены со скользящей средней, Значение цены больше MA — «Да» — переходим далее и проверяем наличие Sell ордера. Мы ставим условие (вопрос) компьютеру: «Sell ордера есть?» — «Да», допустим, они есть. Если они есть, то мы выполняем действие закрыть все Sell ордера.

После чего возвращаемся снова к нашему условию: «Sell ордера есть?» — «Нет», Sell ордеров нет, все Sell ордера закрыты. Переходим к новому условию и спрашиваем: «Buy ордера есть?».

Для чего нам необходимо это условие, почему мы не можем сразу открыть Buy ордер?

Дело в том, что если перед открытием ордеров мы не будем спрашивать, есть ли таковые ордера в наличии, то на каждом тике будет появляться новый Buy ордер, и всё это будет наслаиваться друг на друга. Собственно, через несколько тиков у нас на счете будет открыто большое количество однотипных ордеров.

Чтобы наш ордер далее не открывался, важно запомнить и понять — на каждом этапе необходимо спрашивать (делать проверку на наличие открытых ордеров).

То есть, если мы поставим условие: «Buy ордер есть?» и если он есть, то мы просто выходим и завершаем процесс. Если его нет, то мы открываем Buy ордер. Таким образом, сколько бы тиков к нам не поступало, будет всегда открыт один Buy ордер.

Вот, собственно, и весь алгоритм закрытия Sell ордера и открытия Buy ордера в ситуации, если цена BID больше средней скользящей MA.

Противоположную ситуацию (где BID меньше MA) уже расписывать не буду, думаю, на примере выше все должно быть понятно.

 


 

Алгоритм второй торговой стратегии (открываем сделки при пересечениях двух скользящих средних)

Для закрепления материала давайте рассмотрим несколько более сложную торговую систему, нежели рассматривали выше.

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

Торговая стратегия на пересечениях MA

 

Мы записываем значение быстрой скользящей средней MA1 и медленной скользящей средней MA2.

Алгоритм MQL4

 

Далее, сравниваем эти два значения, то есть, сравниваем значения MA1 и MA2. «MA1 больше значения MA2?»- если «Да», то совершаем блок покупок. Если MA1 меньше чем MA2, то мы обрабатываем блок продаж. Данный результат, в принципе, является правильным. Но если точно подходить к построению алгоритма, то по нашим условиям данный алгоритм не совсем верен.

А дело тут вот в чем: нужно сравнивать значения МА1 и МА2 не просто так, а сравнивать их значения 2 раза в соответствии двум подряд идущим барам на графике. То есть, мы должны сравнить значение средних скользящих 1) зеленой МА1[1] (на первом баре) со значением красной МА2[1] (на первом баре) и 2) зеленой МА1[2] (на втором баре) со значением красной МА2[2] (на втором баре).

Учет всех баров в MetaTrader4 идет с право на лево. Самый правый бар, который развивается во времени – называется нулевым [0], далее, влево идут первый бар [1], второй бар [2] и так далее вглубь истории. Подробнее об этом мы поговорим чуть позже, в другой статье.

Значения средних MA в соответствии барам на графике

 

Сравнив значения двух скользящих средних на двух подряд идущих барах, мы сможем определить истинное пересечение двух МА.

Например, если мы просто сравним две МА: МА1>МА2 – это значит, что просто одна скользящая средняя больше другой, то есть, МА1 находится выше МА2. Таким выражением мы просто определяем, что одна МА больше (выше) другой, но сам момент пересечения тут не задан.

А вот, если выражение написать так: ( МА1[1]>МА2[1] и МА1[2]<=МА2[2] ), то таким образом мы уже как раз таки и описали сам момент пересечения МА1 снизу вверх МА2 на двух подряд идущих барах.

То есть, если на втором баре МА1 была меньше (ниже) или равна МА2 и одновременно с этим, на первом баре МА1 стала больше (выше) МА2 – значит мы имеем факт пересечения.

Итак, давайте вернемся к нашему алгоритму и построим его на основании алгоритма из первой стратегии, но немного подправим условия сравнения МА (в алгоритме выше мы сравнивали цену BID и значение  МА, а в данном же алгоритме мы будем сравнивать две МА друг с другом на двух подряд идущих барах), и алгоритм будет выглядеть так:

MQL4 алгоритм

 

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

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

Ну, или либо сейчас просто еще раз прочтите данную статью для большего понимания вопроса.

В этой статье мы рассмотрели алгоритмы в MQL4 программировании на примерах двух торговых стратегий: простой и более сложной.
 

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

 

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

 

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

Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.

 

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

 

С уважением, Антон.

Обучающий Форекс портал SanGReal Invest

 


 


Вам это может быть интересно. Другие статьи нашего обучающего портала:


  • Антон — SanGReal Invest (Сангрил Инвест)

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