Руководство по советникам

Как установить форекс советник - инструкция

Справка по установке, настройке и использованию форекс советников для Metatrader 4 , а также ответы на часто задаваемые вопросы по работе с торговыми роботами на Forex.

Вначале: Что такое советник (Expert Advisor или сокращенно ЕА)? Торговый эксперт — это торговый алгоритм в виде mql-кода.

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

Установка советников

Как установить форекс советник в Metatrader 4 2015

1. Прежде всего нам необходимо скачать и установить терминал Metatrader 4.

2. Впервые скачав архив с экспертом, пользователь ищет файл .ехе , как для установки обычных программ. Обычно не находит. Иногда продавцы систем предоставляют такой файл, но все что он делает — распределяет файлы по папкам. Мы вполне можем сделать это самостоятельно.

Итак, смотрим какие файлы у нас есть в наличии. Обычно это файл самого советника (.ех4 или .mql — для торговли подойдет и тот и тот) и какие-то вспомогательные файлы (индикаторы или библиотеки).

3. Файл советника (.ex4 или .mql) нужно поместить в папку MQL4/experts в каталоге данных вашего терминала.

Чтобы попасть в каталог данных, в терминале нажимаем Файл -> Открыть каталог данных

Каталог данныхОткроется папка, в ней мы заходим в раздел MQL4 в каталог Experts. И туда копируем файлы наших советников. Закрываем папку, перезапускаем МТ4.

Копирование советников

4. Если присутствуют дополнительные файлы, их тоже нужно раскидать по папкам внутри каталога данных Метатрейдер 4.

  • Файл .dll — библиотека, часто идет в комплекте с коммерческими советниками. Этот файл необходимо поместить в папку Каталог данных/MQL4/Libraries
  • Если присутствуют файл(ы) .set (шаблоны настроек советника),их перемещаем в Каталог данных/MQL4/Presets
  • Иногда в комплекте с советниками идут индикаторы, необходимые для работы эксперта. Представлены они файлами .ех4 (или .mql). Их помещаем в папку Каталог данных/MQL4/Indicators

5. Открываем торговый терминал, заходим Сервис->Настройки
Выбираем вкладку Советники и проставляем галочки как на рисунке ниже. Жмем ОК

Сервис-настройки-мт4

6. Находим окошечко с названием Навигатор

Если у вас нет такого окошечка на жмите на кнопку вверху терминала.

В окне навигатора нажимаем плюсик напротив раздела Советники

Из выпавшего списка мышкой перетаскиваем нужный советник на заранее открытый график с валютной парой и таймфреймом, подходящими для работы эксперта(обычно указывается в описании.)

7. Появляется окно настроек советника, выглядит примерно так

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

8.После изменения настроек жмем ОК. На графике вверху справа появится смайлик.

Если он улыбается, значит все в порядке, — советник работает. Если нет, то на графике с советником жмем правой кнопкой мыши, выбираем Советники->Свойства (так мы попадем в окно настроек советника), выбираем вкладку Общие и проверяем, чтобы галочки стояли как на скрине ниже

Также нужно проверить, чтобы кнопка

кнопка авто-торговля

вверху терминала была зеленой, если она красная, — нажмите на нее мышкой.

9Основные настройки.

Настройки могут выражаться в числах(например торговый лот) или в виде вкл./выкл.

Вкл.-включить,обычно отображается как true

Выкл.-выключить, обычно отображается как false

Т.е. если напротив какого-то параметра есть выбор truefalse , то мы таким образом можем его включить (true) или выключить (false).

Конечно для разных советников описание параметров будет сильно отличаться, но есть ряд настроек, которые повторяются в большинстве экспертов:

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

MicroLots — вкл/выкл , торговля микро-лотами 0.01,0.02,0.03 ….

MoneyManagement — вкл./выкл. При включении этого параметра, советник будет сам определять размер торгового лота.

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

MagicNumber — код, по которому советник определяет свои позиции, может быть любым. Однако нельзя, чтобы у двух советников на одном счету был одинаковый magic. Иначе может возникнуть путаница с ордерами.

GmtOffset — см. Как выставить правильный GMToffset


Ответы на частые вопросы по работе с советниками

ВЯ установил советник, уже 2 часа прошло, а он не открывает позиций. Что не так?

О. Все так. Советник откроет ордер тогда, когда появятся подходящие условия. Наберитесь терпения. Причем эксперты, которые торгуют очень часто (большой привет Илану), как правило сливают депозит. Оно вам надо? Лучше реже, но лучше.

ВЯ пробую изменить настройки, а они не изменяются, — когда снова открываю настройки — они те же!!!

О. Изменять параметры эксперта нужно на графике с прикрепленным советником, а не в окне Навигатора.

ВПочему значок советника в окне навигатора серый, а не цветной? Он что не активен?

О. Активен. Просто это означает, что у вас нет исходника mql-кода. Если вы не знакомы с программированием, для вас нет никакой разницы. Советник все равно будет торговать также.

В. Советник закрыл сделку в минус!!! Я в панике! Может в настройках что-то надо исправить?

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

В. В комплекте с советником идут индикаторы. Что с ними делать? Ставить на график?

О. Если в работе советника используются дополнительные форекс индикаторы, их нужно поместить в папку Каталог данных/MQL4/Indicators. Вешать их на график не обязательно, достаточно прикрепить только один советник.

ВМожно ли на одном счету запустить сразу 2 разных советника?

О. Да, конечно. Для каждого эксперта должно быть открыто отдельное окно с графиком и ни в коем случае не должны совпадать MagicNumber.

В. А как запустить одновременно два терминала одного ДЦ? Я хочу чтобы и демо и реал одновременно торговали.

О.Нужно установить второй терминал в папку с другим названием. Например Metatrader4-2.

ВА можно торговать руками на том счету, где работает советник?

О. Да. Советник не тронет ваши ордера.

В. А могу я вручную закрывать ордера, открытые роботом?

О. Можете. Но будьте внимательны, — не все боты воспринимают адекватно закрытие ордера вручную. Например, после закрытия вами сделки, советник может вновь открыть такую же.

ВСкачал советник, а он не тестируется, в чем дело?

О. Если в советнике есть параметр AutoGmT,его нужно отключить и выставить вручную для работы в Тестере Стратегий.

В. Будет ли работать советник, если я закрою терминал или выключу компьютер?

О. Нет. Компьютер и терминал должны работать. Как вариант можете рассмотреть использование VPS сервера .

В. А если я перезагружу компьютер и снова открою терминал? Продолжит ли советник работу или надо заново все ставить?

О. В таком случае советник без проблем продолжит свою работу. Но если во время того как вы перезагружали компьютер возникнет сигнал к открытию позиции, советник может его пропустить, т.к. не работал во время появления сигнала.

В. А как можно протестировать советник на исторических данных?

О. Посмотрите видеоурок «Как тестировать советник».

В. У меня на счету торгуют несколько экспертов. Как вычислить прибыльность каждого по отдельности?

О. см. Как понять сколько наторговал каждый советник

В. У меня счет в рублях. Какие настройки ставить в мани-менеджменте советника?

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

С уважением, Власов Павел
Tlap.com

Введение

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

1. Торговая стратегия

Что будет делать наш советник:

  • Он будет следить за некоторыми индикаторами и при определенном условии (или условиях) помещать торговый запрос (на продажу или покупку) в зависимости от условий.

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

  1. Мы будем использовать индикатор Moving Average (скользящие средние) с периодом 8 (вы можете выбрать любой период, но в данной стратегии мы будем использовать период 8).
  2. Мы хотим, чтобы наш советник покупал, если 8-периодная скользящая средняя (далее для удобства будем называть ее MA-8) возрастает и текущая цена закрытия находится выше ее; советник должен продавать, когда MA-8 падает и цена закрытия находится ниже MA-8.
  3. Также мы собираемся использовать другой индикатор, называемый Average Directional Movement (ADX) с периодом 8 для определения факта наличия тренда на рынке. Это нужно для того, чтобы входить в рынок, когда он находится в состоянии тренда. Для того, чтобы это реализовать, мы будем помещать торговый запрос (на покупку или продажу) при наступлении условий, указанных выше, а также при значениях ADX, больших 22. Если ADX>22, но уменьшается или ADX<22, мы не будем помещать торговые запросы даже при наступлении условий, изложенных в пункте 2.
  4. Мы хотим защитить себя установкой ордеров Stop Loss в 30 пунктов, Take Proft установим на уровне 100 пунктов.
  5. Также мы хотим, чтобы советник проверял возможности для продажи/покупки только при формировании нового бара, при этом советник должен помещать ордер на покупку только в случае сигнала на покупку и отсутствия открытых длинных позиций. Аналогично в случае продажи — условия на продажу и отсутствие открытых коротких позиций.

Стратегия разработана, теперь время начать писать код.

2. Пишем советник

2.1 Мастер MQL5

Начнем с запуска редактора MetaQuotes Language Editor 5. Затем нажимаем Ctrl-N или на кнопку «Создать» в панели инструментов.

Рисунок 1. Создание нового документа MQL5

Рисунок 1. Создание нового документа MQL5

В окне Мастера MQL5 выбираем «Советник» и нажимаем «Далее», как показано на рис. 2:

Рисунок 2. Выбор типа создаваемой программы

