В какой-то точке своего профессионального пути, трейдеры решают, что неплохо было бы автоматизировать то, чем они занимаются. Вот тут-то и оказываются полезными экспертные советники.
У автоматизированной торговли есть некоторые преимущества перед ручным трейдингом:
- Не требуется постоянное наблюдение за графиком
- Торговля без эмоций.
- Доступ к рынку 24 часа в сутки.
- Нет случайных ошибок (если правильно запрограммировать).
- Возможность торговать, используя множество стратегий одновременно.
Однако, программирование своего собственного торгового робота (экспертного советника) — не очень простое дело даже для простых стратегий. Со сложными торговыми системами все еще труднее. Вам необходимо формулировать все в рамках строгих условий и инструкций и продумывать большое число всевозможных особых случаев, чтобы советник был готов к любой ситуации.
Все же, если ваша цель — начать разработку своего собственного робота, начинать надо с чего-то простого.
Шаблон экспертного советника для MT5, представленный здесь, может послужить отправной точкой в создании ваших собственных торговых роботов.
Он включает в себя основные структуры и функции экспертного советника без реализации конкретных сигналов на покупку или продажу. Вы сможете легко добавить сигналы от своей торговой стратегии.
Исходный код значительно уменьшит время необходимое на написание экспертного советника.
Что такое шаблон экспертного советника для MT5
Шаблон экспертного советника для MT5 — это 700+ строк откомментированного кода, которые вы можете использовать для построения своего советника.
На первый взгляд звучит как очень много кода для простого шаблона, но в нем нет ничего сложного и большую его часть представляют собой комментарии для лучшего понимания логики программы.
Вы можете вносить свои изменения в указанные части кода, чтобы реализовывать свою стратегию входа и выхода из сделок и получить готовый к использованию советник.
Из чего состоит шаблон экспертного советника для MT5
- Комментарии к каждой функции, чтобы понять логику
- Хорошо написанный код
- Модульная структура
- Риск-менеджмент с автоматическим расчетом размера позиции
- Выбор между фиксированным и автоматическим стоп-лоссом
- Выбор между фиксированным и автоматическим тейк-профитом
- Фильтр по времени торговли
- Частичное закрытие
- Пользовательский параметр для тестирования
Чем НЕ является шаблон экспертного советника для MT5
Шаблон экспертного советника для MT5 — не является полностью автоматической системой.
Вам нужно к шаблону добавить собственный код для генерации сигналов открытия и закрытия сделок, чтобы он мог торговать.
Зачем нужен шаблон экспертного советника для MT5
- Экономия времени — вы можете сэкономить много часов изучения и программирования, используя готовые функция из шаблона.
- Обработка ошибок — шаблон обрабатывает возникновение возможных ошибок в ходе исполнения программы для всех своих функций.
- Риск-менеджмент — фиксированный размер позиции или расчет на основе риска.
- Легко редактировать — добавление и изменение всего нескольких строчек кода даст готовый рабочий советник на основе вашего любимого индикатора.
Логика экспертного советника
Базовый экспертный советник разделен на три основные функции:
OnInit()
инициализация советника. Это первая функция, которая выполняется, когда вы добавляете советник на график. Она выполняется только один раз.OnTick()
запускается каждый раз, когда MT5 получает новую котировку для текущего торгового инструмента.OnDeinit()
запускается один раз сразу после того, как вы убираете советник с графика.
Модули шаблона экспертного советника для MT5
Шаблон экспертного советника для MT5 состоит из отдельных модулей, так что каждая операция логически выделена в независимую функцию. Это позволяет сделать исходный код понятнее и упростить внесение дальнейших изменений.
Здесь вы можете видеть как разделяются функции в ходе выполнения программы:
Функция OnInit
Функция OnTick
Обработка деинициализации (функция 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
- Скачайте файл-архив с экспертным советником.
- Откройте папку данных MetaTrader 5 (через меню Файл→Открыть каталог данных или
Ctrl +Shift +D ). - Откройте папку MQL5.
- Скопируйте все папки из архива прямо в папку MQL5.
- Перезагрузите MetaTrader 5 или обновите список экспертных советников кликнув по нему правой кнопкой в окне Навигатор и выбрав Обновить.
Как его использовать
Участки кода, требующие изменений или добавления ваших собственных функций помечены двумя восклицательными знаками (!!
). Вам надо будет модифицировать следующие функции, чтобы получить рабочий советник:
GetIndicatorsData()
содержит код для считывания данных индикаторов, используемых в дальнейшем в других функциях. Если вы планируете, чтобы ваш экспертный советник пользовался индикаторами в своей торговой стратегии, то вам следует внести изменения в эту функцию.EvaluateEntry()
содержит код для сигналов на вход. Нужно добавить сюда конкретные инструкции, чтобы советник мог открывать новые позиции. Пример таких инструкций прилагается в комментариях к коду этой функции.EvaluateExit()
содержит код для сигналов на выход. Можно не трогать, если вы планируете использовать фиксированный стоп-лосс и тейк-профит. В противном случае в этой функции можно задать сигналы на выход по индикаторам.
Обсуждение
У вас есть предложения или вопросы по данному советнику? Вы всегда можете обсудить шаблон экспертного советника MT5 с другими Форекс-трейдерами и MQL5-программистами на форуме.