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

AI-торговые советники уже здесь — но их всё равно нужно тестировать и дорабатывать.
Если вы уже использовали AI-инструменты вроде Claude или ChatGPT для создания советника для Deriv MT5 или cBot для Deriv cTrader, вы отлично начали. Но даже если код выглядит правильно, в нём всё равно могут быть ошибки, которые влияют на работу бота.
Прежде чем запускать экспертный советник (EA) на реальном рынке, важно протестировать его и убедиться, что он работает так, как вы ожидаете.
В этом руководстве мы разберём распространённые ошибки кодирования в AI-сгенерированных EA, способы их исправления и практические советы по улучшению работы вашего бота.
Распространённые ошибки кодирования AI в MQL5
Вот некоторые из самых распространённых проблем в AI-сгенерированных EA, а также способы их исправления:
- Ошибка undeclared identifier в MQL5
Эта ошибка возникает, когда бот использует переменную или имя, которые не были правильно определены, например, отсутствует параметр или используется неверное имя в индикаторах вроде iMA().
Исправление:
Проверьте параметры индикатора и убедитесь, что все имена переменных соответствуют ожидаемым в MetaEditor (инструмент кодирования MT5).
- Отсутствующие функции исполнения сделок Buy/Sell
Некоторые AI-сгенерированные боты пропускают необходимую логику для открытия сделок.
Исправление:
Добавьте вручную базовые функции исполнения сделок. Вот пример базовой структуры для размещения ордера на покупку:
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-сгенерированный экспертный советник
Как только ваш бот заработает, вы можете внести небольшие изменения, чтобы улучшить его производительность и стабильность. Вот несколько распространённых приёмов:
- Добавьте логику обработки ошибок для управления непредвиденным поведением во время высокой волатильности или проблем с соединением.
- Используйте трейлинг-стоп, чтобы фиксировать потенциальную прибыль, когда рынок движется в вашу пользу.
- Проведите бэктест стратегии на исторических данных, чтобы увидеть, как она бы себя показала.
- Очистите и упорядочьте код, чтобы улучшить читаемость и эффективность. Это облегчит обновление или устранение неполадок в дальнейшем.
Совет: Используйте отладчик MetaEditor (в MT5), чтобы протестировать работу бота шаг за шагом.
Почему бэктестинг сделок критически важен
AI-сгенерированные боты — отличный способ автоматизировать торговлю без необходимости писать код с нуля. Но даже с AI ваша стратегия всё равно нуждается в проверках и корректировках со стороны человека, чтобы хорошо работать в реальных условиях.
Перед выходом на реальный рынок уделите время тщательному тестированию и небольшим улучшениям. Даже незначительные исправления могут существенно повлиять на стабильность и эффективность работы вашего EA.