Рисунок 2. Выбор типа создаваемой программы

В следующем окне в поле «Имя» напишите имя, которое вы хотите дать вашему советнику, я написал «My_First_EA«. Вы можете указать свое имя в поле «Автор» и адрес в виде ссылки на ваш сайт или e-mail (если есть).

Рисунок 3. Общие свойства советника

Рисунок 3. Общие параметры советника

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

Рисунок 4. Входные параметры советника

Рисунок 4. Входные параметры советника

В нашем советнике нам нужно иметь возможность изменять Stop Loss, Take Profit, ADX Period and Moving Average Period, так что укажем их здесь.

Дважды кликнем мышкой по колонке «Имя» в параметрах и напишем наименование параметра, аналогично в колонках «Тип» и «Начальное значение» укажем тип данных параметра и начальные значения.

После этого, результат будет примерно следующий:

Рисунок 5. Типы данных входных параметров советника

Рисунок 5. Типы данных входных параметров советника

Как видно, мы выбрали тип integer (int) для всех параметров. Рассмотрим подробнее типы данных.

  • char: Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127.
  • uchar: Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar предназначен только для положительных значений. Минимальное значение равно нулю, максимальное значение равно 255. Первая буква u в названии типа uchar является сокращением слова unsigned (беззнаковый).
  • short: Целый тип short имеет размер 2 байта(16 бит) и, соответственно, позволяет выразить множество значений равное 2 в степени 16:  2^16=65 536. Так как тип short является знаковым и содержит как положительные, так и отрицательные значения, то диапазон значений находится между -32 768 и 32 767.
  • ushort: Беззнаковым типом short является тип ushort, который также имеет размер 2 байта. Минимальное значение равно 0, максимальное значение 65 535.
  • int: Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.
  • uint: Беззнаковый целый тип uint занимает в памяти 4 байта и позволяет выражать целочисленные значения от 0 до 4 294 967 295.
  • long: Целый тип long имеет размер 8 байт (64 бита). Минимальное значение -9 223 372 036 854 775 808, максимальное значение 9 223 372 036 854 775 807.
  • ulong: Целый тип ulong также занимает 8 байт и позволяет хранить значения от 0 до 18 446 744 073 709 551 615.

Как видно из описания различных типов данных, беззнаковые целые (uint) не предназначены для хранения отрицательных значений, любые попытки установить отрицательные значения могут привести к непредсказуемым результатам. Например, если вы хотите хранить отрицательные значения, нельзя для них использовать переменные типа uchar, uint, ushort, ulong.

Вернемся к нашему советнику. Для значений, меньших 127 или 255, для экономии памяти можно использовать значения типа char or uchar, соответственно, однако для удобства мы зададим их значения как тип int.

После того, как закончено определение необходимых входных параметров индикатора, нажмем на кнопку «Finish» и MetaQuotes Editor5 создаст шаблон кода, представленный ниже:

Для лучшего понимания, рассмотрим отдельно различные секции кода.

В верхней части кода (заголовок) определяются свойства советника. Как видно, это значения, которые были установлены в Мастере MQL5 на рис. 3.

В этой части кода также можно задать дополнительные параметры, например description (текст с кратким описанием советника), определить константы, включить дополнительные файлы или импортируемые функции.


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

  • #define
    Директива #define используется для определения констант. Записывается в виде:
  • #define identifier token_string
    Это означает, что компилятор заменит в коде переменные
    identifier численным значением, равным token_string.

Например:

#define ABC               100
#define COMPANY_NAME      «MetaQuotes Software Corp.»

В данном случае COMPANY_NAME будет означать строку «MetaQuotes Software Corp.», вместо ABC будет подразумеваться число, равное 100.

Более подробнее о директивах препроцессора можно прочитать в руководстве по MQL5. Идем далее.

Вторая часть заголовка в нашем коде — это секция входных параметров.

 

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

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

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

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

Например, можно проверить, достаточно ли баров на графике для работы нашего советника и т.п.

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


Функция OnDeinit вызывается при удалении советника с графика.

В нашем советнике, в данной функции мы будем освобождать хэндлы индикаторов, созданных в разделе инициализации.


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

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

Отметим, что советник не сможет производить торговые операции, если в авто-трейдинг не разрешен в клиентском терминале:

Рисунок 6. Авто-торговля включена

Рисунок 6. Торговля советником разрешена

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

2.2. Раздел входных параметров

input int      StopLoss=30;      
input int      TakeProfit=100;   
input int      ADX_Period=8;     
input int      MA_Period=8;      
input int      EA_Magic=12345;   
input double   Adx_Min=22.0;     
input double   Lot=0.1;          

int adxHandle; 
int maHandle;  
double plsDI[],minDI[],adxVal[]; 
double maVal[]; 
double p_close; 
int STP, TKP; 

Как видно, мы добавили новые параметры. Перед тем, как обсудить их предназначение, посмотрим на код. При помощи двойного слэша «//» в код можно помещать комментарии. При помощи комментариев мы можем описывать предназначение наших переменных или производимые нами действия. Комментарии позволяют улучшить понимание кода. Существуют два основных способа написания комментариев:

// глобальные переменные …

Это однострочный комментарий.

/*

  Это многострочный комментарий

*/

Это многострочный комментарий. Многострочные комментарии начинаются с пары символов «/*» и заканчиваются «*/».

При компиляции кода комментарии игнорируются компилятором.

Использование однострочных комментариев для входных параметров позволяет описать предназначение входных параметров. В этом случае вместо наименования параметров будут показаны комментарии, как показано ниже:

Рисунок 7. Входные параметры советника

Рисунок 7. Входные параметры советника

Вернемся к нашему коду.

Мы решили добавить дополнительные параметры в наш советник. Параметр EA_Magic (Magic Number)  будет использован для всех ордеров нашего советника. Минимальное значение ADX задано как переменная типа double. Значения типа double используются для констант, которые, наряду с целой частью, также могут содержать и дробную часть.

Например:

double mysum = 123.5678;

double b7 = 0.09876;

Количество лотов для торговли (Lot) представляет собой объем финансового инструмента, который мы хотим торговать.

Далее мы также объявили дополнительные переменные, которые будут использованы следующим образом: переменная adxHandle будет использоваться для хранения хэндла индикатора ADX, переменная maHandle для хэндла индикатора Moving Average. Динамические массивы plsDI[], minDI[], adxVal[] are будут использованы для хранения значений +DI, -DI и самого значения ADX для каждого бара графика. Численные значения индикатора Moving Average для каждого бара графика будут храниться в динамическом массиве maVal[].

Кстати, что представляют собой динамические массивы? Динамический массив — это массив, объявленный без указания размера. Другими словами, в квадратных скобках при его описании нет конкретного числа, указывающего его размер.

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

Пример:

double allbars[20]; // этот массив содержит 20 элементов — от 0 до 19

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

Переменные STP и TKP нужны для установки значений Stop Loss и Take Profit ордеров нашего советника.

2.3. Секция инициализации советника

int OnInit()
  {

   adxHandle=iADX(NULL,0,ADX_Period);

   maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);

   if(adxHandle<0 || maHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
     }

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

Хэндл индикатора ADX получаем при помощи функции iADX. В качестве аргументов ей передается символ графика symbol (NULL  также означает символ текущего графика), период/таймфрейм (0 означает таймфрейм текущего графика), период индикатора ADXкоторый будет использоваться для вычисления индикатора (ADX_Period мы определили в разделе входных параметров индикатора):

int  iADX(
   string          symbol,       
   ENUM_TIMEFRAMES  period,       
   int            adx_period     
   );

Хэндл индикатора Moving Average получаем при помощи функции iMA. Аргументы этой функции следующие:

  • symbol — Символьное имя инструмента, на данных которого будет вычисляться индикатор (можно использовать _symbol, symbol() или NULL для текущего символа).
  • period — Значение периода может быть одним из значений перечисления ENUM_TIMEFRAMES, (можно использовать  _period, period() или 0 для таймфрейма текущего графика).
  • ma_period — Период усреднения для вычисления скользящего среднего (который мы определили ранее в разделе входных параметров индикатора).
  • ma_shift — Сдвиг индикатора относительно ценового графика (мы используем 0).
  • ma_method — Метод усреднения. Может быть любым из значений MODE_SMA, MODE_EMA, MODE_SMMA или MODE_LWMA.
  • applied_price — Используемая цена. Может быть любой из ценовых констант ENUM_APPLIED_PRICE или хендлом другого индикатора.
int  iMA(
   string              symbol,        
   ENUM_TIMEFRAMES      period,        
   int                 ma_period,    
   int                 ma_shift,     
   ENUM_MA_METHOD       ma_method,    
   ENUM_APPLIED_PRICE   applied_price  
   );

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

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

 

Мы решили хранить значения Stop Loss и Take Profit в определенных ранее переменных STP и TKP. Почему мы это сделали?

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

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

Предопределенной переменной _Digits или функцией Digits(). Для 3-х и 5-ти значных котировок мы умножаем значения Stop Loss и Take Profit на 10.

2.4. Раздел деинициализации советника


Поскольку эта функция вызывается при прекращении работы советника или удалении советника с графика, здесь мы освобождаем хэндлы индикаторов, созданные в процессе инициализации. Мы создали два индикатора, ADX и Moving Average.

