MT5编程求助 - 页 2 12 新评论 calvados_zju 2022.05.08 13:23 #11 chnp: 我做了个mt5的EA,但是发现真实账户会连续开仓2笔,同样的设置在demo和回测中都是只开一笔的,不知道有没有大神碰到过? 可以参考系统自带的负责下单交易管理的基类文件:ExpertTrade.mqh,或者直接使用,可靠且有保障。 Shi Long Gong 2022.05.11 06:25 #12 calvados_zju #: 可以参考系统自带的负责下单交易管理的基类文件:ExpertTrade.mqh,或者直接使用,可靠且有保障。 Shi Long Gong 2022.05.11 06:26 #13 这个问题我能解决,加我wx一起探讨。 Ziheng Zhuang 2022.05.11 09:20 #14 calvados_zju #: 可以参考系统自带的负责下单交易管理的基类文件:ExpertTrade.mqh,或者直接使用,可靠且有保障。 哪里负责订单管理了? 这个类跟订单管理毫无关系 //+------------------------------------------------------------------+ //| ExpertTrade.mqh | //| Copyright 2009-2017, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #include <Trade\SymbolInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\OrderInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\Trade.mqh> //+------------------------------------------------------------------+ //| Class CExpertTrade. | //| Appointment: Class simple trade operations. | //| Derives from class CTrade. | //+------------------------------------------------------------------+ class CExpertTrade : public CTrade { protected: ENUM_ORDER_TYPE_TIME m_order_type_time; datetime m_order_expiration; CSymbolInfo *m_symbol; // symbol object CAccountInfo m_account; // account object public: CExpertTrade(void); ~CExpertTrade(void); //--- methods for easy trade bool SetSymbol(CSymbolInfo *symbol); bool SetOrderTypeTime(ENUM_ORDER_TYPE_TIME order_type_time); bool SetOrderExpiration(datetime order_expiration); bool Buy(double volume,double price,double sl,double tp,const string comment=""); bool Sell(double volume,double price,double sl,double tp,const string comment=""); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ void CExpertTrade::CExpertTrade(void) : m_symbol(NULL), m_order_type_time(ORDER_TIME_GTC), m_order_expiration(0) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CExpertTrade::~CExpertTrade(void) { } //+------------------------------------------------------------------+ //| Setting working symbol for easy trade operations. | //+------------------------------------------------------------------+ bool CExpertTrade::SetSymbol(CSymbolInfo *symbol) { if(symbol!=NULL) { m_symbol=symbol; return(true); } //--- return(false); } //+------------------------------------------------------------------+ //| Setting order expiration type for easy trade operations | //+------------------------------------------------------------------+ bool CExpertTrade::SetOrderTypeTime(ENUM_ORDER_TYPE_TIME order_type_time) { if(m_symbol==NULL) return(false); //--- if(order_type_time==ORDER_TIME_SPECIFIED) { if((m_symbol.TradeTimeFlags()&SYMBOL_EXPIRATION_SPECIFIED)==0) { m_order_type_time =ORDER_TIME_GTC; m_order_expiration=0; return(false); } } //--- m_order_type_time=order_type_time; //--- succeed return(true); } //+------------------------------------------------------------------+ //| Setting order expiration time for easy trade operations | //+------------------------------------------------------------------+ bool CExpertTrade::SetOrderExpiration(datetime order_expiration) { if(m_symbol==NULL) return(false); //--- check expiration if(order_expiration>=TimeCurrent()+60) { if(!SetOrderTypeTime(ORDER_TIME_SPECIFIED)) return(false); m_order_expiration=order_expiration; } else { m_order_type_time=ORDER_TIME_GTC; m_order_expiration=0; } //--- succeed return(true); } //+------------------------------------------------------------------+ //| Easy LONG trade operation | //+------------------------------------------------------------------+ bool CExpertTrade::Buy(double volume,double price,double sl,double tp,const string comment="") { double ask,stops_level; //--- checking if(m_symbol==NULL) return(false); string symbol=m_symbol.Name(); if(symbol=="") return(false); //--- ask=m_symbol.Ask(); stops_level=m_symbol.StopsLevel()*m_symbol.Point(); if(price!=0.0) { if(price>ask+stops_level) { //--- send "BUY_STOP" order return(OrderOpen(symbol,ORDER_TYPE_BUY_STOP,volume,0.0,price,sl,tp, m_order_type_time,m_order_expiration,comment)); } if(price<ask-stops_level) { //--- send "BUY_LIMIT" order return(OrderOpen(symbol,ORDER_TYPE_BUY_LIMIT,volume,0.0,price,sl,tp, m_order_type_time,m_order_expiration,comment)); } } //--- return(PositionOpen(symbol,ORDER_TYPE_BUY,volume,ask,sl,tp,comment)); } //+------------------------------------------------------------------+ //| Easy SHORT trade operation | //+------------------------------------------------------------------+ bool CExpertTrade::Sell(double volume,double price,double sl,double tp,const string comment="") { double bid,stops_level; //--- checking if(m_symbol==NULL) return(false); string symbol=m_symbol.Name(); if(symbol=="") return(false); //--- bid=m_symbol.Bid(); stops_level=m_symbol.StopsLevel()*m_symbol.Point(); if(price!=0.0) { if(price>bid+stops_level) { //--- send "SELL_LIMIT" order return(OrderOpen(symbol,ORDER_TYPE_SELL_LIMIT,volume,0.0,price,sl,tp, m_order_type_time,m_order_expiration,comment)); } if(price<bid-stops_level) { //--- send "SELL_STOP" order return(OrderOpen(symbol,ORDER_TYPE_SELL_STOP,volume,0.0,price,sl,tp, m_order_type_time,m_order_expiration,comment)); } } //--- return(PositionOpen(symbol,ORDER_TYPE_SELL,volume,bid,sl,tp,comment)); } //+------------------------------------------------------------------+ m1523 2022.05.17 09:32 #15 Qi Mai #: 代写EA需要的联系我怎么联系 12 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我做了个mt5的EA,但是发现真实账户会连续开仓2笔,同样的设置在demo和回测中都是只开一笔的,不知道有没有大神碰到过?
可以参考系统自带的负责下单交易管理的基类文件:ExpertTrade.mqh,或者直接使用,可靠且有保障。
可以参考系统自带的负责下单交易管理的基类文件:ExpertTrade.mqh,或者直接使用,可靠且有保障。
哪里负责订单管理了? 这个类跟订单管理毫无关系
代写EA需要的联系我