Руководство по тестированию и оптимизации AI expert advisor | Deriv Blog
Доведите свой AI expert advisor до совершенства с помощью правильных методов тестирования. В нашем руководстве рассматриваются распространённые проблемы, методы тестирования и оптимизация expert advisor для надёжных торговых ботов.
Редакция Deriv · 21 April 2025 · 6 мин чтения

AI trading expert advisors уже здесь — но их всё равно нужно тестировать и дорабатывать.
Если вы уже использовали AI-инструменты, такие как Claude или ChatGPT, чтобы создать expert advisor для Deriv MT5 или cBot для Deriv cTrader, вы отлично начали. Но даже если код выглядит правильным, в нём всё ещё могут быть ошибки, влияющие на работу бота.
Перед запуском expert advisor (EA) на реальном рынке важно протестировать его и убедиться, что он работает так, как вы ожидаете.
В этом руководстве мы разберём распространённые ошибки в коде AI-generated EAs, способы их исправления и практические советы по улучшению работы бота.
Распространённые ошибки кодирования AI в MQL5
Вот некоторые из самых частых проблем, встречающихся в AI-generated EAs, а также способы их исправления:
- Ошибка undeclared identifier в MQL5
Эта ошибка появляется, когда бот использует переменную или имя, которые не были корректно определены, например при отсутствии параметра или использовании неверного имени в индикаторах, таких как iMA().
Исправление:
Проверьте параметры индикатора и убедитесь, что все имена переменных соответствуют ожидаемым значениям в MetaEditor (инструменте для кодирования MT5).
- Отсутствуют функции исполнения сделок Buy/Sell
Некоторые AI-generated боты пропускают важную логику для открытия сделок.
Исправление:
Добавьте базовые функции исполнения сделок вручную. Вот пример простой структуры для размещения ордера на покупку:
void OpenBuy() {
MqlTradeRequest request; MqlTradeResult result;
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
request.volume = 0.1; request.magic = 12345;
OrderSend(request, result);
}
Также обязательно добавьте логику для ордеров на продажу и задайте условия, при которых должны открываться сделки.
- Неверные условия цикла в Deriv cTrader
В Deriv cTrader логика бота должна выполняться внутри специальных функций, таких как OnBar() или OnTick(). Они запускаются автоматически при движении рынка. Если ваш код размещён вне этих секций, например в неправильном цикле или в глобальной области видимости, он не будет работать так, как ожидается.
Исправление:
Убедитесь, что обработка баров и тиков выполняется внутри OnBar() или OnTick(). Это позволит вашему боту корректно реагировать на новые тики или бары во время бэктестинга и реальной торговли.
- Неверный расчёт размера лота на основе процента от баланса
Когда AI пытается задать размер лота на основе баланса счёта (например, риск 2% на сделку), он может пропустить важную деталь — размер контракта. Это может привести к неточному размеру лота. Это не вызовет ошибку в коде, но при тестировании вы увидите размеры сделок, которые не соответствуют вашим настройкам риска, что приведёт к слишком высокой или слишком низкой экспозиции в реальных сделках.
Исправление:
Используйте формулу с размером лота, которая учитывает размер контракта, например:
//-----------------------------------------------------------------
double accountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
double riskMoney = accountBalance * (RiskPercent / 100.0);
double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
double pointValue = tickValue / tickSize;
double contractSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);
if(contractSize > 0)
pointValue = pointValue / contractSize;
double lotSize = riskMoney / (StopLossPoints * pointValue);
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
lotSize = MathMax(lotSize, minLot);
lotSize = MathMin(lotSize, maxLot);
lotSize = MathFloor(lotSize / lotStep) * lotStep;
- Другие ошибки
Если вы столкнулись с одной из этих ошибок — или с любой другой — вы всегда можете обратиться к своей AI-модели за помощью в выявлении и исправлении проблемы.
Просто скопируйте сообщение об ошибке и соответствующий код, а затем отправьте их AI-модели. В большинстве случаев она сможет определить проблему и предложить исправление или возможные решения.
Совет: Всегда запускайте бэктест перед переходом к реальной торговле. Такие проблемы не проявляются, пока вы не протестируете стратегию на реальных рыночных данных.
Улучшите свой AI-generated expert advisor
Когда бот уже работает, вы можете внести небольшие изменения, чтобы улучшить его производительность и стабильность. Вот несколько распространённых приёмов:
- Добавьте логику обработки ошибок, чтобы справляться с непредвиденным поведением при высокой волатильности или проблемах с подключением.
- Используйте trailing stop-loss, чтобы фиксировать потенциальную прибыль, когда рынок движется в вашу пользу.
- Протестируйте свою стратегию на истории, чтобы увидеть, как она работала бы ранее.
- Очистите и структурируйте код, чтобы повысить читабельность и эффективность. Это упростит дальнейшее обновление и устранение неполадок.
Совет: Используйте MetaEditor Debugger (в MT5), чтобы пошагово проверить, как работает ваш бот.
Почему бэктестинг сделок критически важен
AI-generated боты — отличный способ автоматизировать торговлю без необходимости писать код с нуля. Но даже с AI вашей стратегии всё равно нужны проверки человеком и корректировки, чтобы она хорошо работала в реальных условиях.
Перед выходом на реальный рынок уделите время тщательному тестированию и внесите небольшие улучшения. Даже незначительные исправления могут заметно повлиять на стабильность и эффективность работы вашего EA.