mt5 ObjectDelete中是否有一个错误? - 页 3 1234 新评论 honest_knave 2016.12.11 13:29 #21 Fernando Carreiro: 你用的是哪个版本?因为在最新的版本中,"ObjectDelete() "函数 似乎有一个可能的错误,可能在 "ObjectFind() "方面也有问题!MT5: Build 1495 (2016年12月9日) Fernando Carreiro 2016.12.11 13:33 #22 honest_knave:MT5:Build 1495(2016年12月9日)。我在Build 1491上运行你的代码,得到了类似的结果。2016.12.11 12:31:05.739 test (EURUSD.m,H1) ObjectFind took 20126 μs2016.12.11 12:31:05.739 test (EURUSD.m,H1) ObjectDelete took 247 μs honest_knave 2016.12.11 13:44 #23 Fernando Carreiro:我在Build 1491上运行了你的代码,得到了类似的结果。 一直很奇怪。也许有一个很好的解释...? Farzin Sadeghi Bonjar 2016.12.11 15:06 #24 honest_knave:这可能是语义问题,而不是一个错误。ObjectDelete的目的是 "删除具有指定名称的对象"。在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?换个角度看,ObjectDelete是否删除了一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?你是通过结果还是采取的行动来衡量成功?如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。也许你说的是真的,但由于我们正在从MQL4迁移到MQL5,我们期望看到相同的结果,或者至少是一个明确写在引用的返回值中的结果。通过这个第一个问题,我测试了ObjectMove函数,我也得到了TRUE的结果!这超出了你的解释,因为对象在最后是不可用的,所以true是正确的。在一个不可用的对象上使用ObjectMove,它应该返回false!moveResult=ObjectMove(ChartID(), "not available trend line",1,time[4950],low[4980])。Print(__LINE__,"-moveResult=",moveResult)。2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true Rashid Umarov 2016.12.12 09:52 #25 Farzin Sadeghi:嗨,我正在用MQL5编写一个指标,但无论我把什么写成字符串名称,ObejectDelete都会返回真!即使在一个没有对象的空图表上也是如此阅读对象函数 描述这是一组函数,用于处理与任何指定图表有关的图形对象。 定义图形对象属性的函数,以及用于创建和沿图表移动对象的ObjectCreate() 和ObjectMove() 操作,实际上是 用于向图表发送命令。如果这些函数被成功执行,该命令就会被纳入图表事件的公共队列中。在 处理图表事件队列时,图形对象的属性的视觉变化被实现。 这意味着 "删除此对象 "的命令被成功接受。你可以通过GetLastError()控制你的命令的结果。试试吧--哪段代码被退回了? Farzin Sadeghi Bonjar 2016.12.12 10:09 #26 Rashid Umarov:阅读对象函数 描述 这意味着 "删除此对象 "的命令被成功接受。你可以通过GetLastError()来控制你的命令的结果。试试吧--返回的代码是什么?我把代码改成了这样。int ObjCount = ObjectsTotal(ChartID(),/*0=main subwindow*/0,/*all objectTypes*/-1)。ResetLastError()。bool deleteResult=ObjectDelete(ChartID(), "非现有对象")。Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError() )。这里是结果。 2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0ERR_SUCCESS0该操作成功完成所以它没有返回错误,例如它不能访问该对象。但在MT4中,它确实返回错误。 is there a bug Error setting chart scale question about getting the Rashid Umarov 2016.12.12 10:29 #27 Farzin Sadeghi:错了!错了!错了!错了!错了!错了!错了!错了!错了!错了0该操作成功完成所以它不会返回错误,例如它不能访问该对象。但在MT4中,它确实返回错误。好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。在删除之前自己检查 对象是否存在在任何情况下尝试删除它,不要担心对象不存在。 Farzin Sadeghi Bonjar 2016.12.12 10:34 #28 Rashid Umarov:好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。在删除之前自己检查对象是否存在在任何情况下都尝试删除它,如果对象不存在,不要担心。 这样一来,在MQL5中检查 ObjectDelete或ObjectMove的结果就没有用了!把它固定在MQL4中的方式不是更好吗? Alain Verleyen 2016.12.12 10:40 #29 Rashid Umarov:好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。在删除之前自己检查对象是否存在在任何情况下都要尝试删除它,不要担心对象不存在。在这种情况下怎么会返回false? ObjectDelete()文档说。返回值 如果删除成功,返回真,否则返回假。文档应该更清楚,它没有说 "如果命令被接受就返回true"。如果我们想确定一个对象是否被删除,我们将不得不检查它在 删除命令后 是否存在,这是不可能的。 Documentation on MQL5: Object Functions / ObjectDelete www.mql5.com Object Functions / ObjectDelete - Reference on algorithmic/automated trading language for MetaTrader 5 Rashid Umarov 2016.12.12 10:42 #30 Alain Verleyen:在这种情况下,它怎么会返回false? ObjectDelete()文档说。文档应该更清楚,它没有说 "如果命令被接受就为真"。我们将以这种方式进行修复返回值 如果命令 被放置在图表事件的公共队列中 ,则返回真 ,否则返回假。 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你用的是哪个版本?因为在最新的版本中,"ObjectDelete() "函数 似乎有一个可能的错误,可能在 "ObjectFind() "方面也有问题!
MT5: Build 1495 (2016年12月9日)
MT5:Build 1495(2016年12月9日)。
我在Build 1491上运行你的代码,得到了类似的结果。
我在Build 1491上运行了你的代码,得到了类似的结果。
这可能是语义问题,而不是一个错误。
ObjectDelete的目的是 "删除具有指定名称的对象"。
在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?
换个角度看,ObjectDelete是否删除了一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?
你是通过结果还是采取的行动来衡量成功?
如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。
也许你说的是真的,但由于我们正在从MQL4迁移到MQL5,我们期望看到相同的结果,或者至少是一个明确写在引用的返回值中的结果。
通过这个第一个问题,我测试了ObjectMove函数,我也得到了TRUE的结果!这超出了你的解释,因为对象在最后是不可用的,所以true是正确的。
在一个不可用的对象上使用ObjectMove,它应该返回false!
moveResult=ObjectMove(ChartID(), "not available trend line",1,time[4950],low[4980])。
Print(__LINE__,"-moveResult=",moveResult)。
2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true
嗨,我正在用MQL5编写一个指标,但无论我把什么写成字符串名称,ObejectDelete都会返回真!即使在一个没有对象的空图表上也是如此
阅读对象函数 描述
这是一组函数,用于处理与任何指定图表有关的图形对象。
定义图形对象属性的函数,以及用于创建和沿图表移动对象的ObjectCreate() 和ObjectMove() 操作,实际上是 用于向图表发送命令。如果这些函数被成功执行,该命令就会被纳入图表事件的公共队列中。在 处理图表事件队列时,图形对象的属性的视觉变化被实现。
阅读对象函数 描述
这意味着 "删除此对象 "的命令被成功接受。你可以通过GetLastError()来控制你的命令的结果。试试吧--返回的代码是什么?我把代码改成了这样。
int ObjCount = ObjectsTotal(ChartID(),/*0=main subwindow*/0,/*all objectTypes*/-1)。
ResetLastError()。
bool deleteResult=ObjectDelete(ChartID(), "非现有对象")。
Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError() )。
这里是结果。
2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0
ERR_SUCCESS
0
该操作成功完成
所以它没有返回错误,例如它不能访问该对象。但在MT4中,它确实返回错误。
错了!错了!错了!错了!错了!错了!错了!错了!错了!错了
0
该操作成功完成
所以它不会返回错误,例如它不能访问该对象。但在MT4中,它确实返回错误。
好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。
好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。
好的。我发现在MQL5中,在这种情况下我们不会引发任何错误,因为这些操作是异步的。 所以你有两个选择。
在这种情况下怎么会返回false?
ObjectDelete()文档说。
返回值
如果删除成功,返回真,否则返回假。
文档应该更清楚,它没有说 "如果命令被接受就返回true"。
如果我们想确定一个对象是否被删除,我们将不得不检查它在 删除命令后 是否存在,这是不可能的。
在这种情况下,它怎么会返回false?
ObjectDelete()文档说。
文档应该更清楚,它没有说 "如果命令被接受就为真"。
我们将以这种方式进行修复
返回值
如果命令 被放置在图表事件的公共队列中 ,则返回真 ,否则返回假。