【问题标题】:Keep order details in arrays?将订单详细信息保存在数组中?
【发布时间】:2018-07-11 16:46:34
【问题描述】:

你能帮帮我吗?

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

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

非常感谢

【问题讨论】:

    标签: arrays orders mql4


    【解决方案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=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
    

    【讨论】:

    • 谢谢丹尼尔,这很有帮助。您能否解释一下每个 EA 都有自己的订单簿是什么意思?
    • 如果您有多个智能交易系统在不同的图表上运行 - 那么每个 EA 都会保留自己的交易簿,并且不会将时间浪费在由其他智能交易系统打开的其他交易上。
    • 那么当你查询orderbook时,你只得到那个EA生成的订单?如果您有一个跨多个符号运行的 EA 怎么办?
    • 我认为没有问题 - 将交易品种的名称保留为 CTrade 的字段,并从 OnTimer() 而不是 onTick() 调用所有操作,仅此而已
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多