在数组中保留订单详情?

时间:2018-02-01 11:14:57

标签: arrays orders mql4

你可以帮我吗?

1)在EA的数组中保留订单是否更好,而不是使用mql4中的Order ..命令查询系统?将数据保存在数组中意味着您必须更少地查询系统,并且互联网可靠性可能不是问题。但是,保持准确订单所需的编码非常麻烦。

2)您如何跟踪同一个符号上的订单但是来自两个不同的EA?

非常感谢

1 个答案:

答案 0 :(得分:1)

这取决于你的需求和想法,如果没有它,说出任何东西都很困难。 您可以保留一系列故障单号码(或CArrayObj),但需要在执行其他操作(如路径)之前检查该故障单是否存在。如果您有互联网问题 - 更改vps并且不尝试通过编码解决它。 每个ea都会保留一本自己的交易书。

无法想象保留一定数量的门票,但也许存在。如果你需要存储一些数据,除了可以通过Order ...()然后使用类或结构,一些字段可能用osl,tp,oop,lot,magic,symbol等填充一次,不要调用除OrderProfit(),OrderClosePrice() and OrderCloseTime()之外的Order。()函数 - 这些函数将一直被调用。

如何存储数据的示例如下:CTrade的实例被添加到CArrayObj

#include <Object.mqh> #include <Arrays\ArrayObj.mqh>

class CTrade : public CObject
   {
private:
   int     m_ticketId;
   double  m_oop,m_osl,m_otp,m_lot;//OrderOpenPrice() and sl, tp, lot-add more

public:
           CTrade(const int ticket){
              m_ticketId=ticket; 
           }
  bool     isTicketExist(){
             if(OrderSelect(m_ticketId,SELECT_BY_TICKET))
                   return(OrderCloseTime()==0);
             else return(false);//or GetLastError()!=4108
           }
   };

CArrayObj *listOfTrades=new CArrayObj;//OnInit delete(listOfTrades); //OnDeinit

for(int i=listOfTrades.Total()-1;i>=0;i--){
   CTrade *trade=listOfTrades.At(i);
   if(!trade.isTicketExist())
      {listOfTrades.Delete(i);continue;}
   //do trail or what you need
} // - loop over the array when necessary but clean it first

listOfTrades.Add(new CTrade(ticket));// - way to add elements to the list