Для их удаления мы используем функцию IndicatorRelease(). Эта функция имеет лишь один параметр (хэндл индикатора).

bool  IndicatorRelease(
   int       indicator_handle,     // хэндл индикатора
   );

Функция удаляет хэндл индикатора и освобождает расчетную часть индикатора, если ею больше никто не пользуется.

2.5 Раздел OnTick советника

Первое, что мы здесь делаем — проверяем достаточно ли баров на текущем графике. Количество баров на любом графике можно узнать при помощи функции Bars. У нее есть два входных параметра, первый — symbol, (символ текущего графика можно получить используя предопределенную переменную _Symbol или функцию Symbol()) и period  или timeframe  текущего графика (для текущего графика  — предопределенная переменная _Period или функция Period()).

При количестве баров на графике менее 60, наш советник не будет работать и выйдет из функции OnTick. Функция Alert показывает сообщение в отдельном окне. Эта функция выводит значения аргументов/параметров, разделенных запятыми. В нашем случае выводится только одно значение в виде строки и завершается работа функции OnTick.



void OnTick()
  {

   if(Bars(_Symbol,_Period)<60) 
     {
      Alert("На графике меньше 60 баров, советник не будет работать!!");
      return;
     }





   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;


   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) 
     {
      if(Old_Time!=New_Time[0]) 
        {
         IsNewBar=true;   
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }


   if(IsNewBar==false)
     {
      return;
     }


   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) 
     {
      Alert("На графике менее 60 баров, советник работать не будет!!");
      return;
     }


   MqlTick latest_price;       
   MqlTradeRequest mrequest;    
   MqlTradeResult mresult;      
   MqlRates mrate[];           
   ZeroMemory(mrequest);       

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

Мы начнем с объявления статической переменной Old_Time, в которой будем хранить время бара. Мы определили ее статической, поскольку нам нужно, чтобы ее значение сохранялось при новом вызове функции. Тогда у нас будет возможность проверять ее значение с переменной New_Time, которая также объявлена типа datetime, но в виде массива из одного элемента, она будет использоваться для хранения времени текущего бара. Также мы объявляем переменную IsNewBar типа boolean, и устанавливаем ее значение в false. Ее значение будет установлено в true только в  случае определения факта появления нового бара.

Для получения времени бара используется функция CopyTime. Она копирует время бара в массив New_Time, состоящий из одного элемента. В случае успеха, мы сравниваем значение времени бара с сохраненным ранее временем предыдущего бара. Если они различны, это означает, что появился новый бар и переменная IsNewBar устанавливается в true, а значение текущего времени бара сохраняется в переменной Old_Time.

Таким образом, переменная IsNewBar будет указывать на факт появления нового бара. Если ее значение равно false, мы завершаем выполнение функции OnTick.

Обратите внимание на строчку:

if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);

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

Следующее, что мы собираемся cделать — проверить наличие достаточного количества баров для работы. Зачем делать это снова?

Мы хотим быть уверены в том, что наш советник работает корректно.

Следует отметить, что функция OnInit вызывается только один раз при присоединении советника к графику, а функция OnTick вызывается каждый раз при поступлении нового тика (ценовой котировки).

Как можно видеть, мы это делаем по-другому. Мы сохраняем общее количество баров в истории в новой переменной Mybars, определенной внутри функции OnTick:

   int Mybars=Bars(_Symbol,_Period);

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

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

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

MqlTick

Эта структура используется для хранения последних цен по символу.

struct MqlTick
  {
   datetime     time;          //
Время последнего обновления цен
   double       bid;           //
Текущая цена Bid
   double       ask;           //
Текущая цена Ask
   double       last;          //
Текущая цена последней сделки (Last)
   ulong        volume;        //
Объем для текущей цены Last
  };

Любая переменная, объявленная типа может быть легко использована для получения текущих значений цен Ask, Bid, Last и Volume, достаточно вызвать функцию SymbolInfoTick.

Мы объявили переменную latest_price как структуру MqlTick, так что мы можем использовать ее для получения цен Bid и Ask.

MqlTradeRequest

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

struct MqlTradeRequest
  {
   ENUM_TRADE_REQUEST_ACTIONS    action;       //
Тип выполняемого действия
   ulong                         magic;        //
Идентификатор magic number эксперта
   ulong                         order;        //
Тикет ордера
   string                        symbol;       //
Имя торгового инструмента
   double                        volume;       //
Запрашиваемый объем сделки в лотах
   double                        price;        //
Цена
   double                        stoplimit;    //
Уровень StopLimit ордера
   double                        sl;           //
Уровень Stop Loss ордера
   double                        tp;           //
Уровень Take Profit ордера
   ulong                         deviation;    //
Максимально приемлемое отклонение от запрашиваемой цены
   ENUM_ORDER_TYPE               type;          //
Тип ордера
   ENUM_ORDER_TYPE_FILLING       type_filling;  //
Тип ордера по исполнению
   ENUM_ORDER_TYPE_TIME          type_time;     //
Тип ордера по времени действия
   datetime                      expiration;    //
Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED)
   string                        comment;       //
Комментарий к ордеру
  };

Любая переменная, объявленная как структура MqlTradeRequest может быть использована для отправки запросов на совершение торговых операций. В нашем случае мы объявили переменную mrequest как структуру MqlTradeRequest.

MqlTradeResult

Результат выполнения торговой операции возвращается в специальную предопределенную структуру типа MqlTradeResult. Любая переменная типа MqlTradeResult может быть использована для доступа к результату выполнения торгового запроса.

struct MqlTradeResult
  {
   uint     retcode;          //
Код результата операции
   ulong    deal;             //
Тикет сделки, если она совершена
   ulong    order;            //
Тикет ордера, если он выставлен
   double   volume;           //
Объем сделки, подтверждённый брокером
   double   price;            //
Цена в сделке, подтверждённая брокером
   double   bid;              //
Текущая рыночная цена Bid
   double   ask;              //
Текущая рыночная цена Ask
   string   comment;          //
Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
  };

В нашем случае переменная mresult объявлена как структура тип MqlTradeResult.

MqlRates

Цены (Open, Close, High, Low), время, объем каждого бара, и спред символа хранятся в этой структуре. Любой массив, определенный как массив типа MqlRates может быть использован для хранения значений цен, объемов и спредов по символу.

struct MqlRates
  {
   datetime time;         //
Время начала периода
   double   open;         //
Цена открытия
   double   high;         //
Наивысшая цена за период
   double   low;          //
Наименьшая цена за период
   double   close;        //
Цена закрытия
   long     tick_volume;  //
Тиковый объем
   int      spread;       // С
пред
   long     real_volume;  //
Биржевой объем
  };

Для наших целей мы определили массив mrate[], который будет использоваться для хранения этой информации.


   ArraySetAsSeries(mrate,true);

   ArraySetAsSeries(plsDI,true);

   ArraySetAsSeries(minDI,true);

   ArraySetAsSeries(adxVal,true);

   ArraySetAsSeries(maVal,true);

Здесь мы устанавливаем индексацию как в таймсериях для всех массивов, которые будут использоваться нами. Это позволит нам быть уверенными в том, что скопированные массивы будут иметь нумерацию как в таймсериях (справа налево т.е. 0, 1, 2, 3 и т.д.). Это производится при помощи функции ArraySetAsSeries().

bool  ArraySetAsSeries(
   
void  array[],     // массив по ссылке
   bool  set          // true означает обратный порядок индексации
   );

Следует отметить, что это можно сделать однократно в функции инициализации советника. Тем не менее, для последовательности изложения я решил рассмотреть этот вопрос здесь.

   if(!SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");
      return;
     }

Мы используем функцию SymbolInfoTick для получения текущих котировок. Эта функция имеет два аргумента — символ графика и структура типа MqlTick (latest_price). Снова, проверяем корректность выполнения функции и выводим сообщение в случае ошибки.

   if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
      return;
     }

Затем, при помощи функции CopyRates мы копируем информацию последних трех баров в массив типа MqlRates. Функция CopyRates используется для получения исторических данных по указанному символу, периоду и запрашиваемому количеству данных, которые затем помещаются  в массив типа MqlRates.

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем
   int              count,             // количество данных для копирования
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );

Имя символа и текущий таймфрей получаем используя предопределенные переменные _Symbol и _Period. Начиная с текущего бара Bar 0, имеющего индекс 0, мы возьмем только три бара: Bars 0, 1, и 2. Результат будет помещен в наш массив mrate[].

Массив mrate[] теперь содержит все данные по ценам, времени, объемам и спредам для баров 0, 1 и 2. Поэтому для того, чтобы получить нужное свойство любого бара, мы используем выражение типа:

mrate[bar_number].bar_property

например, для каждого из этих баров:

mrate[1].time   // время начала бара 1
mrate[1].open   // цена открытия бара 1
mrate[0].high   // наибольшая цена бара 0 (текущий бар), и т.д.

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

Далее, используя функцию CopyBuffer, мы копируем значения индикаторов в динамические массивы:

int  CopyBuffer(
   int       indicator_handle,     
   int       buffer_num,           
   int       start_pos,            
   int       count,                
   double    buffer[]              
   );

