Как создать первого простого торгового робота?
Создание первого торгового робота — это ключевой этап в обучении алготрейдингу. Многие новички мечтают сразу написать сложного советника с десятками индикаторов, но правильный путь другой: первый робот должен быть максимально простым. Его задача — не приносить прибыль, а научить вас процессу разработки: структуре советника, торговым функциям, тестированию и отладке. В этой статье разберём, как создать первого простого торгового робота на MQL5 — от идеи до проверки в тестере.
Почему начинать нужно с простого
Опыт показывает: сложные роботы, написанные новичком, почти всегда не работают. Причина не в отсутствии таланта, а в количестве переменных: чем больше индикаторов, фильтров и условий, тем больше мест для ошибок. Отладка такого кода превращается в кошмар, и новичок бросает обучение.
Простой робот решает эту проблему. Он содержит минимум кода, легко читается и позволяет увидеть каждый элемент процесса: каркас, сигнал, торговую операцию, тест. Поняв эти блоки на простом примере, вы сможете строить сложные системы осознанно. Поэтому начнём с классики — робота на пересечении двух скользящих средних.
Шаг 1. Каркас советника
Любой советник в MQL5 строится вокруг трёх функций. Откройте MetaEditor, создайте новый файл советника, и вы получите заготовку с этими функциями автоматически.
OnInit вызывается один раз при запуске. Здесь мы объявим входные параметры, подключим индикаторы и проверим готовность советника. OnTick вызывается на каждый новый тик — это «сердце» программы, где проверяется сигнал и принимается решение о сделке. OnDeinit вызывается при остановке и отвечает за корректное завершение работы.
Каркас — это фундамент. Прежде чем писать торговую логику, убедитесь, что советник компилируется и запускается: добавьте в OnInit строку Print("Робот запущен") и проверьте сообщение в журнале терминала. Этот простой тест подтверждает, что среда работает, и снимает половину будущих вопросов.
Шаг 2. Входные параметры
Входные параметры объявляются с модификатором input и отображаются в окне настроек советника. Для нашего робота понадобятся: размер лота, периоды быстрой и медленной скользящих средних и, возможно, значения Stop Loss и Take Profit в пунктах. Например:
input double InpLot = 0.1; input int InpFastMA = 5; input int InpSlowMA = 20;
Входные параметры — это интерфейс советника. Меняя их в окне терминала, вы сможете настраивать стратегию без изменения кода. Правило хорошего тона: всё, что может меняться, выносится в параметры. Такой подход делает робота гибким и удобным в тестировании.
Шаг 3. Подключение индикаторов в OnInit
Для работы с индикаторами в MQL5 используются хэндлы — специальные дескрипторы, которые создаются в OnInit и передаются функциям для получения значений. Создадим два хэндла скользящих средних через функцию iMA:
MA_handle_fast = iMA(_Symbol, _Period, InpFastMA, 0, MODE_SMA, PRICE_CLOSE); MA_handle_slow = iMA(_Symbol, _Period, InpSlowMA, 0, MODE_SMA, PRICE_CLOSE);
Если хэндл не создан (вернул INVALID_HANDLE), нужно вывести сообщение об ошибке и вернуть код неготовности из OnInit. Такая проверка — хорошая привычка: она делает робота устойчивым к сбоям и упрощает диагностику.
Шаг 4. Логика сигнала в OnTick
Главная часть робота — функция OnTick. Здесь мы получаем значения индикаторов и сравниваем их. Для одной точки на текущем баре достаточно скопировать последние значения в переменные через CopyBuffer.
Сигнал на покупку: быстрая средняя находится выше медленной, а на предыдущем баре была ниже — то есть произошло пересечение снизу вверх. Сигнал на продажу: зеркальная ситуация — быстрая средняя пересекла медленную сверху вниз. Проверка двух соседних баров исключает повторные входы на одном и том же пересечении.
Чтобы робот не открывал сделки на каждом тике, сразу после пересечения добавляется проверка: если позиция по символу уже открыта, вход запрещён. Общее количество позиций по символу можно получить через PositionsTotal в сочетании с PositionGetSymbol.
Шаг 5. Открытие сделки
Когда сигнал получен и позиции нет, робот отправляет торговый запрос. В MQL5 сделки выполняются через структуру MqlTradeRequest и функцию OrderSend. В запросе указываются: символ, тип операции (покупка или продажа), объём, текущая цена, Stop Loss и Take Profit.
Stop Loss и Take Profit можно задать в виде расстояния в пунктах: рассчитайте ценовые уровни относительно цены входа и укажите их в запросе. Цены для покупки берутся по Ask, для продажи — по Bid; для расчёта стопов удобно использовать значения из структуры MqlTick через SymbolInfoTick.
После вызова OrderSend обязательно проверьте результат: поле retcode ответа. Если сделка не прошла, выведите код ошибки в журнал. Новички часто пропускают эту проверку — и робот «молча» не торгует неделями. Диагностика в журнале — ваш главный инструмент отладки.
Шаг 6. Тестирование в стратегическом тестере
После написания кода советник нужно проверить в стратегическом тестере MetaTrader 5. Откройте тестер, выберите советник, символ и период, задайте диапазон дат и запустите тест на исторических данных.
Первая цель теста — не прибыль, а корректность. Изучите журнал тестера: открываются ли сделки по сигналу, срабатывают ли стопы, нет ли ошибок торговых функций. Откройте график тестера и посмотрите, как робот входил и выходил: совпадает ли поведение с задуманной логикой.
Затем посмотрите статистику: количество сделок, профит-фактор, просадку, среднюю сделку. Прибыльной стратегия может и не быть — для первого робота это нормально. Ключевой результат теста — советник работает предсказуемо и без ошибок, а вы понимаете каждую его строчку.
Шаг 7. Отладка и улучшение
Если тест показал ошибки, используйте журнал и точки останова MetaEditor. Выводите промежуточные значения через Print: цену, значения индикаторов, коды возврата. Так вы увидите, на каком этапе логика расходится с ожиданиями.
Постепенно улучшайте робота: добавьте фильтр по направлению тренда, ограничение числа сделок, трейлинг-стоп. Каждое изменение сразу проверяйте в тестере. Такой итеративный цикл «изменение — тест — анализ» — это и есть настоящая разработка торговых систем, и вы освоите его на простом примере.
Типичные ошибки при создании первого робота
Первая ошибка — игнорировать проверку результатов. Непроверенный вызов OrderSend скрывает проблемы и приводит к «молчаливо неработающему» советнику. Вторая — тяжёлые вычисления на каждом тике, из-за чего терминал тормозит и тест идёт медленно. Третья — отсутствие защиты от повторных входов: робот открывает сделки на каждом пересечении, не проверяя существующие позиции.
Четвёртая ошибка — использовать непроверенные цены: например, открывать покупку по Bid вместо Ask. Пятая — забывать про тест: новичок запускает советник сразу на реальном или демо-счёте и теряет время на отладку вручную. Все эти ошибки лечатся одним правилом: сначала код, потом тестер, и только затем реальный счёт.
После тестера: демо-счёт и первые шаги к реальной торговле
Когда советник стабильно работает в тестере, переходите к проверке на демо-счёте. Робот должен поработать в реальном времени: получить настоящие тики, пройти через очередь исполнения ордеров и показать поведение в условиях реальной торговой среды. На демо вы заметите нюансы, которых не видно в тестере: например, задержки исполнения или различия в ценах.
Сколько тестировать на демо? Обычно от двух недель до месяца. За это время соберите статистику: количество сделок, реальное проскальзывание, поведение в новостные дни. Если советник показывает ожидаемый результат и не вызывает ошибок — можно рассматривать минимальные объёмы на реальном счёте. Начинайте с самых маленьких лотов и повышайте их постепенно, по мере накопления уверенности.
Ещё один полезный приём — форвард-тестирование параллельно с историческим. Запустите советник на демо, а его настройки параллельно прогоняйте на новых данных в тестере. Сравнение результатов покажет, насколько робот устойчив к изменению рыночных условий и не был ли он «переоптимизирован» под прошлое. Этот навык пригодится вам при создании всех следующих роботов.
Вывод
Первый простой торговый робот — это ваш практический экзамен по алготрейдингу. Он учит структуре советника, работе с индикаторами, торговым функциям и тестированию. Начните с пересечения двух скользящих средних, доведите робота до предсказуемо работающего состояния в тестере — и вы освоите фундамент, на котором строятся все сложные системы. Обучение подобным темам подробно разбирается в каналах https://max.ru/channel_mqlmasters и https://t.me/mqlmasters — там собраны материалы по программированию советников любого уровня сложности. Помните: каждый профессиональный робот когда-то был чьим-то первым простым советником. Сделайте свой шаг — создайте, протестируйте и улучшите своего первого торгового робота.
Владимир, опубликовал запись .
С момента публикации зафиксировано 64 просмотра. Сейчас эту запись просматривает 1 незарегистрированный пользователь.
|
|