1)在EA的数组中保留订单是否更好,而不是使用mql4中的Order ..命令查询系统?将数据保存在数组中意味着您必须更少地查询系统,并且互联网可靠性可能不是问题。但是,保持准确订单所需的编码非常麻烦。
2)您如何跟踪同一个符号上的订单但是来自两个不同的EA?
非常感谢
答案 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