В качестве хэндла индикатора указывается хэндл, полученный в функции OnInit. Что касается номеров буферов индикатора, то индикатор ADX имеет 3 (три) буфера:

  • 0 — MAIN_LINE,
  • 1 — PLUSDI_LINE,
  • 2 — MINUSDI_LINE. 

Индикатор The Moving Average имеет только 1 (один) буфер:

  • 0 – MAIN_LINE.

Начиная с текущего бара (0), мы копируем также еще два бара. Таким образом, полное количество баров равно 3 (бары 0-й,1-й и 2-й). Массив buffer[] в параметре функции CopyBuffer, это массив, куда будут помещены данные. В нашем случае это динамические массивы adxVal, plsDI, minDI и maVal.

   if(CopyBuffer(adxHandle,0,0,3,adxVal)<0 || CopyBuffer(adxHandle,1,0,3,plsDI)<0
      || CopyBuffer(adxHandle,2,0,3,minDI)<0)
     {
      Alert("Ошибка копирования буферов индикатора ADX - номер ошибки:",GetLastError(),"!!");
      return;
     }
   if(CopyBuffer(maHandle,0,0,3,maVal)<0)
     {
      Alert("Ошибка копирования буферов индикатора Moving Average - номер ошибки:",GetLastError());
      return;
     }

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

Важно отметить, что функции CopyBuffer() and the CopyRates() возвращают общее количество скопированных данных или -1 в случае ошибки. Вот почему мы проверяем возвращаемые значения, они будут меньше 0 в случае ошибки.

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

Для того, чтобы реализовать это, сначала объявим две переменные типа boolean (Buy_opened и Sell_opened), которые будут установлены в TRUE в случае наличия соответствующих открытых позиций.

    bool Buy_opened=false;  //  
    bool Sell_opened=false; 
    
    if (PositionSelect(_Symbol) ==true)  
    {
         if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
         {
            Buy_opened = true;  
         }
         else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
         {
            Sell_opened = true; 
         }
    }

Для того, чтобы узнать наличие открытой позиции, мы использовали функцию PositionSelect, которая возвращает TRUE в случае наличия открытой позиции по указанному символу и FALSE при отсутствии открытой позиции.

bool  PositionSelect(
   string  symbol      
   );

В качестве основного аргумента функции передается наименование символа, наличие позиции по которому следует проверить. Здесь для имени символа мы использовали предопределенную переменную _Symbol.

В случае, если функция вернула TRUE (позиция существует), мы хотим проверить ее тип (покупка или продажа). Для этого мы используем функцию PositionGetInteger, она возвращает тип открытой позиции, в случае, если в качестве параметра задан запрос свойства POSITION_TYPE. В результате возвращается одно из значений перечисления  ENUM_POSITION_PROPERTY_INTEGER: POSITION_TYPE_BUY или POSITION_TYPE_SELL.

long  PositionGetInteger(
   ENUM_POSITION_PROPERTY  property_id    
   );

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

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

p_close=mrate[1].close;  

После того, как это сделано, перейдем к следующему шагу.


   bool Buy_Condition_1 = (maVal[0]>maVal[1]) && (maVal[1]>maVal[2]); 
   bool Buy_Condition_2 = (p_close > maVal[1]);         
   bool Buy_Condition_3 = (adxVal[0]>Adx_Min);          
   bool Buy_Condition_4 = (plsDI[0]>minDI[0]);          


   if (Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4)
        {
         
         if (Buy_opened) 
         {
            Alert("Уже есть позиция на покупку !!!");
            return; 
         }
         mrequest.action = TRADE_ACTION_DEAL;                                 
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);          
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); 
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); 
         mrequest.symbol = _Symbol;                                         
         mrequest.volume = Lot;                                            
         mrequest.magic = EA_Magic;                                        
         mrequest.type = ORDER_TYPE_BUY;                                     
         mrequest.type_filling = ORDER_FILLING_FOK;                          
         mrequest.deviation=100;                                           
         
         OrderSend(mrequest,mresult);

Рассмотрим условия покупки.

Отметим, что выражения, приведенные выше, соответствуют стратегии, которая обсуждалась ранее. Мы объявили переменные типа bool для каждого из условий, которые должны быть выполнены перед установкой ордера. Переменные типа bool могут принимать только одно из значений: TRUE или FALSE.

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

bool Buy_Condition_1 = (maVal[0]>maVal[1]) && (maVal[1]>maVal[2]);

Здесь мы проверяем значение скользящей средней MA-8 на барах 0, 1 и 2. Если значение MA-8 на текущем баре больше, чем на предыдущем (бар 1), и при этом значение MA-8 на баре 1 больше, чем на баре 2, это означает, что скользящая средняя MA-8 возрастает. Это одно из условий покупки.

bool Buy_Condition_2 = (p_close > maVal[1]); 

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

bool Buy_Condition_3 = (adxVal[0]>Adx_Min);

Теперь мы хотим проверить, является ли значение ADX (ADX для бара 0), больше, чем минимальное значение, указанное во входных параметрах советника. Если это условие выполнено, это означает, что текущее значение ADX больше минимального необходимого, также нам нужно убедиться в том, что значение plusDI больше, чем minusDI. Это производится следующим выражением:

bool Buy_Condition_4 = (plsDI[0]>minDI[0]);

Если все эти условия соблюдаются, то в случае наличия открытой позиции на покупку сообщаем о ее наличии и завершаем выполнение функции. Если нет открытой длинной позиции, для отправки торгового запроса мы подготавливаем переменную mrequest типа MqlTradeRequest, которая была объявлена ранее.

  • Поле action, являющееся типом торговой операции задается как TRADE_ACTION_DEAL, поскольку мы помещаем ордер в режиме немедленного исполнения. Для модификации ранее установленного отложенного ордера нужно указать TRADE_ACTION_MODIFY, для его удаления — TRADE_ACTION_REMOVE. Для цены открытия ордера мы используем значение поля Ask структуры latest_price. Значение цены Stop Loss получается вычистанием из цены Ask заданного значения StopLoss в пунктах. Цена Take Profit вычисляется прибавлением заданного значения TakeProfit в пунктах. Как видно, при указании цен мы использовали функцию NormalizeDouble, которая округляет числа до заданной точности — при отправке запроса на торговый сервер следует указывать нормализованные цены.
  • В поле symbol указывается текущий символ (_Symbol или Symbol()),
  • В поле type — тип ордера, здесь ORDER_TYPE_BUY. Для ордера на продажу нужно указать тип ORDER_TYPE_SELL.
  • В поле type_filling — тип  исполнения ордера, значение ORDER_FILLING_FOK означает что сделка должна быть выполнена в указанном объеме по указанной (или лучше) цене. Если на рынке отсутствует возможность исполнить указанный объем, ордер не будет выполнен.

У функции OrderSend() два аргумента — переменные типа  MqlTradeRequest и MqlTradeResult.

bool  OrderSend(
   MqlTradeRequest&  request      // структура запроса
   MqlTradeResult&   result       // структура ответа
   );

Как видно, мы использовали наши переменные mrequest и mresult в качестве аргументов функции OrderSend().

         
         if(mresult.retcode==10009 || mresult.retcode==10008) 
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }

После отправки ордера, мы теперь используем значение переменной mresult для проверки результата. Если наш ордер был успешно выполнен, нужно дать об этом знать, также в случае ошибки также нужно информировать о результате. Доступ к коду ошибки и номеру ордера можно получить, используя поля mresult.retcode и mresult,order соответственно.

Код возврата торгового сервера 10009 означает, что запрос OrderSend был успешно выполнен, а код 10008 показывает, что ордер помещен в очередь на исполнение. Поэтому мы должны проверить любой из этих вариантов — в таком случае мы уверены в том, что ордер был выполнен или помещен в очередь на исполнение.

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


   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  
   bool Sell_Condition_2 = (p_close <maVal[1]);                         
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         
   
 
   if (Sell_Condition_1 && Sell_Condition_2)
       {
         if (Sell_Condition_3 && Sell_Condition_4)
           {
            
            if (Sell_opened) 
            {
               Alert("Уже есть позиция на продажу!!!");
               return; 
            }
            mrequest.action = TRADE_ACTION_DEAL;                                
            mrequest.price = NormalizeDouble(latest_price.bid,_Digits);          
            mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); 
            mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); 
            mrequest.symbol = _Symbol;                                         
            mrequest.volume = Lot;                                            
            mrequest.magic = EA_Magic;                                        
            mrequest.type= ORDER_TYPE_SELL;                                     
            mrequest.type_filling = ORDER_FILLING_FOK;                          
            mrequest.deviation=100;                                           
            
            OrderSend(mrequest,mresult);

Точно так же, в разделе выше, мы объявили переменные типа bool для каждого из условий, которые должны удовлетворяться для помещения ордера на продажу. Поэтому торговая стратегия для продажи также состоит из четырех условий. Если условие выполняется, соответствующая переменная устанавливается в TRUE, иначе FALSE. Как и для случая с покупкой, рассмотрим их подробней.

   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);

Здесь мы проверяем значения MA-8 для баров 0, 1 и 2. Если значение MA-8 текущего бара (0) меньше, чем значение предыдущего бара 1, а также MA-8 для бара 1 меньше, чем значение для бара 2, это значит, что MA-8 падает. В этом случае одно условий для продажи удовлетворяется.

   bool Sell_Condition_2 = (p_close <maVal[1]); 

