Интернет-журнал для трейдеров и инвесторов

Создание простого торгового робота для работы на Форекс

Ниже показан процесс создания простого торгового робота для работы в терминале MetaTrader4. На этом простом примере вы сможете попытаться создать своих торговых роботов для частичной или полной автоматизации торговли на рынке Форекс. Для создания торгового робота мы будем использовать язык программирования MQL4. На самом деле все не так страшно и сделать это сможет даже ребенок, конечно, придется приложить некоторые усилия для изучения основ языка программирования, но результат в итоге стоит затраченных усилий.

Простой торговый робот

Шаблон создаваемого торгового робота

Шаблон, это то с чего начинается создание любого торгового робота или советника. Шаблоны могут несколько отличаться друг от друга, но я предлагаю вам простой работающий вариант:

#property copyright «»

#property link      «»

//В этом месте программного кода описываются все переменные, используемые в программе

int start()                                   // Спец. функция start

 {

// В этом месте прописывается алгоритм действий торгового робота (с использованием //специальных команд языка MQL4)

 return;                                      // Выход из start()                            

 }

Алгоритм действий торгового робота

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

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

Создание простого торгового робота Форекс
Кликните по рисунку для увеличения

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

if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);     }       

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

if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

Здесь:

Bid – цена спроса*;

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

If (условие) if в переводе с английского означает «если». Другими словами если условие, написанное в скобках, выполняется то, выполняется и действие, указанное в фигурных скобках после:      {  OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);    }       

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bidsl*Point, Bid+tp*Point)— это приказ на покупку 0,1 лота с установкой ордеров стоп-лосс (sl) и тейк-профит (tp) задаваемых в настройках торгового робота.

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

if( Bid<iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);    }     

Конструкция аналогична предыдущей, отличающаяся только тем, что в условии if() цена меньше скользящей средней, а в фигурных скобках стоит приказ на продажу того же 0,1 лота, с теми же ордерами стоп-лосс и тейк-профит.   

Таким образом на данный момент мы имеем следующий алгоритм действий:

if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);}                                           

   if( Bid<iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);}   

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

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

Давайте поставим ему дополнительное условие, открывать позицию только в том случае когда открытых позиций нет:  if( OrdersTotal()=0), здесь OrdersTotal() – функция возвращающая значение открытых и отложенных ордеров.

Более того, давайте сделаем так, чтобы торговый робот сначала проверял наличие открытых позиций, а потом, в случае если открытых позиций нет, производил дальнейшие действия по алгоритму:

if( OrdersTotal()=0)   

   {       

   if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);}                                          

   if( Bid<iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);}             

   }       

Как видите, мы весь алгоритм с проверкой условий поместили в фигурные скобки под условием if( OrdersTotal()=0)    и если это условие не будет выполнено, торговый робот просто будет ждать следующего тика (изменения цены).

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

Описание переменных создаваемого торгового робота

В нашем примере мы использовали следующие переменные:

PMA – переменная содержащая значение периода используемой скользящей средней;

Sl – переменная содержащая значение ордера стоп-лосс;

Tp – переменная содержащая значение ордера тейк-профит;

Все три значения не могут быть дробными и потому относятся к типу int (целых чисел).

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

Таким образом, получаем следующее описание переменных:

extern int

PMA=13,sl=50,tp=100;

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

В итоге полный текст программного кода будет выглядеть следующим образом:

#property copyright «»

#property link      «»

extern int

PMA=13,sl=50,tp=100;

int start()                                   // Спец. функция start

 {

   if( OrdersTotal()==0)   

   {       

   if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);}                                          

   if( Bid<iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )

      {  OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);}             

   }         

return;                                      // Выход из start()                           

 }

Заключение

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

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

Вы можете поделиться этой статьёй на своей странице в соцсетях:


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

Comments to Создание простого торгового робота для работы на Форекс

  • Запустил этого робота на демо USDRUB. За месяц удвоил депозит. Не верится, что на реале тоже будут такие результаты.

    Илья 20.11.2015 13:16 Ответить
  • Илья, я бы не советовал ставить этого робота на реал. Его алгоритм хорош для учебно-ознакомительных целей, а для реальной торговли он слишком прост. Впрочем вы можете на его базе создать своего торгового робота и торговать им на реале. Хороших вам профитов!

    Олег Блохин 20.11.2015 13:42 Ответить
  • А как задать инструмент?

    Аноним 17.12.2020 14:47 Ответить
    • Он будет работать с тем инструментом к графику которого вы его прикрепите

      olegas 18.12.2020 06:57 Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики
Меню