在市场发布程序遇到问题 - 页 2 12 新评论 Zhen Yu Li 2022.03.19 06:38 #11 Xiao Hong Bian #: 用这段代码检验了,传上去检验还是报错,谢谢请看看什么原因! //--- 交易操作允许的最大交易量 double max_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); if(volume>max_volume) { return(max_volume); } 这个代码检查了最大的单笔开仓量,但你这个应该是超过了总单量限制,再加个检查项。Print("Maximum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MAXLOT)); MarketInfo(Symbol(),MODE_MAXLOT) 可查到该品种最大允许的持仓单量。开仓前检查一下。 Zhen Yu Li 2022.03.19 06:55 #12 //+------------------------------------------------------------------+ //| 返回交易品种中一个订单允许的最大交易量 | //+------------------------------------------------------------------+ double NewOrderAllowedVolume(string symbol) { double allowed_volume=0; //--- 取得订单最大交易量限制 double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //--- 取得一个交易品种的交易量限制 double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT); //--- 取得一个交易品种已建仓位的交易量 double opened_volume=PositionVolume(symbol); if(opened_volume>=0) { //--- 如果我们已经用完了交易量 if(max_volume-opened_volume<=0) return(0); //--- 如果已建仓位的交易量没有超过 max_volume double orders_volume_on_symbol=PendingsVolume(symbol); allowed_volume=max_volume-opened_volume-orders_volume_on_symbol; if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume; } return(allowed_volume); } //+------------------------------------------------------------------+ //| 返回交易品种当前挂单的交易量 | //+------------------------------------------------------------------+ double PendingsVolume(string symbol) { double volume_on_symbol=0; ulong ticket; //--- 获得全部交易品种当前下单数量 int all_orders=OrdersTotal(); //--- 恢复范围内的全部订单 for(int i=0; i<all_orders; i++) { //--- 获得列表中持仓的订单号 if(ticket=OrderGetTicket(i)) { //--- 如果订单中指定我们的交易品种,增加该订单的交易量 if(symbol==OrderGetString(ORDER_SYMBOL)) volume_on_symbol+=OrderGetDouble(ORDER_VOLUME_INITIAL); } } //--- 返回指定交易品种当前已下挂单的总交易量 return(volume_on_symbol); } 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
用这段代码检验了,传上去检验还是报错,谢谢请看看什么原因!
这个代码检查了最大的单笔开仓量,但你这个应该是超过了总单量限制,再加个检查项。
MarketInfo(Symbol(),MODE_MAXLOT) 可查到该品种最大允许的持仓单量。开仓前检查一下。Print("Maximum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MAXLOT));