В этом выражении проверяется условие того, что цена закрытия меньше чем значение MA-8 соответствующего бара (бара 1). Если цена закрытия меньше значения скользящей средней, это значит второе условие удовлетворяется. Затем проверяются следующие условия.

   bool Sell_Condition_3 = (adxVal[0]>Adx_Min); 

Здесь проверяется условие того, что текущее значение ADX (бара 0) больше чем значение, указанное во входных параметрах советника. Также нужно проверить условие того, что значение MinusDI больше, чем plusDI. Это делается следующим образом:

bool Sell_Condition_4 = (plsDI[0]<minDI[0]);

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

Главное отличие в способе вычисления цен Stop Loss и Take Profit. Поскольку производится продажа, используется Bid цена, которая была получена ранее в структуру latest_price. Также здесь указан другой тип ордера — ORDER_TYPE_SELL.

Аналогично, мы используем функцию NormalizedDouble для цены ордера и цен StopLoss и TakeProfit — всегда нужно использовать нормализованные цены при отсылке запроса на торговый сервер.

Так же, как и для ордеров Buy, мы должны проверить результат торгового запроса. Мы используем тот же код, как и для случая покупки.

         
         if(mresult.retcode==10009 || mresult.retcode==10008) 
           {
            Alert("Ордер Sell успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Sell не выполнен - код ошибки:",GetLastError());
            return;
           }

3. Отладка и тестирование советника

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

3.1 Отладка

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

Далее мы рассмотрим процесс отладки советника, сначала без установки точек останова, затем с ними. Для этого, нужно в редакторе выбрать таймфрейм, на котором будет производится отладка нашего советника. В меню «Сервис» главного меню нужно выбрать «Настройки…»:

Рисунок 8. Настройка параметров отладки

Рисунок 8. Настройка параметров отладки

После появления окна «Параметры», выберите валютную пару, нужный период/таймфрейм и нажмите кнопку OK:

Рисунок 9. Установка параметров отладки

Рисунок 9. Установка параметров отладки

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

Для того, чтобы добавить точку останова, нужно перейти к строке, на которой нужно остановиться. В левой части редактора, рядом с границей редактора кода, нужно дважды кликнуть мышкой, при этом появится маленький голубой круг с белым квадратом внутри (рис. 10). Альтернативным вариант добавления точки останова — перейти на строку и нажать клавишу F9. Для того, чтобы убрать точку останова следует повторно нажать F9, либо дважды кликнуть по кругу.

Рисунок 10. Ставим точку останова

Рисунок 10. Ставим точку останова

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

Для удобства описания, они пронумерованы от 1 до 5.

Установим эти 5 точек останова на строки, указанные на рис. 11. Точку останова 1 мы установили ранее.

Рисунок 11. Установка дополнительных точек останова

Рисунок 11. Установка дополнительных точек останова

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

Для начала запуска режима отладки, нажмите клавишу F5 или зеленкую кнопку в панели инструментов редактора MetaEditor:

Рисунок 12. Запуск отладчика

Рисунок 12. Запуск отладчика

Сначала редактор откомпилирует код, если при компиляции не возникло ошибок, он покажет их в отчете во вкладке «Ошибки»:

Рисунок 13. Отчет компиляции

Рисунок 13. Отчет компиляции

Имейте ввиду, что факт успешной компиляции не означает отсутствия ошибок в коде. В зависимости от того, как написан ваш код, могут возникать ошибки времени выполнения (runtime errors). Например, некоторые выражения могут компилироваться правильно, но работать неверно. Давайте лучше посмотрим режим отладки в работе.

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

Рисунок 14. Установка входных параметров советника для отладки

Рисунок 14. Установка входных параметров советника для отладки

В левом верхнем углу графика видно, что советник присоеден к графику.

При запуске функции OnTick(), произойдет остановка работы советника, он остановится в точку останова 1.

Рисунок 15. Режим отладки: остановка работы советника в первой точке останова

Рисунок 15. Режим отладки: остановка работы советника в первой точке останова

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

Перед тем, как продолжить, имеет смысл познакомиться с командами отладчика. Если посмотреть на панель инструментов редактора MetaEditor, можно увидеть, что теперь стали доступны три кнопки, которые ранее были серого цвета. Причина этого в том, что теперь мы находимся в режиме отладки. Эти три команды используются для исполнения в режиме отладки (Step into, Step over, Step out)»

Рисунок 16. Режим отладки: команда "Step into"

Рисунок 16. Режим отладки: команда «Step into» (Шаг с заходом)

Команда Step Into (Шаг с заходом) переходит к следующему шагу, при этом производится заход внутрь любой вызываемой функции в коде. Для исполнения данной команды, нажмите эту кнопку или клавишу F11. Далее мы будем использовать данную команду при пошаговой отладке нашего кода.

Рисунок 17. Режим отладки: команда "Step over"

Рисунок 17. Режим отладки: команда «Step over» (Шаг с обходом)

Команда Step over (Шаг с обходом), в свою очередь, не производит заход отладчика в функции, которые вызываются в коде. Для исполнения данной команды нужно нажать эту кнопку или клавишу F10.

Рисунок 18. Режим отладки: команда "Step out"

Рисунок 18. Режим отладки: команда «Step out» (Шаг наружу)

Для перехода к выполнению одного шага программы на один уровень выше есть команда Step Out (Шаг наружу), которая вызывается нажатием на соответствующую кнопку или комбинацией клавиш Shift+F11.

В нижней части редактора, вы видите окно «Инструменты»(Toolbox). Вкладка «Отладка» содержит следующие колонки:

  • Файл : Имя файла, с которым производится работа.
  • Функция : Имя функции, которая вызывается в настоящий момент.
  • Строка : Номер строки кода.
  • Выражение : В этой колонке вы можете указать любое выражение или переменную, за значениями которых вы желаете наблюдать в процессе выполнения программы.
  • Значение : В этой колонке показываются текущие значения указанных выражений/переменных.
  • Тип : В данной колонке показан тип данных, для которых установлен режим наблюдения.

Вернемся к процессу отладки…

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

  • Old_Time (старое время бара)
  • New_Time[0] (время текущего бара)
  • copied (количество скопированных данных времени)
  • IsNewBar (флаг, показывающий появление нового бара)
  • Mybars (полное количество баров в истории) – наш советник использует это значение

Также можно добавить в мониторинг и другие переменные, например значения технических индикаторов ADX, MA-8 и т.д.

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

Рисунок 19. Монитор выражений

Рисунок 19. Монитор выражений

Укажите переменные/выражения для наблюдения:

Рисунок 20. Добавление выражений или переменных для наблюдения

Рисунок 20. Добавление выражений или переменных для наблюдения

Идем дальше…

Рисунок 21. Конманда "Step into" (Шаг с заходом) в действии

Рисунок 21. Конманда «Step into» (Шаг с заходом) в действии

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

Рисунок 22. Наблюдение за выражениями или переменными

Рисунок 22. Наблюдение за выражениями или переменными

Рисунок 23. Наблюдение за выражениями или переменными

Рисунок 23. Наблюдение за выражениями или переменными

Рисунок 24. Наблюдение за выражениями или переменными

Рисунок 24. Наблюдение за выражениями или переменными

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

Рисунок 25. Значения переменных при новом вызове функции OnTick

Рисунок 25. Значения переменных при новом вызове функции OnTick

Теперь запустим программу снова, на этот раз без точек останова. 

Рисунок 26. В режиме отладки при новом баре советник выводит сообщение

Рисунок 26. В режиме отладки при новом баре советник выводит сообщение

При каждом баре программа будет проверять условия на покупку/продажу, при наступлении условий будет производиться торговля и выводиться сообщение о результатах выполнения торговой операции:

Рисунок 27. Торговля советника

Рисунок 27. Торговля советника

Я думаю, можно оставить советник поработать еще несколько минут и попить кофе. Вернувшись обратно и сделав немного денег (шутка), нажмите красную кнопку Stop в MetaEditor для остановки процесса отладки.

Рисунок 25. Остановка режима отладки

Рисунок 28. Остановка режима отладки

Мы убедились, что наш советник работает, однако отметим, что клиентский терминал должен быть подключен к Интернет, в противном случае, он не будет работать.

3.2 Тестируем стратегию нашего советника

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

Рисунок 25. Запуск Тестера стратегий

Рисунок 29. Запуск Тестера стратегий

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

Рисунок 27. Окно Тестера стратегий

Рисунок 30. Окно Тестера стратегий

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

Рисунок 28. Вкладка "Настройки" Тестера

Рисунок 31. Вкладка «Настройки» Тестера

  1. Выберите советника, который нужно протестировать.
  2. Выбор валютной пары для тестирования.
  3. Выбор периода/таймфрейма для тестирования (выберем H2).
  4. Выберите «Select Custom» чтобы производить тестирование на указанном историческом интервале.
  5. Выбор дат начала и окончания тестирования.
  6. Выберем режим торговли «Обычный».
  7. Выбор начального депозита для тестирования.
  8. Не будем использовать оптимизицию параметров советника (Отключена)
  9. Нажмите кнопку «Старт», когда будете готовы начать тестирование.

Перед тем, как нажать кнопку «Старт», посмотрим на другие вкладки Тестера.

