成功下订单后,我们将需要收集有关订单的信息,尤其是在我们想要修改订单时。 在此 MQL4 OrderSelect 函数文章中了解如何获取订单信息以及如果您希望 EA 修改或关闭它,如何使用此函数。
所有这些都是通过 OrderSelect() 函数完成的。 要使用 OrderSelect(),我们可以使用订单的票号,或者我们可以遍历未结订单池并按顺序选择每个订单。
以下是 OrderSelect() 函数的语法:
bool OrderSelect(int Index, int Select, int Pool=MODE_TRADES)
为了便于参考,可以在下表中找到上述参数的说明:
Params | Description |
---|---|
Index | 我们要选择的订单的编号,或者在订单池中的位置。 Select 参数指示是哪一个。 |
Select | 一个常量,指示 Index 参数是票号还是订单池位置:
|
Pool | 指示订单池的可选常量:挂单/未结订单或已关闭订单。
|
下面是一个使用订单编号的 OrderSelect() 函数的示例。 它是为在买入订单发生后修改止损和获利而设置的:
if (OrdersTotalMagicOpen()==0 && OpenBuy==true)
{
ticket = OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lots,LotDigits),
Ask,vSlippage,0,0,EAName, MagicNumber, 0, Green);
return (ticket);
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Bid – Stop_Loss * vPoint, Ask+TakeProfit * vPoint,0,Green);
}
}
在上面的例子中,我们使用 OrderSelect() 来选择单号,然后将它与 OrderModify() 函数结合起来,这样我们就可以修改 StopLoss 和 TakeProfit。 这个例子对 ECN 经纪商特别有用。 在 ECN 经纪商中,您不能将止损和止盈值放在 OrderSend() 函数内的相应参数中。 相反,这些参数必须保持为 0。只有在下单后,订单止损和止盈才能通过 OrderSelect() 和 OrderModify() 函数修改,如上图所示。 虽然上面的 OrderSelect() 与 OrderModify() 函数相结合,但实际上可以部署一系列订单信息函数来检索有关订单的信息。 MLQ Reference 中有这些函数的完整列表。 以下是常用的订单信息函数列表:
Functions | Description |
---|---|
OrderSymbol() | The symbol of the instrument that the order was placed on. |
OrderType() | The type of order: buy or sell; market, stop or limit. |
OrderOpenPrice() | The opening price of the selected order. |
OrderLots() | The lot size of the selected order. |
OrderStopLoss() | The stop loss price of the selected order. |
OrderTakeProfit() | The take profit of the selected order. |
OrderTicket() | The ticket number of the selected order. |
OrderMagicNumber() | The magic number of the selected order. |