初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1453 1...144614471448144914501451145214531454145514561457145814591460...1503 新评论 Mikhail Toptunov 2023.04.21 16:29 #14521 Alexey Viktorov #:为什么要在仓位中寻找挂单? 谢谢,我想我明白了。我必须以当前价格建仓,但我下的是挂单,所以没有下单,因为我指定的是当前价格。 我用 ENUM_ORDER_TYPE order_type= position_buff[i].type==0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL; 但我必须 ENUM_POSITION_TYPE order_type= position_buff[i].type==0 ? POSITION_TYPE_BUY : POSITION_TYPE_SELL; Mikhail Toptunov 2023.04.21 16:43 #14522 我不明白为什么 PositionOpen 中的 ENUM_ORDER_TYPE 不是ENUM_POSITION_TYPE? //+------------------------------------------------------------------+ //| Open position | //+------------------------------------------------------------------+ bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume, const double price,const double sl,const double tp,const string comment) { //--- check stopped if(IsStopped(__FUNCTION__)) return(false); //--- clean ClearStructures(); //--- check if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL) { m_result.retcode=TRADE_RETCODE_INVALID; m_result.comment="Invalid order type"; return(false); } //--- setting request m_request.action =TRADE_ACTION_DEAL; m_request.symbol =symbol; m_request.magic =m_magic; m_request.volume =volume; m_request.type =order_type; m_request.price =price; m_request.sl =sl; m_request.tp =tp; m_request.deviation=m_deviation; //--- check order type if(!OrderTypeCheck(symbol)) return(false); //--- check filling if(!FillingCheck(symbol)) return(false); m_request.comment=comment; //--- action and return the result return(OrderSend(m_request,m_result)); } Aleksandr Slavskii 2023.04.21 16:51 #14523 Mikhail Toptunov ENUM_POSITION_TYPE? 因为您不能开仓。 您需要向经纪商服务器发送交易指令以执行交易。 只有当交易被执行时,头寸才被打开。 订单发送成功(10008) 并不保证交易已执行,因此仓位已打开(10009)。 交易服务器返回代码 如果发送交易指令(订单)以执行交易操作 TRADE_ACTION_DEAL(即以当前市场价格执行交易),除 10009 之外的任何返回代码(m_result.retcode)都表明交易尚未执行。 为以防万一,也请检查 m_result.deal 票据。 Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера www.mql5.com Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 JRandomTrader 2023.04.21 20:00 #14524 Aleksandr Slavskii #:如果发送交易指令(订单)以进行交易操作 TRADE_ACTION_DEAL,即以当前市价进行交易,则除 10009 以外的任何返回代码(m_result.retcode)都将表示交易没有进行。 唉,并非如此。我在这里已经说明了我是如何得到代码 10012 的,即零订单票据,但订单还是执行了。MQs 对此保持沉默。 我为此写了一根拐杖,但只有再次收到 10012 后才有可能检查它)。 Valeriy Yastremskiy 2023.04.21 20:28 #14525 JRandomTrader #:唉,不尽然。我已经在这里说明了我是如何收到代码 10012,即零订单票据的,但订单还是执行了。MQ 对此保持沉默。我为它写了一根拐杖,但只有再次收到 10012 后才有可能检查它)。 军事业务。订购,收到理解的答复。收到执行的答复,收到他们按订单执行的确认)))))。一切都是人类)))))) Alexey Viktorov 2023.04.22 06:16 #14526 Valeriy Yastremskiy #:军务。下令,收到理解的答复。收到执行的答复,收到他们按命令执行的确认)))))一切都是人类))))))))))))))))))))))))))))) 而下一个命令只能在明天下达。谁需要这样的交易? Mikhail Toptunov 2023.04.22 09:05 #14527 先生们,部长们!) 如何对已下达或已执行的订单 或仓位进行检查? 如果收到代码 10008,我如何进一步跟踪订单或头寸列表中的订单? 为了避免出现代码已收到,但仓位或订单不存在的情况。 //-------------------------------------------------------------------+ void OnTrade() { //--- Фиксируем если позиция открыта for(int i=0; i<ArraySize(position_buff); i++) if(position_buff[i].timeOp>1) if(!match_open_orders(position_buff[i].MagicNumber,position_buff[i].type,position_buff[i].comment)) // проверяю есть ли позиция { position_buff[i].timeOp= 0; // Фиксировать время Print("Метод OnTrade() по рынку не выполнен. Код возврата=",m_trade.ResultRetcode(), " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));// } else Print("Метод OnTrade() по рынку выполнен успешно. Код возврата=",m_trade.ResultRetcode(), " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));// } //--- Соответствие открытых ордеров ---------------------------------+ bool match_open_orders(long magic,int type,string comment) { //--- for(int i=PositionsTotal()-1; i>=0; i--) if(m_position.SelectByIndex(i)) { long f= m_position.Magic(); if(m_position.Comment()==comment) if(m_position.Type()==type) if(m_position.Magic()==magic) return(true); } for(int i=OrdersTotal()-1; i>=0; i--) if(m_position.SelectByIndex(i)) { long f= m_position.Magic(); if(m_position.Comment()==comment) if(m_position.Type()==type) if(m_position.Magic()==magic) return(true); } return(false); } Alexey Viktorov 2023.04.22 10:29 #14528 Mikhail Toptunov 执行的命令 或职位进行检查。 如果收到代码 10008,我如何进一步追踪订单或头寸列表中是否有该订单?排除代码出现但仓位或订单不存在的选项 尝试使用OnTradeTransaction() 而不是OnTrade()。 pivomoe 2023.04.22 10:49 #14529 MetaTrader 5 可在 Windows 7、8 上运行吗? Alexey Viktorov 2023.04.22 10:52 #14530 pivomoe #:MetaTrader 5 可在 Windows 7、8 上运行吗? 可以,但最好使用 64 位操作系统 1...144614471448144914501451145214531454145514561457145814591460...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
为什么要在仓位中寻找挂单?
谢谢,我想我明白了。我必须以当前价格建仓,但我下的是挂单,所以没有下单,因为我指定的是当前价格。
我用
但我必须
我不明白为什么 PositionOpen 中的 ENUM_ORDER_TYPE 不是ENUM_POSITION_TYPE?
因为您不能开仓。
您需要向经纪商服务器发送交易指令以执行交易。
只有当交易被执行时,头寸才被打开。
订单发送成功(10008) 并不保证交易已执行,因此仓位已打开(10009)。
交易服务器返回代码
如果发送交易指令(订单)以执行交易操作 TRADE_ACTION_DEAL(即以当前市场价格执行交易),除 10009 之外的任何返回代码(m_result.retcode)都表明交易尚未执行。
为以防万一,也请检查 m_result.deal 票据。
如果发送交易指令(订单)以进行交易操作 TRADE_ACTION_DEAL,即以当前市价进行交易,则除 10009 以外的任何返回代码(m_result.retcode)都将表示交易没有进行。
唉,并非如此。我在这里已经说明了我是如何得到代码 10012 的,即零订单票据,但订单还是执行了。MQs 对此保持沉默。
我为此写了一根拐杖,但只有再次收到 10012 后才有可能检查它)。
唉,不尽然。我已经在这里说明了我是如何收到代码 10012,即零订单票据的,但订单还是执行了。MQ 对此保持沉默。
我为它写了一根拐杖,但只有再次收到 10012 后才有可能检查它)。
军事业务。订购,收到理解的答复。收到执行的答复,收到他们按订单执行的确认)))))。一切都是人类))))))
军务。下令,收到理解的答复。收到执行的答复,收到他们按命令执行的确认)))))一切都是人类)))))))))))))))))))))))))))))
而下一个命令只能在明天下达。谁需要这样的交易?
先生们,部长们!)
如何对已下达或已执行的订单 或仓位进行检查?
如果收到代码 10008,我如何进一步跟踪订单或头寸列表中的订单?
为了避免出现代码已收到,但仓位或订单不存在的情况。
如果收到代码 10008,我如何进一步追踪订单或头寸列表中是否有该订单?
排除代码出现但仓位或订单不存在的选项
尝试使用OnTradeTransaction() 而不是OnTrade()。
MetaTrader 5 可在 Windows 7、8 上运行吗?
MetaTrader 5 可在 Windows 7、8 上运行吗?
可以,但最好使用 64 位操作系统