下载MetaTrader 5

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

要添加评论,请登录注册
您知道MQL5有结构吗?
leochina84
169
leochina84 2014.12.17 10:33 

使用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());
        }
     }  
enbo lu
版主
1945
enbo lu 2014.12.17 13:19  
leochina84:

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

如下调用: 

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

enbo lu
版主
1945
enbo lu 2014.12.18 01:35  

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

leochina84
169
leochina84 2014.12.18 01:59  
luenbo:

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

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

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

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

leochina84
169
leochina84 2014.12.18 02:08  

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

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

enbo lu
版主
1945
enbo lu 2014.12.18 02:25  
leochina84:

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

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

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

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

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

要添加评论,请登录注册