Руководство по тестированию и оптимизации AI expert advisor | Deriv Blog

Доведите свой AI expert advisor до совершенства с помощью правильных методов тестирования. В нашем руководстве рассматриваются распространённые проблемы, методы тестирования и оптимизация expert advisor для надёжных торговых ботов.

Редакция Deriv · 21 April 2025 · 6 мин чтения

Share

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.

Join 3M+ global traders

Open an account in minutes and start trading the world's markets — forex, stocks, indices, and more.