Алготрейдинг — как заставить робота делать тяжелую работу

Эксперты из FBS демонстрируют простоту работы с языком MQL4 на примере примитивного робота-советника

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

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

Что и зачем автоматизировать

Любой процесс можно автоматизировать, начиная от сбора и анализа данных и заканчивая уведомлениями о последних событиях (например, через Telegram). Автоматизация процессов позволяет трейдерам избежать человеческих ошибок, уделить больше времени себе или семье, расслабиться и восстановить силы.

Как начать

На популярной торговой платформе MetaTrader для автоматизации большинства торговых процессов используется язык программирования MQL. Он прост в освоении и доступен даже начинающим программистам.

Языки MQL4 и MQL5, работающие на MetaTrader 4 и 5 соответственно, отличаются друг от друга. Новичкам лучше начать с MQL4, так как на этом языке можно написать даже простого торгового робота (EA — expert advisor).

MQL4 — это просто

Простоту работы с MQL4 мы продемонстрируем на примере примитивного робота (советника) на MQL4.

Для начала откройте счет у любого из брокеров.

Затем, откройте торговую платформу MT4 и выполните следующие действия: в окне Навигатор найдите раздел Советник (Expert Advisor), щелкните правой кнопкой мыши и выберите Создать в MetaEditor. Далее выберите Советник (шаблон) — Далее — Укажите имя (Expert\FirstEA и т.д.) — Далее — Далее — Готово. Откроется окно редактора кода MetaEditor.

Ниже приведен полный код программы, который вы можете скопировать в MetaEditor и нажать кнопку Compile. Вы увидите, что ваш советник с именем FirstEA (и так далее) появился в разделе «Советники».

#property copyright «Copyright 2017, MetaQuotes Software Corp.»

#property link «https://www.mql5.com»

#property version «1.00»

#property strict

//+——————————————————————+

//| Expert initialization function |

//+——————————————————————+

int OnInit()

{

//—

//—

return(INIT_SUCCEEDED);

}

//+——————————————————————+

//| Expert deinitialization function |

//+——————————————————————+

void OnDeinit(const int reason)

{

//—

}

//+——————————————————————+

//| Expert tick function |

//+——————————————————————+

void OnTick()

{

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>=70 && AmountSell()==0)

{

if (AmountBuy()>0) CloseBuy();

OrderSend(Symbol(),1,0.01,Bid,0,0,0,»»,0,0,0);

}

if(iRSI(NULL,0,14,PRICE_CLOSE,0)<=30 &&=»» AmountBuy()=»=0)

{

if (AmountSell()>0) CloseSell();

OrderSend(Symbol(),0,0.01,Ask,0,0,0,»»,0,0,0);

}

}

//+——————————————————————+

//Close Sell orders function

void CloseSell()

{

for(int i=OrdersTotal()-1; i>=0; i—)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if(OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(),Ask,0,0);

}

}

//+——————————————————————+

//Close Buy orders function

void CloseBuy()

{

for(int i=OrdersTotal()-1; i>=0; i—)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if(OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(),Bid,0,0);

}

}

//+——————————————————————+

//Counting the number of open Buy orders

int AmountBuy()

{

int amount = 0;

for(int i = OrdersTotal() -1; i>=0; i—)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if (OrderType()==OP_BUY)

amount++;

}

}

return(amount);

}

//+——————————————————————+

//Counting the number of open Sell orders

int AmountSell()

{

int amount = 0;

for(int i = OrdersTotal() -1; i>=0; i—)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if (OrderType()==OP_SELL)

amount++;

}

}

return(amount);

}

Попробуйте запустить советника на своем счете, переместив его на график. Вам также необходимо активировать кнопку Автотрейдинг (в верхней части MT4) и разрешить автоматическую торговлю в настройках Инструменты — Опции — Советники — Разрешить автоматическую торговлю.

Теперь, если значение индикатора RSI (Relative Strength Index) опустится ниже 30, откроется ордер на покупку объемом 0,01, а открытый ордер на продажу закроется. Если значение индикатора выше 70, то открывается ордер на продажу объемом 0,01, а открытый ордер на покупку закрывается. Вот и все! Мы запустили торгового робота на основе значений индикатора RSI.

Что означает код

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

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

Вспомогательными функциями являются:

CloseSell() — закрывает все ордера на продажу

CloseBuy() — закрывает все ордера на покупку

AmountSell()- подсчитывает все ордера на продажу

AmountBuy()- подсчитывает все ордера на покупку.

Представьте, что ваш телевизор сломался, и вы вызываете специалиста, чтобы он его починил, потому что вы не знаете механизмов телевизора, но специалист знает все о починке устройства. Это значит, что данный специалист выполняет для вас определенную функцию — ремонт телевизора. Аналогично, главная функция вызывает вспомогательные функции OnTick() для выполнения определенных действий.

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>=70 && AmountSell()==0)

Приведенный выше код буквально означает следующее: если значение индикатора RSI больше или равно 70 и количество открытых ордеров на продажу равно 0. Чтобы избежать открытия более одного ордера на продажу, мы вызываем функцию «AmountSell», которая считает только количество открытых ордеров на продажу.

Затем мы проверяем, есть ли открытые ордера на покупку, и если есть (больше 0), то закрываем их:

if (AmountBuy()>0) CloseBuy()

Здесь мы вызываем функцию CloseBuy(), которая помогает нам закрыть ордера на покупку. Эта функция выполняет только закрытие ордеров на покупку, больше ничего.

Затем мы открываем ордер на продажу:

OrderSend(Symbol(),1,0.01,Bid,0,0,0,»»,0,0,0);

Аналогично пишем условие для открытия ордера на покупку:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)<=30 &&=»» AmountBuy()=»=0)

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

Не так уж и сложно, не правда ли?

Чтобы получить более подробную информацию о функциях, предоставляемых языком MQL4, выберите интересующую вас функцию и нажмите F1. Там вы найдете соответствующую документацию и описание всех функций.

Похожие статьи

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

Ваш адрес email не будет опубликован.