Вкладка «Агенты»

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

Рисунок 29. Вкладка "Агенты" Тестера стратегий.

Рисунок 32. Вкладка «Агенты» Тестера стратегий

Для одного агента в процессе тестирования вкладка «Агенты» имеет вид:

Рисунок 30. Агенты Тестера стратегий в процессе тестирования

Рисунок 33. Агенты Тестера стратегий в процессе тестирования

Вкладка «Журнал»

В этой вкладке показываются все события, которые происходят в течение процесса тестирования.

Рисунок 31. Вкладка "Журнал" Тестера стратегий показывает активность советника при тестировании

Рисунок 34. Вкладка «Журнал» Тестера стратегий показывает активность советника при тестировании

Вкладка «Входные параметры»

Здесь можно указать входные параметры советника.

Рисунок 32. Вкладка "Входные параметры" советника в Тестере стратегий

Рисунок 35. Вкладка «Входные параметры» советника в Тестере стратегий

Если используется оптимизация параметров при тестировании, нужно указать значения переменных, выделенных на рис. 31.

  • Старт — начальное значение параметра
  • Шаг — шаг изменения параметра
  • Стоп — конечное значение параметра для тестера.

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

После того, как все установлено, вернемся обратно во вкладку «Настройки» и нажмем кнопку «Старт». Тестер начнет свою работу. Все, что нужно сейчас — это подготовить еще одну кружку кофе, если же вы, как и я, хотите наблюдать за процессом, откройте вкладку «Журнал», в процессе тестирования там появятся сообщения о запросах и результатах проведения торговых операций.

Вкладка «График»

После ознакомления с содержимым вкладки «Журнал» можно посмотреть на новую вкладку «График», которая появилась в процессе тестирования. При переключении на вкладку «График» вы увидите график, показывающий увеличение и уменьшение баланса, в зависимости от результатов торговли в истории.

Рисунок 33. График результатов тестирования

Рисунок 36. График результатов тестирования

Вкладка «Результаты»

После завершения тестирования появится другая вкладка, называемая «Результаты» тестирования. Переключившись во вкладку результаты, вы увидите отчет о проведенном тестировании.

Рисунок 34. Отчет результатов Тестера стратегий

Рисунок 37. Отчет результатов Тестера стратегий

Видны чистая прибыль, общая прибыль, общее количество сделок, кол-во убыточных сделок и другие. 

Нажав правую кнопку мыши во вкладке «Результаты», вы увидите контектное меню. Выберите пункт «Сохранить как отчет«:

Рисунок 35. Сохранение результатов тестирования

Рисунок 38. Сохранение результатов тестирования

Появится диалог сохранения файла, напишите имя файла для отчета (если хотите, можно использовать имя, преложенное по умолчанию) и нажимте кнопку «Сохранить». Полный отчет будет сохранен в файле формата HTML.

Для того, чтобы увидеть результаты торговли на графике, выберите пункт «Открыть график» и увидите график вида:

Рисунок 36. График с результатами тестирования на истории

Рисунок 39. График с результатами тестирования на истории

Мы успешно написали и протестировали наш советник на истории и теперь имеем заготовку для дальнейшей работы. Можно опять вернуться во вкладку «Настройки» Тестера стратегий и протестировать его на другом временном интервале.

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

Выводы

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

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

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

Happy coding.

Автоматизированные советники (Expert Advisors) играют важную роль в торговле на бирже. Найти и скачать бесплатно Форекс советник совершенно не проблема. Возможно поэтому более 50% сделок на фондовом рынке заключаются с помощью советников. А специалисты МОФТ считают, что по статистике только 12% процентов сделок с ценными бумагами трейдеры заключают собственноручно. Остальные 88% позиций открывают роботы. Согласитесь – это достаточно внушительный процент. Кроме того, торговля роботами, читая отзывы трейдеров на форумах, дает возможность заработать 20-50% за год. А если пользоваться очень рисковыми советниками и при этом если это лучшие советники Форекс, то можно получить и 50% в месяц.

Честно говоря, советники не так безопасны.

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

Содержание статьи:

  • Что такое советник на Форекс (простыми словами)
  • Виды советников
  • Как установить советник для торговли на Форекс
  • Как протестировать советник
  • Почему советники часто сливают депозит и как этого избежать
  • Плюсы и минуты использования торговых советников
  • Примеры советников на Форекс
  • Рекомендации по торговле с советником

Что такое советник на Форекс (простыми словами)

Торговый советник – это специальная программа, которая торгует самостоятельно по заданному алгоритму.

Советник на Форекс простыми словами – это особое дополнение к торговому терминалу, например, МТ5, которое может самостоятельно заключать сделки и выходить из них.

NPB

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

Такие программы называют по-разному:

  1. Роботы;
  2. Совы;
  3. Мартышки;
  4. Эксперты;
  5. МТС (механические торговые системы).

Советник для торговли на Форекс или рынке акций состоит из заложенной в него стратегии. Данная программа создается при помощи встроенного в терминал языка. Например, в терминале МетаТрейдер язык MQL4.

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

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

Такое сравнение дается потому что советник работает так: он мониторит графики круглые сутки. Ни один человек не в состоянии выдержать такую нагрузку. И за его работой можно следить с компьютера или с мобильного. В ходе своей работы советник может дать трейдеру оповещение о том, что он, например, обнаружил сигнал или открыл/закрыл сделку.

Виды советников

Классифицировать роботов можно по-разному.

  • Платный, причем сумма может быть достаточно большой, действительно никто не захочет продавать за бесценок “курицу, которая несет золотые яйца”.
  • Бесплатный.
  • Заказанный у программиста. Этих советников нужно выделить в отдельную категорию, потому что их ценность может быть выше для конкретного трейдера.

По другой классификации бывают:

  • Полностью автоматизированные советники, которые делают все сами, и человек может совершенно не принимать участие в их торговле;
  • Не полностью автоматизированные. Они только подсказывают, какие действия можно предпринять в тот или иной момент.

Программисты, которые разрабатывают советников, иногда предлагают создать скрипт. Он делает, примерно, то же самое, что и советник. Разница только в том, что он не может постоянно мониторить рынок. Выполнив инструкции он отключается.

По способу торговли советники могут быть:

  • Трендовыми. Они получают прибыль во время рынка, который характеризуется направленным движением. Восходящим или нисходящим. Такой советник будет полезным только во время тренда;
  • Мультивалютный или мультиинструментный. Такие советники могут работать с разными активами.
  • Скальперы. Данные советники совершают много сделок за короткий промежуток времени.
  • Комбинированные. Комбинированные советники представляют собой инструменты, которые могут соединить в себе разные способы торговли;
  • На нейронных сетях. Внутри них сложный алгоритм, который способен к самообучению. У них может быть достаточно сложная настройка;
  • Сеточники. К сеточникам относятся те советники, которые для получения прибыли открывают целый каскад отложенных ордеров. В результате цена проходит по ним и советник по всем ним оказывается в рынке. В случае успеха прибыль растет очень быстро. В случае неудачи убытки растут также быстро, как и прибыль;
  • Индикаторные. Эти советники могут определить точку входа с помощью анализа того или иного индикатора или нескольких. Например, пересечение двух скользящих средних может дать сигнал о смене одной тенденции на другую. В результате можно получить прибыль от входа в самом начале зарождающегося тренда;
  • Информационные или сигнальные. Такой советник может проанализировать ситуацию на рынке и предоставить трейдеру свои рекомендации. Трейдер уже сам решает, стоит ли ему принимать во внимание полученные рекомендации;
  • Вспомогательные. Могут предложить трейдеру помощь в установке стоп лоссов и тейк профитов. Способны дать информацию о том, когда закончит формироваться свеча, например.
  • Безиндикаторные могут работать с помощью применения проверенной волновой теории, также это могут быть советники, которые работают с помощью престижной теории анализа объемов. Также такие совы могут проводить графический анализ либо работать со свечными паттернами.

Как установить советник для торговли на Форекс

советник Forex

При скачивании советника у вас будет файл с расширением *.ex4 или *.mq4. Это и есть робот. Для нужно запустить терминал и перейти в меню Файл, и Открыть каталог данных. Там перейти в папку MQL4, и оттуда в папку Experts. Именно сюда и кладутся советники.

  • Файлы с расширением *.mgh кладутся в папку MQL4/Include. Файлы с расширением *.dll кладутся в папку MQL4/Libraries. Файлы пресетов с расширением *.set кладутся в папку MQL4/Presets.

После этого нужно перезагрузить терминал. Далее в блоке Навигатор находим советник и перетаскиваем на график. Ставим галочку «Разрешить советнику торговать». Так, в правом верхнем углу отобразится смайл, это означает, что советник работает и открывает сделки.

VPS-хостинг для Форекс трейдеров: как подключить и начать торговлю на валютном рынке

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

Virtual Private Server (VPS) является удаленным компьютером, работающим в скрытом месте с защитой без прерываний связи круглосуточно.

После регистрации своего VPS-сервера для Форекса, трейдер может использовать такой компьютер на расстоянии. Важным преимуществом является то, что хостинг настраивается индивидуально для каждого пользователя с соблюдением самой современной защиты. Благодаря этому трейдеру не нужно беспокоиться о безопасности данных своего счета.

