请求发送结果:MqlTradeResult 结构体

为了响应由 OrderSend OrderSendAsync 函数(将在下一章节中介绍这两个函数)执行的交易请求,服务器应返回请求处理结果。为此,使用了一个特殊的预定义结构体 MqlTradeResult

struct MqlTradeResult 

   uint     retcode;          // Operation result code 
   ulong    deal;             // Transaction ticket, if it is completed 
   ulong    order;            // Order ticket, if it is placed 
   double   volume;           // Trade volume confirmed by the broker 
   double   price;            // Trade price confirmed by the broker 
   double   bid;              // Current market bid price 
   double   ask;              // Current market offer price 
   string   comment;          // Broker's comment on the operation 
   uint     request_id;       // Request identifier, set by the terminal when sending  
   uint     retcode_external// Response code of the external trading system 
};

下表对其字段进行了说明。

字段

说明

retcode

交易服务器返回码

deal

执行时的交易订单号(在 TRADE_ACTION_DEAL 交易操作期间)

order

下达的订单号(在 TRADE_ACTION_PENDING 交易操作期间)

volume

经纪商确认的交易量(取决于订单 执行模式

price

由经纪商确认的交易价格(取决于 deviation 字段,该字段包含在 交易请求中、 执行模式和交易操作中)

bid

当前市场买价

ask

当前市场卖价

comment

经纪商对交易的注释(默认情况下,用解密的交易服务器返回代码填充)

request_id

请求 ID,由终端在发送给交易服务器时设置

retcode_external

外部交易系统返回的错误代码

正如我们将在下面看到的,在进行交易操作时,MqlTradeResult 类型的变量作为 OrderSendOrderSendAsync 函数中的第二个参数通过引用传递。该变量会返回结果。

向服务器发送交易请求时,终端将 request_id 标识符设置为唯一值。在随后进行交易事件分析时需要这个标识符(使用异步函数 OrderSendAsync 时必须进行分析)。此标识符允许你将发送的请求与其传递给 OnTradeTransaction 事件处理程序的处理结果相关联。

retcode_external 字段中错误的存在和类型取决于经纪商和转发交易操作的外部交易系统。

根据交易操作和发送方式的不同,请求结果会以不同的方式进行分析。我们将在随后的具体操作部分处理这个问题:市场买卖、下单和撤单、修改仓位和平仓。