Объявление
$ £ ¥
¥ £ $

Шаблон экспертного советника для MT5

Содержание

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

У автоматизированной торговли есть некоторые преимущества перед ручным трейдингом:

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

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

Все же, если ваша цель — начать разработку своего собственного робота, начинать надо с чего-то простого.

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

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

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

Шаблон экспертного советника для MT5


Что такое шаблон экспертного советника для MT5

Шаблон экспертного советника для MT5 — это 700+ строк откомментированного кода, которые вы можете использовать для построения своего советника.

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

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


Из чего состоит шаблон экспертного советника для MT5

  • Комментарии к каждой функции, чтобы понять логику
  • Хорошо написанный код
  • Модульная структура
  • Риск-менеджмент с автоматическим расчетом размера позиции
  • Выбор между фиксированным и автоматическим стоп-лоссом
  • Выбор между фиксированным и автоматическим тейк-профитом
  • Фильтр по времени торговли
  • Частичное закрытие
  • Пользовательский параметр для тестирования

Шаблон робота для MT5 - входные параметры


Чем НЕ является шаблон экспертного советника для MT5

Шаблон экспертного советника для MT5 — не является полностью автоматической системой.

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


Зачем нужен шаблон экспертного советника для MT5

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

Логика экспертного советника

Логика экспертного советника в MT5

Базовый экспертный советник разделен на три основные функции:

  1. OnInit() инициализация советника. Это первая функция, которая выполняется, когда вы добавляете советник на график. Она выполняется только один раз.
  2. OnTick() запускается каждый раз, когда MT5 получает новую котировку для текущего торгового инструмента.
  3. OnDeinit() запускается один раз сразу после того, как вы убираете советник с графика.

Модули шаблона экспертного советника для MT5

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

Здесь вы можете видеть как разделяются функции в ходе выполнения программы:

Функция OnInit

Шаблон экспертного советника для MT5 - функция инициализации

Функция OnTick

Шаблон экспертного советника для MT5 - функция обработки каждого тика

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


Требования для работы с шаблоном экспертного советника для MT5

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

Базовое знание программирования на MQL5

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

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

Платформа MT5

Файлы экспертного советника, которые вы скачаете, предназначены для платформы МетаТрейдер 5. Они не будут работать в МетаТрейдере 4.

Понимание того, что такое компиляция

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

Желание экспериментировать

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

Отрывки из исходного кода

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

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

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

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

Свойства советника

//-PROPERTIES-//
// Properties help the software look better when you load it in MT5.
// They provide more information and details
// This is what you see in the About tab when you attach the expert advisor to a chart.
#property link          "https://www.earnforex.com/metatrader-expert-advisors/mt5-ea-template/"
#property version       "1.00"
#property copyright     "EarnForex.com - 2024"
#property description   "A basic expert advisor template for MT5."
#property description   ""
#property description   "WARNING: There is no guarantee that this expert advisor will work as intended. Use at your own risk."
#property description   ""
#property description   "Find more on www.EarnForex.com"
#property icon          "\\Files\\EF-Icon-64x64px.ico"
 

Входные параметры

// EA Parameters
input string Comment_0 = "==========";          // EA-Specific Parameters
// !! Declare parameters specific to your EA here.
// For example, a moving average period, an RSI level, or anything else your EA needs to know to implement its trading strategy.
// All input parameters start with 'input' keyword.
// input int example = 10; // This is an example input parameter

input string Comment_1 = "==========";  // Trading Hours Settings
input bool UseTradingHours = false;     // Limit trading hours
input ENUM_HOUR TradingHourStart = h07; // Trading start hour (Broker server hour)
input ENUM_HOUR TradingHourEnd = h19;   // Trading end hour (Broker server hour)

input string Comment_2 = "==========";  // ATR Settings
input int ATRPeriod = 100;              // ATR period
input ENUM_TIMEFRAMES ATRTimeFrame = PERIOD_CURRENT; // ATR timeframe
input double ATRMultiplierSL = 2;       // ATR multiplier for stop-loss
input double ATRMultiplierTP = 3;       // ATR multiplier for take-profit

// General input parameters
input string Comment_a = "==========";                             // Risk Management Settings
input ENUM_RISK_DEFAULT_SIZE RiskDefaultSize = RISK_DEFAULT_FIXED; // Position size mode
input double DefaultLotSize = 0.01;                                // Position size (if fixed or if no stop loss defined)
input ENUM_RISK_BASE RiskBase = RISK_BASE_BALANCE;                 // Risk base
input int MaxRiskPerTrade = 2;                                     // Percentage to risk each trade
input double MinLotSize = 0.01;                                    // Minimum position size allowed
input double MaxLotSize = 100;                                     // Maximum position size allowed
input int MaxPositions = 1;                                        // Maximum number of positions for this EA