VPS-сервер для Forex – это виртуальный выделенный сервер, который открывает доступ к использованию всего функционала отдельного физического сервера.

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

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

Как протестировать советник

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

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

Для того чтобы обеспечить максимальную историю в терминале, нужно зайти в меню Сервис, Настройки и перейти во вкладку Графики. Тут в поле Макс. баров истории нужно выставить максимальное количество нулей после числа. После этого нужно нажать ОК, перезагрузить терминал. После этого нужно перейти в Сервис, Архив котировок, выбрать нужный инструмент и для каждого таймфрейма нажать Загрузить. После этого опять перезагрузить терминал.

Далее:

  • Вызываем Тестер стратегий через меню Вид. В тестере выбираем Тип – Советник, так как кроме них можно тестировать и индикаторы;
  • Дальше нужно выбрать советник, который стоит протестировать. Если его нет в меню, то его нужно записать в терминал;
  • Выбираем акции иностранной компании, по ней уже ранее были загружены котировки;
  • Выбираются Все тики. Это повышает качество тестирования;
  • После этого выбирается тот период, на котором будет проводиться тестирование;
  • Спред лучше ставить больше минимального, потому что в периоды его роста советник может становиться неэффективным;
  • Входные параметры можно легко менять с помощью пресетов. А если это делается вручную, то лучше всего записывать какие именно изменения к каким результатам приводят;
  • После этого стоит нажать Старт.

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

Почему советники часто сливают депозит и как этого избежать

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

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

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

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

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

Полезные статьи:

  • Нейросеть на Форекс: Применение и проблемы
  • Алготрейдинг (что это): полное руководство
  • Психология трейдинга – Влияние на решения (примеры) и методы контроля
  • Что такое короткие продажи (шорт) на фондовом рынке и как они работают
  • Торговля фьючерсами у брокера Just2Trade

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

Еще больше советников используют вариант Мартингейла (увеличение объема после каждой убыточной сделки), без глубокого анализа рынка. А такие советники похожи на пирамиду, если не хватит денег, то пузырь лопнет.

Поэтому лучше всего, чтобы не слить все деньги прибыль нужно регулярно выводить.

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

Плюсы и минуты использования торговых советников

Плюсы:

  • Он не зависит от эмоций, он не знает страха, ему не ведома нервозность, скорее всего его никогда не затронет паники, жадности останется за рамками его алгоритма, ложных надежд он не возложит никогда, он не азартен, у него просто не может быть желания отбить потери;
  • Точен в своих действиях, таким образом, человеческий фактор исключается, советник всегда следует алгоритму, он не сможет заключить сделку лотом 1 вместо лота 0.1, потому что это четко прописано в его алгоритме;
  • Настройки можно менять в любой момент. Поэтому его можно адаптировать к рынку;
  • Мгновенно выполняет заложенные в него операции, человек так не может, особенно начинающий, он сначала подумает, а потому примет решение, робот же способен реагировать на молниеносные изменения курса, тогда, когда человек бессилен;
  • Когда работает с большим количеством инструментов, не ошибается по невнимательности;
  • Способен контролировать тысячи сделок в одно и то же время;
  • Работает 24 часа в сутки, 7 дней в неделю, это обычная программа, ей не нужен сон, отдых, не нужно есть, функционирует 365 дней в году;
  • При наличии подходящего советника нет необходимости строить на графике ничего, чтобы заметить тенденцию;
  • При использовании VPS хостинга временное отсутствие интернета или доступа к терминалу может не повлиять на работу.

Минусы:

  • Может принести убыток, ведь ситуация на рынке меняется, если несколько лет назад он был в прибыли, то это может измениться. Его нужно перенастраивать;
  • Будет до последнего открывать сделки, даже если они заканчиваются убытками. Похоже на тильт у человека;
  • Тонкости состояния рынка не понимает. Например, во время сильных новостей человек может остаться вне рынка, советника нужно этому учить. Не может уловить панику на рынке, поэтому будет сливать;
  • Потраченные на робота деньги и тестирование не гарантируют прибыли;
  • Почти не способен использовать фундаментальный анализ, не понимает психологию толпы, все, что не мерится цифрами за пределами его понимания, потому его легче настроить на технический анализ;
  • Советник лишен интуиции, которой может похвастаться трейдер;
  • Действия робота нужно контролировать;
  • Если нет VPS хостинга, советник работает только тогда, когда компьютер включен.

Примеры советников на Форекс

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

  1. Equilibrium зарекомендовал себя, как надёжный робот с лёгкостью определяющий тренды и точки входа. Для формирования сделки советник способен открывать фиксированные и динамические лоты. Работа осуществляется в любых таймфреймах, наряду с тем, что советник имеет массу дополнительных функций.
  2. BumbleBeeFX оценивается, как один из самых лучших советников. Этот робот имеет самовозобновляющийся алгоритм. Такой алгоритм перезагружается при изменении торговых условий. Программа способна использовать систему самозащиты при резком развороте цены. Советник работает на любых таймфреймах.
  3. Wall Street Evolution 2.0 Robot охарактеризован специалистами рынка Форекс, как советник, предоставляющий 100% объективности. Отличительной особенностью является то, что советник использует скальпинговую стратегию с низкой вероятностью риска.
  4. Forex Diamond EA – это точное надёжное средство для торговли на рынке Форекс. Главной изюминкой этого программного обеспечения является скорость проведения сделок. Работает практически на всех рынках, а также предоставляет возможность осуществлять сделки в любых временных горизонтах. Предлагает пользователям трендовые и противотрендовые стратегии.
  5. Force Trader идеально подойдёт для тех участников рынка, которые используют долгосрочные стратегии. Здесь используется индикатор силы, а также индикаторы WRP, RSI, Momentum и DeMarker. Работает в таймфрейме D1 и основывается на работе по десяти основным валютным парам.
  6. EA Gold Shark 5 рассчитан на среднесрочную перспективу и даёт возможность работать с несколькими парами одновременно. Имеет функции локирования и усреднения, что даёт уникальную возможность переводить убыточные позиции в неубыточные. Характеризуется стабильной работой даже на высоко волатильном рынке и предоставляет возможность инверсной торговли.

Рекомендации по торговле с советником

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

Самое правильно в таких условиях формировать диверсифицированный портфель из советников. Так вам не нужно будет рисковать значительной частью капитала. Потому что консервативным советникам можно выделить, например, восемьдесят процентов капитала. Остальное можно отдать на откуп агрессивным Мартингейлам и Сеточникам.

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

Как уже стало ясно советник нужно вовремя включить и вовремя выключить. К тому же некоторые советники работают лучше только на каких-то специальных инструментах.

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

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

  • Mission Automate
  • Visual JForex
  • CTS-Pro
  • System Creator
  • ENSED COR

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

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

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

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

Как пользоваться советниками Форекс в МТ4, если есть желание зарабатывать сразу, но нет возможности либо желания обучаться искусству работы с ними и самостоятельной торговли?

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

использование советников, наглядное в видео уроках

Что такое советники терминала MT4 или 5 версии? Принципы работы с ними

Советниками Форекс для МТ4 — называются специально созданные программы, которые способны совершать сделки самостоятельно по указанным алгоритмам.

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

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

Советники Форекс для МетаТрейдер 4, разрабатываются на специальном языке программирования «MQL 4» и дают возможность полностью автоматизировать торговые и аналитические операции.

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

ВЫБИРАЙТЕ ЛУЧШИХ! ЭТИХ БРОКЕРОВ МЫ ПРОТЕСТИРОВАЛИ ДЛЯ ВАС:

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

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

MT4 пользуемся в видео уроках советниками

Подробнее о том, что такое советники и алгоритмы Forex для МТ4, и как проводится их тестирование, Вы можете узнать, просмотрев видео уроки из этого раздела:

Как пользоваться (работать) с советниками в терминале MT4 или 5?

В торговом терминале МТ4, уже имеются встроенные стандартные советники, увидеть их можно, активировав окно «Навигатор» и щелкнув на пункте «Советники» в древовидном меню.

пользование в метатрейдере МТ4 советниками Forex

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

Когда советник будет запущен для работы, должно появиться новое окно с такими 2 вкладками:

  • «Общие»
  • и второй — «Входные параметры».

Здесь Вы можете настраивать для торговых роботов параметры Вашей торговой тактики.

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

Для отключения советника, необходимо воспользоваться меню торговой платформы МТ4: «Сервис — Настройки – затем вкладка Советники – здесь следует убрать галочку с функции «Включить советники»». После этих действий вместо смайлика в углу на рабочем графике должен появиться крестик.

обучающие видео, как пользуются роботами в метатрейдере

Посмотрев видео уроки, Вы с легкостью справитесь с установкой советника.

Видео: Как пользоваться советниками при работе в МТ4?

Как пользоваться советниками, которых нет в MT4?

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

Для создания и редактирования собственного советника в клиентском терминале MT4 имеется специальная среда для разработки торговых роботов – «MQL4 IDE», которая в себя включает:

  • модуль исполнения и управления автотрейдингом;
  • язык программирования стратегий торговли (MetaQuotes Language 4);
  • редактор и компилятор автоматической торговой системы (MetaEditor);
  • модуль оптимизации и тестирования торговых роботов (Strategy Tester).

