AI 专家顾问测试与优化指南 | Deriv Blog

通过正确的测试技巧完善您的 AI 专家顾问。我们的指南涵盖常见问题、测试方法,以及专家顾问优化,助您打造更可靠的交易机器人。

Deriv 编辑团队 · 21 April 2025 · 3 分钟阅读

Share

AI 交易专家顾问已经到来——但您仍然需要对其进行测试和优化。

如果您已经使用 Claude 或 ChatGPT 等 AI 工具为 Deriv MT5 创建了专家顾问,或为 Deriv cTrader 创建了 cBot,那么您已经迈出了很好的第一步。即使代码看起来正确,其中仍可能存在会影响机器人运行方式的错误。

在您将专家顾问(EA)投入真实市场之前,务必要先对其进行测试,并确认它按您的预期运行。

在本指南中,我们将介绍 AI 生成的 EA 中常见的编码错误、如何修复这些错误,以及提升机器人表现的实用技巧。

常见的 AI MQL5 编码错误

以下是 AI 生成的 EA 中最常见的一些问题,以及对应的修正方法:

  • MQL5 中未声明标识符错误

当机器人使用了未正确定义的变量或名称时,就会出现此错误,例如缺少参数,或在 iMA() 等指标中使用了不正确的名称。

修复方法:
检查指标参数,并确保所有变量名称都与 MetaEditor(MT5 的编码工具)中的预期一致。

  • 缺少买入/卖出交易执行函数

一些 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() 内处理 bar 和 tick。这样您的机器人就能在回测和实盘交易期间正确响应新的 tick 或 bar。

  • 基于余额百分比计算手数时出错

当 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 生成专家顾问

一旦您的机器人可以正常运行,您就可以通过一些小改动来提升其表现和稳定性。以下是一些常见的优化方法:

  • 添加错误处理逻辑,以应对高波动或连接问题期间的意外行为。
  • 使用移动止损,在市场朝有利方向移动时锁定潜在收益。
  • 使用历史数据对您的策略进行回测,查看其过去的表现。
  • 清理并整理您的代码,以提升可读性和效率。这样以后更新或排查问题会更容易。

提示:使用(MT5 上的)MetaEditor 调试器逐步测试您的机器人运行方式。

为什么回测交易至关重要

AI 生成的机器人是实现交易自动化的好方法,无需从零开始编码。但即使有 AI,您的策略仍需要人工检查和调整,才能在真实环境中良好运行。

在投入实盘前,请花时间充分测试,并进行小幅改进。即使是微小的修复,也可能显著提升您的 EA 表现的稳定性和有效性。

Join 3M+ global traders

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