input string Comment_b = "==========";                             // Stop-Loss and Take-Profit Settings
input ENUM_MODE_SL StopLossMode = SL_FIXED;                        // Stop-loss mode
input int DefaultStopLoss = 0;                                     // Default stop-loss in points (0 = no stop-loss)
input int MinStopLoss = 0;                                         // Minimum allowed stop-loss in points
input int MaxStopLoss = 5000;                                      // Maximum allowed stop-loss in points
input ENUM_MODE_TP TakeProfitMode = TP_FIXED;                      // Take-profit mode
input int DefaultTakeProfit = 0;                                   // Default take-profit in points (0 = no take-profit)
input int MinTakeProfit = 0;                                       // Minimum allowed take-profit in points
input int MaxTakeProfit = 5000;                                    // Maximum allowed take-profit in points

input string Comment_c = "==========";                             // Partial Close Settings
input bool UsePartialClose = false;                                // Use partial close
input double PartialClosePerc = 50;                                // Partial close percentage
input double ATRMultiplierPC = 1;                                  // ATR multiplier for partial close

input string Comment_d = "==========";                             // Additional Settings
input int MagicNumber = 0;                                         // Magic number
input string OrderNote = "";                                       // Comment for orders
input int Slippage = 5;                                            // Slippage in points
input int MaxSpread = 50;                                          // Maximum allowed spread to trade, in points
 

Обработка тиков

// Entry and exit processing
void ProcessTick()
{
    if (!GetIndicatorsData()) return;
    
    if (CountPositions())
    {
        // There is a position open. Manage SL, TP, or close if necessary.
        if (UsePartialClose) PartialCloseAll();
        CheckExitSignal();
    }

    // A block of code that lets the subsequent code execute only when a new bar appears on the chart.
    // This means that the entry signals will be checked only twice per bar.
    /* static datetime current_bar_time = WRONG_VALUE;
    datetime previous_bar_time = current_bar_time;
    current_bar_time = iTime(Symbol(), Period(), 0);
    static int ticks_of_new_bar = 0; // Process two ticks of each new bar to allow indicator buffers to refresh.
    if (current_bar_time == previous_bar_time)
    {
        ticks_of_new_bar++;
        if (ticks_of_new_bar > 1) return; // Skip after two ticks.
    } 
    else ticks_of_new_bar = 0; */

    // The number is recalculated after the first call because some trades could have been gotten closed.
    if (CountPositions() < MaxPositions) CheckEntrySignal(); // Check entry signals only if there aren't too many positions already.
}
 

Шаблон проверки сигналов на вход

// Entry signal
void CheckEntrySignal()
{
    if ((UseTradingHours) && (!IsCurrentTimeInInterval(TradingHourStart, TradingHourEnd))) return; // Trading hours restrictions for entry.

    bool BuySignal = false;
    bool SellSignal = false;

    // Buy signal conditions

    // This is where you should insert your entry signal for BUY orders.
    // Include a condition to open a buy order, the condition will have to set BuySignal to true or false.
   
    //!! Uncomment and modify this buy entry signal check line:
    //if ((Indicator_current > iClose(Symbol(), Period(), 1)) && (Indicator_previous <= iClose(Symbol(), Period(), 2))) BuySignal = true; // Check if the indicator's value crossed the Close price level from below.

    if (BuySignal)
    {
        OpenBuy();
    }

    // Sell signal conditions

    // This is where you should insert your entry signal for SELL orders.
    // Include a condition to open a sell order, the condition will have to set SellSignal to true or false.
    
    //!! Uncomment and modify this sell entry signal check line:
    //if ((Indicator_current < iClose(Symbol(), Period(), 1)) && (Indicator_previous >= iClose(Symbol(), Period(), 2))) SellSignal = true; // Check if the indicator's value crossed the Close price level from above.

    if (SellSignal)
    {
        OpenSell();
    }
}
 

Скачать

 

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

Как установить шаблон экспертного советника для MT5

  1. Скачайте файл-архив с экспертным советником.
  2. Откройте папку данных MetaTrader 5 (через меню Файл→Открыть каталог данных или Ctrl+Shift+D).
  3. Откройте папку MQL5.
  4. Скопируйте все папки из архива прямо в папку MQL5.
  5. Перезагрузите MetaTrader 5 или обновите список экспертных советников кликнув по нему правой кнопкой в окне Навигатор и выбрав Обновить.

Как его использовать

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

  • GetIndicatorsData() содержит код для считывания данных индикаторов, используемых в дальнейшем в других функциях. Если вы планируете, чтобы ваш экспертный советник пользовался индикаторами в своей торговой стратегии, то вам следует внести изменения в эту функцию.
  • EvaluateEntry() содержит код для сигналов на вход. Нужно добавить сюда конкретные инструкции, чтобы советник мог открывать новые позиции. Пример таких инструкций прилагается в комментариях к коду этой функции.
  • EvaluateExit() содержит код для сигналов на выход. Можно не трогать, если вы планируете использовать фиксированный стоп-лосс и тейк-профит. В противном случае в этой функции можно задать сигналы на выход по индикаторам.

Обсуждение

У вас есть предложения или вопросы по данному советнику? Вы всегда можете обсудить шаблон экспертного советника MT5 с другими Форекс-трейдерами и MQL5-программистами на форуме.