параметры советника, с использованием в MT4

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

Итак, как пользоваться советниками, которых нет в МетаТрейдер 4?

Для начала необходимо найти необходимого Вам торгового робота и скачать себе на компьютер. Если он запакован в архив, то советника необходимо разархивировать. Если Ваша торговая платформа МТ4 открыта, то ее следует закрыть.

Далее скопируйте исполняемый файл (с расширением вида «.ex4») необходимого Вам торгового робота в папку «experts» вашей директории «MetaTrader 4». Проделав все это, можно запустить торговый терминал в стандартном режиме. Если все выполнено правильно, то теперь Ваш новый советник должен появиться в окне «Навигатор» среди остальных торговых роботов. Запуск советника осуществляется таким же способом, как описан выше.

Как редактировать и настраивать советники в терминале MT4 и 5?

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

создание и использование алгоритма советника в МТ5

После того, как измените исходный текст робота, его следует скомпилировать повторно, чтобы получить измененный исполняемый файл «.ex4». Если этого не сделать, то в МетаТрейдер 4 будет использоваться предыдущая, т.е. не измененная версия советника.

Перед тем как начать использовать эксперта в МТ4, следует произвести его предварительную настройку. Основные параметры работы для всех торговых роботов задаются в клиентском терминале МТ4 в окне «Настройки».

Сделать это позволяет команда в меню «Сервис» -> «Настройки» либо при нажатии клавиш «Ctrl+O». Чтобы настроить входные параметры торгового робота выберите вкладку «Советники».

В данной вкладке торгового терминала МТ4 Вы сможете:

Включать советников. Данная опция может разрешать, и запрещать использовать всех советников.

При ее отключении, во время прихода нового тика, функция «start» перестает запускаться для всех советников. Для включения нужного советника, потребуется выставить флажок на «Включить советники» и активировать опцию нажатием кнопки «ОК»;

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

авто режим советника метатрейдер

Отключать работу советников при замене счета. Данная опция, является защитным механизмом, который отключает работу эксперта, когда происходит смена счета, к примеру, при переключении с демо на реальный;
Разрешать импорт DLL. Чтобы расширить функциональность эксперта можно разрешить ему использовать DLL-библиотеки.

Активировав данную опцию, Вы разрешаете своему роботу использовать DLL-библиотеки безо всяких ограничений.

уроки с видео о использовании роботов

Подтверждать вызываемые функции DLL. Такую опцию активируют только тогда, когда было дано разрешение на импорт DLL.

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

Разрешать импортировать внешних торговых роботов. Если во время работы советника есть необходимость получать функционал от других библиотек MQL4 или советников, то эту опцию необходимо активировать.
Выбирать направление открытия роботом позиций. В обе стороны (Long&Short), только продавать, будет (Only Short) и только покупать, будет (Only Long);

настройки в видео

Разрешить либо запретить торговому роботу подавать сигналы;
Запретить подачу повторных сигналов, т.е. робот не будет подавать сигнал о произошедшем событии после выдачи первого сигнала.

При активации кнопки «Сброс» все настройки советника возвращаются по умолчанию. Для подтверждения прикрепления эксперта с заданными Вами параметрами, нажмите на кнопку «ОК».

Как установить и работать с советниками в МТ4 и 5 (МетаТрейдере). Пошаговое руководство для начинающего трейдера

sovetnik14 6292e

Здравствуйте, дорогие друзья! В МетаТрейдере4 есть несколько доступных по умолчанию советников, но работать с ними нет никакого смысла. Они нужны скорее для демонстрации возможностей автоматической торговли. Зарабатывать стандартные роботы неспособны.

Зато трейдер может самостоятельно установить любой пользовательский торговый робот. Точное количество таких советников неизвестно, но счет идет на тысячи, и каждый день появляются новые. Нужно только разобраться в том, как заставить МТ4 увидеть и работать с этими инструментами. Никаких .ехе файлов нет, и процесс установки отличается от установки программ.

Установка советника в торговый терминал

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

Эти файлы идут в архиве с роботом.

Порядок действий следующий:

  • в MT4 в меню Файл жмем на Открыть каталог данных;

sovetnik2 a90bf

Нам нужно попасть в каталог данных.

  • в советнике Bee, который и будем устанавливать, есть файл самого робота, файлы библиотек и сеты с настройками. Содержимое Experts копируем в папку с тем же именем в каталоге данных. Файлы .dll скопируйте в Libraries, а настройки – в Presets. Если бы для работы Bee нужны были индикаторы, их нужно было бы разместить в Indicators;

sovetnik3 bf7a6

Не перепутайте папки, что и куда нужно скопировать.

  • перезагружаем торговый терминал. Проверить правильность установки советника можно изучив меню Навигатора (левая часть терминала). Если ошибки не было, все скопировали куда нужно, то робот появится в списке советников.

sovetnik4 9edd6

Окно Навигатора можно открыть сочетанием клавиш Ctrl+N или через вкладку Вид. В ней проверяем, появился ли робот в списке.

На рисунке выше обратите внимание на небольшой ромб слева от названия советника. Для Expert Bee он серого цвета, а для 2 остальных – оранжевого. Серый цвет указывает на то, что код робота закрыт, вы не сможете самостоятельно отредактировать его в MetaEditor, оранжевый цвет – показатель того, что код открыт. На работоспособность советников это не влияет.

Запуск и настройка советника

Чтобы начать торговать с использованием советника:

  • перейдите в Сервис и выберите пункт Настройки (или используйте сочетание Ctrl+O). В этом меню обязательно отметьте пункты Разрешить автоматическую торговлю и Разрешить импорт DLL (это нужно, чтобы терминал использовал установленные ранее файлы библиотек). В самом терминале есть кнопка Авто-торговля, по ней тоже можно ориентироваться, разрешен ли автотрейдинг. Этот пункт проделайте только один раз, при установке следующих советников эти настройки не сбиваются;

sovetnik5 ddde3

Предварительная настройка МТ4.

  • чтобы запустить Bee, либо просто перетаскиваем его на график с нажатой левой кнопкой мыши, либо в контекстном меню (вызывается щелчком правой кнопки мыши на роботе) выбираем пункт Присоединить к графику;

sovetnik6 f6209

Запускаем советник.

  • можно задать сочетание клавиш для быстрого запуска советника. В контекстном меню есть пункт Установить горячую клавишу. В нем задается комбинация, первой всегда будет либо Ctrl, либо Alt, а вторую задаете сами.

sovetnik7 05e42

Задание комбинации клавиш для запуска советника.

После добавления на график открывается окно, в котором задаются настройки робота и отображается общая информация нему:

  • вкладка О программе – общие данные о советнике;

sovetnik8 7fb56

  • общие – здесь можно ограничить торговлю только на продажу или на покупку, запретить роботу торговать. Отметьте те же пункты, что и на рисунке ниже;
  • входные параметры – основные настройки робота. Их количество зависит от конкретного советника;

sovetnik9 cee54

Настройки советника.

  • для Bee в комплекте шли настройки для разных пар, их можно загрузить вместо ручного задания. Нажимаем кнопку Загрузить, открывается папка Presets, в нее мы на этапе установки копировали файлы настроек. Выбираем нужный и двойным щелчком загружаем его. Если забыли скопировать сеты раньше, то на этом этапе можно просто выбрать папку, где они находятся, и загрузить их оттуда. Кнопка Сохранить отвечает за создание .set файла.

sovetnik10 3cdc8

Выбираем нужный сет настроек и загружаем его.

На графике обычно никакие построения не отображаются. Узнать о том, что робот нормально себя чувствует и торгует можно обратив внимание на смайл в верхнем правом углу. Если он улыбается, то все в порядке. Грустный смайл – признак проблем, проверьте настройки терминала.

sovetnik11 a9c38

Советник Bee работает нормально.

Работа с советником

Робот установлен, он уже торгует, осталось разобраться, как можно влиять на его работу:

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

sovetnik12 8dc5f

Всегда можно удалить советник с графика или перейти в его настройки.

И в заключение пара рекомендаций по автоматической торговле:

  • если на одной валютной паре хотите работать с несколькими советниками, то под каждый открывайте отдельное окно. И обязательно следите за таким параметром как MagicNumber, эти числа должны отличаться для всех советников. Этим числом робот помечает свои ордера, чтобы не путать их с другими;
  • после выключения терминала робот торговать перестанет. Для круглосуточной работы установите его на VPS;
  • настройки работающего советника меняйте не через Навигатор, а так, как показано выше;
  • все действия записываются в журнале. По описанию ошибки можно понять в чем проблема.

sovetnik13 e96ba

В журнале фиксируются все действия.

Заключение

Инструкция получилась обширная, но на деле достаточно 5-10 минут, чтобы разобраться с ней. Установив пару советников, вы гарантированно запомните ее и в будущем будете все делать по памяти.

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

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

Получить бесплатно 10 оптимизированных советников здесь.

Источник: AcademyFX.ru

Понравилась статья? Поделить с друзьями:
  • Инструкция к телевизору сони тринитрон на русском
  • Метамуцин инструкция по применению таблетки взрослым
  • Омарон инструкция по применению отзывы людей
  • Геншин руководство искателя приключений
  • Герметик reinzosil 300 инструкция по применению на русском языке