将订单详细信息保存在数组中



你能帮帮我吗?

1( 将订单保留在 EA 的数组中是否比使用订单查询系统更好。MQL4 中的命令?将数据保存在数组中意味着您必须减少对系统的查询,并且互联网可靠性可能不是一个问题。但是,保持准确的订单簿所需的编码非常繁琐。

2( 您如何跟踪同一交易品种上但来自两个不同 EA 的订单?

谢谢

这取决于您的需求和想法,否则可能很难说出任何事情。您可以保留一个工单编号数组(或 CArrayObj (,但在执行其他操作(如跟踪(之前需要检查工单是否存在。如果您在互联网上遇到问题 - 更改VPS,不要尝试通过编码解决它。每个 EA 都保留了自己的交易簿。

无法想象只保留门票数量的感觉,但也许它存在。如果您除了可以从订单中实现的内容之外还需要存储一些数据......(( 然后使用类或结构,某些字段可能会用 osl、tp、oop、lot、magic、符号等填充一次,并且不调用 Order。(( 函数稍后除 OrderProfit(),OrderClosePrice() and OrderCloseTime() 之外 -此类函数将一直被调用。

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

#include <Object.mqh>
#include <ArraysArrayObj.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=NULL;
int OnInit(void){
    listOfTrades=new CArrayObj;
}
void OnDeinit(const int reason){
   if(CheckPointer(listOfTrades)==POINTER_DYNAMIC)
      delete(listOfTrades);
}
void OnTick(){
   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

相关内容

  • 没有找到相关文章

最新更新