我的EA做了一个重复输入 - 页 10 1...34567891011 新评论 Ubzen 2014.01.19 11:56 #91 angevoyageur: 我不确定我是否理解你的意思。我们在这个话题中讨论的这个问题不是由糟糕的编码造成的,而是由mql5中糟糕的设计造成的(这是我的观点,也可能只是一个错误?)你说的 "多个交易线程 "是什么意思?我回去重读了你认为不好的设计。在old-mt4中,这些类 是不存在的。检查Successful_Orders的正常方法是Ticket#==(-1) && GetLastError()。我从来没有见过这样的情况:你的订单返回一个有效的Ticket#并且GLE=0,但是在下一个tick,你的OrdersTotal()仍然返回0。现在请记住,我还没有看完整个mql5的文档。但是,如果它说PositionSelect_Information直到后来才会被更新。而有人在使用PositionSelect来评估他们的进入逻辑。那么这个人必须等到PositionSelect_Information被更新后再退出OrderSend逻辑。对于线程的事情...我说的是多线程与单线程发送订单的问题。就像同时打开的订单一样。它可能与这里有关,也可能无关。 Alain Verleyen 2014.01.19 12:32 #92 Ubzen:我回去重读了你认为不好的设计。在old-mt4内,这些类 不存在。在内部检查Successful_Orders的正常方法是Ticket#==(-1) && GetLastError()。我从来没有见过这样的情况:你的订单返回一个有效的Ticket#并且GLE=0,但是在下一个tick时,你的OrdersTotal()仍然返回0。现在请记住,我还没有看完整个mql5的文档。但是,如果它说PositionSelect_Information直到后来才会被更新。而有人在使用PositionSelect来评估他们的进入逻辑。那么这个人必须等到PositionSelect_Information被更新后再退出OrderSend逻辑。对于线程的事情...我说的是多线程与单线程发送订单的问题。就像同时打开的订单一样。它可能与此有关,也可能与此无关。关于PositionSelect的文件 并没有说什么 "以后才会更新"。 它只是说,即使PositionSelect是真的,关于Position的信息也可能是过时的,这与你的问题没有关系。我会 在开市 时花 时间 做一些 测试 ,以确保 不说 傻话,以后会有更完整的答案。 Ubzen 2014.01.19 12:34 #93 angevoyageur:关于PositionSelect的文档 并没有说什么 "以后才会更新"。 它只是说,即使PositionSelect是真的,关于Position的信息也可能是过时的,这与你的问题无关。我会 在开市 时花 时间 做一些 测试 ,以确保 不说 傻话,以后会有更完整的答案。K.....,另外,如果文件中没有说什么,那么我完全同意你的观点。我们最终要问服务台的问题是 "为什么当trade.PositionOpen()==true时不能更新Position_Information?"他们可能会给我们一个很好的答案 。 Snelle Moda 2014.01.19 13:50 #94 angevoyageur:不,我只是在想这个问题......如果所有相关的人就这个问题向ServiceDesk写一张票,可能会很有用。但是我非常怀疑MQ是否愿意改变这种设计。但我们可以试试。人们可以写信给ServiceDesk,并在这里报告票号。我的是 错误,MetaTrader 5 MQL,打开,开始。2013.12.23 19:08,#916435 我也已经通知服务台,#933192|2014.01.19 14:44 Dua Yong Rew 2014.01.19 14:26 #95 MQ实际上可以很容易地重新设计,使之具有超时功能?比如没有回应,那么我们就会得到一个错误,类似这样的东西? Alain Verleyen 2014.01.19 14:31 #96 doshur:MQ实际上可以很容易地重新设计,使之具有超时功能?比如没有回应,那么我们就会得到一个错误,类似这样的东西?他们恰恰做了相反的事情。当mql5创建的时候,对于PositionSelect这样的函数,有一个超时参数。但是他们后来删除了它,见这里的第9点https://www.mql5.com/en/forum/53/page5#comment_14479 Rogerio Figurelli 2014.01.19 14:49 #97 我同意设计不良的论点,但在我看来,MQL5的主要问题是将一个成功的基于外汇的代码适应于股票市场(这确实是个好东西)。例如,一些股票市场使用FIX协议作为标准,而对我来说,这种通信协议不容易适应任何代码或架构。无论如何,我相信MQ的人有一个时间挑战,他们必须在MQL4的基础上创建MQL5,而不是从头开始。我记得那年的锦标赛被暂停,以便他们有更多的时间。所以,也许这个话题可以为未来的 MQL6和真正的新架构提供一个很好的建议,主要是关于交易的弹性和不可知的解决方案,以在任何市场上工作。 Ubzen 2014.01.19 14:54 #98 doshur:MQ实际上可以很容易地重新设计,使之具有超时功能?比如没有回应,那么我们就会得到一个错误,类似这样的东西?传统上,超时并不意味着该订单不会成为一个头寸。你将不得不等待很长一段时间......检查它是否真的成为头寸......如果订单没有被执行,最终将暂停交易。我想MQ会同意figurelli 的观点,即这是一个程序员的错误。因为trade.PositionOpen所依据的函数 明确指出,你需要检查其他东西。******(添加个人议程......你可以在这一点上停止阅读) *******这就是我在mql_forum上帮助新的程序员时,不追问他们关于函数及其返回值的原因。我认为没有必要说总是做以下事情。if( OrderSend()<0 ){ Print( GetLastError() ); }这应该是一个自动交易商......你可能不在......而它所做的是Print()?在我看来,Error_Handling和Error_Reporting是两个完全不同的怪物。试图解释处理错误的正确方法可能需要几页纸,而且对于交易者来说,他们应该重试多少次,甚至是否应该终止交易都是非常个人化的。**** 现在我并不是说如果一个新手正在编写EA,而它在交易中出现了问题......他们不应该Print( GetLastError(); ) <- 这应该是很明显的。但如果我要告诉他们总是Get_Error,那么我也应该告诉他们总是Handle_Error。*** 议程结束。**** Dua Yong Rew 2014.01.19 16:18 #99 angevoyageur:他们做了完全相反的事情。当mql5被创建的时候,对于PositionSelect这样的函数有一个超时参数。但是他们后来删除了它,见这里的第9点https://www.mql5.com/en/forum/53/page5#comment_14479 是时候恢复它了吗? Alain Verleyen 2014.01.19 17:25 #100 doshur: 是时候恢复它了吗?我不这么认为。一个同步的交易请求必须在所有方面都是同步的。就这么简单。这里的请求是同步的,但你必须要管理异步的东西。而这一点没有任何记录。 1...34567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我回去重读了你认为不好的设计。
在old-mt4中,这些类 是不存在的。检查Successful_Orders的正常方法是Ticket#==(-1) && GetLastError()。我从来没有见过这样的情况:你的订单返回一个有效的Ticket#并且GLE=0,但是在下一个tick,你的OrdersTotal()仍然返回0。
现在请记住,我还没有看完整个mql5的文档。但是,如果它说PositionSelect_Information直到后来才会被更新。而有人在使用PositionSelect来评估他们的进入逻辑。那么这个人必须等到PositionSelect_Information被更新后再退出OrderSend逻辑。
对于线程的事情...我说的是多线程与单线程发送订单的问题。就像同时打开的订单一样。它可能与这里有关,也可能无关。
我回去重读了你认为不好的设计。
在old-mt4内,这些类 不存在。在内部检查Successful_Orders的正常方法是Ticket#==(-1) && GetLastError()。我从来没有见过这样的情况:你的订单返回一个有效的Ticket#并且GLE=0,但是在下一个tick时,你的OrdersTotal()仍然返回0。
现在请记住,我还没有看完整个mql5的文档。但是,如果它说PositionSelect_Information直到后来才会被更新。而有人在使用PositionSelect来评估他们的进入逻辑。那么这个人必须等到PositionSelect_Information被更新后再退出OrderSend逻辑。
对于线程的事情...我说的是多线程与单线程发送订单的问题。就像同时打开的订单一样。它可能与此有关,也可能与此无关。
关于PositionSelect的文件 并没有说什么 "以后才会更新"。 它只是说,即使PositionSelect是真的,关于Position的信息也可能是过时的,这与你的问题没有关系。
我会 在开市 时花 时间 做一些 测试 ,以确保 不说 傻话,以后会有更完整的答案。
关于PositionSelect的文档 并没有说什么 "以后才会更新"。 它只是说,即使PositionSelect是真的,关于Position的信息也可能是过时的,这与你的问题无关。
我会 在开市 时花 时间 做一些 测试 ,以确保 不说 傻话,以后会有更完整的答案。
K.....,另外,如果文件中没有说什么,那么我完全同意你的观点。
我们最终要问服务台的问题是 "为什么当trade.PositionOpen()==true时不能更新Position_Information?"
他们可能会给我们一个很好的答案 。
不,我只是在想这个问题......如果所有相关的人就这个问题向ServiceDesk写一张票,可能会很有用。但是我非常怀疑MQ是否愿意改变这种设计。但我们可以试试。
人们可以写信给ServiceDesk,并在这里报告票号。我的是
我也已经通知服务台,#933192|2014.01.19 14:44
MQ实际上可以很容易地重新设计,使之具有超时功能?
比如没有回应,那么我们就会得到一个错误,类似这样的东西?
MQ实际上可以很容易地重新设计,使之具有超时功能?
比如没有回应,那么我们就会得到一个错误,类似这样的东西?
他们恰恰做了相反的事情。当mql5创建的时候,对于PositionSelect这样的函数,有一个超时参数。
但是他们后来删除了它,见这里的第9点https://www.mql5.com/en/forum/53/page5#comment_14479
我同意设计不良的论点,但在我看来,MQL5的主要问题是将一个成功的基于外汇的代码适应于股票市场(这确实是个好东西)。
例如,一些股票市场使用FIX协议作为标准,而对我来说,这种通信协议不容易适应任何代码或架构。
无论如何,我相信MQ的人有一个时间挑战,他们必须在MQL4的基础上创建MQL5,而不是从头开始。我记得那年的锦标赛被暂停,以便他们有更多的时间。
所以,也许这个话题可以为未来的 MQL6和真正的新架构提供一个很好的建议,主要是关于交易的弹性和不可知的解决方案,以在任何市场上工作。
MQ实际上可以很容易地重新设计,使之具有超时功能?
比如没有回应,那么我们就会得到一个错误,类似这样的东西?
传统上,超时并不意味着该订单不会成为一个头寸。你将不得不等待很长一段时间......检查它是否真的成为头寸......如果订单没有被执行,最终将暂停交易。
我想MQ会同意figurelli 的观点,即这是一个程序员的错误。因为trade.PositionOpen所依据的函数 明确指出,你需要检查其他东西。
******(添加个人议程......你可以在这一点上停止阅读) *******
这就是我在mql_forum上帮助新的程序员时,不追问他们关于函数及其返回值的原因。我认为没有必要说总是做以下事情。
if( OrderSend()<0 ){ Print( GetLastError() ); }
这应该是一个自动交易商......你可能不在......而它所做的是Print()?
在我看来,Error_Handling和Error_Reporting是两个完全不同的怪物。试图解释处理错误的正确方法可能需要几页纸,而且对于交易者来说,他们应该重试多少次,甚至是否应该终止交易都是非常个人化的。
**** 现在我并不是说如果一个新手正在编写EA,而它在交易中出现了问题......他们不应该Print( GetLastError(); ) <- 这应该是很明显的。但如果我要告诉他们总是Get_Error,那么我也应该告诉他们总是Handle_Error。*** 议程结束。****
他们做了完全相反的事情。当mql5被创建的时候,对于PositionSelect这样的函数有一个超时参数。
但是他们后来删除了它,见这里的第9点https://www.mql5.com/en/forum/53/page5#comment_14479
是时候恢复它了吗?
我不这么认为。一个同步的交易请求必须在所有方面都是同步的。就这么简单。
这里的请求是同步的,但你必须要管理异步的东西。而这一点没有任何记录。