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

 

Ниже показан процесс создания простого торгового робота для работы в терминале MetaTreyder4. На этом простом примере вы сможете попытаться создать своих торговых роботов для частичной или полной автоматизации торговли на рынке Форекс. Для создания торгового робота мы будем использовать язык программирования 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()                           

 }

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

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

Комментарии 2

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

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