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

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

Редакция Deriv · 21 апреля 2025 г. · 4 мин чтения

Share

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.

Join 3M+ global traders

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