请问关于OrdersTotal()调用的问题

 

使用OrdersTotal()在EA中调用订单的信息,挂单的可以被返还,但已成交的无法返还。

如下调用: 

input long my_magic=555;
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 获取订单总数
   int orders=OrdersTotal();
//--- 扫描订单列表
   for(int i=0;i<orders;i++)
     {
      ResetLastError();
      //--- 把订单根据其在列表中的编号复制到缓存中
      ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// 如果订单被成功复制到缓冲区,处理它
        {
         double price_open  =OrderGetDouble(ORDER_PRICE_OPEN);
         datetime time_setup=OrderGetInteger(ORDER_TIME_SETUP);
         string symbol      =OrderGetString(ORDER_SYMBOL);
         long magic_number  =OrderGetInteger(ORDER_MAGIC);
         if(magic_number==my_magic)
           {
            //  使用指定的 ORDER_MAGIC 处理订单
           }
         PrintFormat("订单 #%d 交易品种 %s 设置时间 %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // 调用 OrderGetTicket() 没有成功完成
        {
         PrintFormat("从列表复制订单到缓存时出错. 错误代码: %d",GetLastError());
        }
     }  
 
leochina84:

使用OrdersTotal()在EA中调用订单的信息,挂单的可以被返还,但已成交的无法返还。

如下调用: 

历史订单用 HistoryOrdersTotal()
 
luenbo:
历史订单用 HistoryOrdersTotal()
订单虽然成交,但还没有平仓,已经属于历史订单了吗?

 

在获取订单前,你要先选中订单,Orderselect()

 
luenbo:

在获取订单前,你要先选中订单,Orderselect()

我明白你的意思,涉及到具体订单信息的调用是要先用Orderselect(),再用OrderGetDouble(ORDER_PRICE_OPEN)之类的调用具体信息。

但使用 Orderselect()的前提是根据OrdersTotal()获得当前处于交易状态的订单数量,再通过索引或订单号使用Orderselect()调用订单信息。

可是我在使用 OrdersTotal()时,只能检索到处于挂单状态的订单数量,不能检索处于交易状态的订单,这是我的问题所在。

 

MQL5是否就不具备调用“已成交但未平仓”订单的功能,而只能对“持仓、挂单、历史订单”进行操作。

这一点与MQL4是不同的,因为MQL4没有持仓这个概念,是吗?

 
leochina84:

我明白你的意思,涉及到具体订单信息的调用是要先用Orderselect(),再用OrderGetDouble(ORDER_PRICE_OPEN)之类的调用具体信息。

但使用 Orderselect()的前提是根据OrdersTotal()获得当前处于交易状态的订单数量,再通过索引或订单号使用Orderselect()调用订单信息。

可是我在使用 OrdersTotal()时,只能检索到处于挂单状态的订单数量,不能检索处于交易状态的订单,这是我的问题所在。

MT5中要区分Position、Order和deal的概念。

用PositionSelect()获取当前持仓头寸。

 
问,mt5怎么获取当前未平仓的单数
 
leochina84:

使用OrdersTotal()在EA中调用订单的信息,挂单的可以被返还,但已成交的无法返还。

如下调用: 

leochina84:

MQL5是否就不具备调用“已成交但未平仓”订单的功能,而只能对“持仓、挂单、历史订单”进行操作。

这一点与MQL4是不同的,因为MQL4没有持仓这个概念,是吗?

mt5的订单机制和mt4完全不同,您应该没有搞清楚mt5的In 和 out 订单的区别,mt5的基本概念Order和deal要弄清楚,不然订单的归类会一团乱

 
获取deal订单,in是开仓未平仓,out是已平仓。
原因: