MqlTradeCheckResult 结构体

在向交易服务器发送交易操作请求之前,建议检查该请求是否已完成且没有形式上的错误。检查由 OrderCheck 函数执行,将 MqlTradeRequest 结构体中的请求和 MqlTradeCheckResult 结构体类型的接收变量传递给该函数。

除了请求的正确性之外,该结构体还允许在执行交易操作之后评估账户状态,特别是结余、资金和保证金。

struct MqlTradeCheckResult 

   uint   retcode;      // Response code
   double balance;      // Balance after the transaction
   double equity;       // Equity after the transaction
   double profit;       // Floating profit
   double margin;       // Margin requirements
   double margin_free;  // Free margin
   double margin_level// Margin level
   string comment;      // Comment to the response code (description of the error)
};

下表对这些字段进行了说明。

字段

说明

retcode

假定的返回码

balance

执行交易操作后观察到的余额值

equity

执行交易操作后进行观察到的自有资金值

profit

执行交易操作后观察到的浮动盈利值

margin

交易后锁定的总保证金

margin_free

执行交易操作后剩余的自有可用资金量

margin_level

将在执行交易操作后设定的保证金水平

comment

响应代码的注释,错误说明

在通过调用 OrderCheck 填充的结构体中,retcode 字段将包含一个平台支持的结果代码,用于处理真实交易请求并将类似的 retcode 字段放入 MqlTradeResult 结构体中(在调用 OrderSendOrderSendAsync 交易函数之后)。

返回码常量显示在 MQL5 文档中。为了在调试 EA 交易时更直观地输出到日志中,在 TradeRetcode.mqh 文件中定义了所应用的枚举 TRADE_RETCODE。其中的所有元素都有与内置常量相匹配的标识符,但没有公共前缀 "TRADE_RETCODE_"。例如,

enum TRADE_RETCODE
{
   OK_0           = 0,      // no standard constant
   REQUOTE        = 10004,  // TRADE_RETCODE_REQUOTE
   REJECT         = 10006,  // TRADE_RETCODE_REJECT
   CANCEL         = 10007,  // TRADE_RETCODE_CANCEL
   PLACED         = 10008,  // TRADE_RETCODE_PLACED
   DONE           = 10009,  // TRADE_RETCODE_DONE
   DONE_PARTIAL   = 10010,  // TRADE_RETCODE_DONE_PARTIAL
   ERROR          = 10011,  // TRADE_RETCODE_ERROR
   TIMEOUT        = 10012,  // TRADE_RETCODE_TIMEOUT
   INVALID        = 10013,  // TRADE_RETCODE_INVALID
   INVALID_VOLUME = 10014,  // TRADE_RETCODE_INVALID_VOLUME
   INVALID_PRICE  = 10015,  // TRADE_RETCODE_INVALID_PRICE
   INVALID_STOPS  = 10016,  // TRADE_RETCODE_INVALID_STOPS
   TRADE_DISABLED = 10017,  // TRADE_RETCODE_TRADE_DISABLED
   MARKET_CLOSED  = 10018,  // TRADE_RETCODE_MARKET_CLOSED
   ...
};
   
#define TRCSTR(XEnumToString((TRADE_RETCODE)(X))

因此,使用 TRCSTR(r.retcode)(其中 r 是一个结构)可提供数字代码的最小说明。

我们将考虑一个应用宏和分析结构体的示例,在下一节关于 OrderCheck 函数的内容中进行介绍。