mt5 ObjectDelete中是否有一个错误? - 页 2

 

这可能是语义问题,而不是一个错误。

ObjectDelete的目的是 "删除具有指定名称的对象"。

在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?

换个角度看,ObjectDelete 是否删除了 一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?

你是通过结果还是采取的行动来衡量成功?

如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。

 
Farzin Sadeghi:
是的,我正在写。我在等待你的确认。谢谢。

刚刚尝试在服务台报告,它不接受我的信息,说 "保存数据错误"。

也从不同的地点、电脑和浏览器(使用我的VPS)尝试了一下,也发生了同样的情况。

你能在你那边报告吗?

 
honest_knave:

这可能是语义问题,而不是一个错误。

ObjectDelete的目的是 "删除具有指定名称的对象"。

在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?

换个角度看,ObjectDelete是否删除了一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?

你是通过结果还是采取的行动来衡量成功?

如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。

如果是这样的话,那么MQL4和MQL5之间的功能 差异就没有在文档中报告或解释!
 
Fernando Carreiro:
如果是这样的话,那么MQL4和MQL5之间的功能 差异就没有在文档中报告或解释!

我同意。我只是好奇哪一个 "他们 "会说是正确的 :-)

我个人认为,最好是返回true。否则,你需要添加额外的代码来检查对象是否存在,否则就要忍受4202的错误。

 
honest_knave:

我同意。我只是好奇哪一个 "他们 "会说是正确的 :-)

我个人认为,最好是返回true。否则,你需要添加额外的代码来检查对象是否存在,否则就要忍受4202错误。

在我看来,在这两种情况下,不管哪个版本是 "正确 "的,都需要在删除前检查 对象是否存在。

编辑:然而,我希望他们能 "修复 "它,使它能以与MQL4相同的方式工作。否则就会出现另一种功能 上的差异,在这种情况下,我们需要在两个版本的代码中放置条件性编译。

 
Fernando Carreiro:
在我看来,在这两种情况下,不管哪个版本是 "正确 "的,都需要在删除前检查对象是否存在。

有趣的是!如果你想让它消失,为什么还要检查 它是否存在?

检查一个不存在的对象是否存在所花的时间与在MT4上试图删除一个不存在的对象所花的时间相当(在MT5上粗略检查一下就会发现它的速度要慢得多),所以我看不出运行这个检查有什么实际的性能好处。但它会给你的代码增加更多行数。

 
Fernando Carreiro:

编辑:然而,我希望他们能 "修复 "它,使它能以与MQL4相同的方式工作。否则就会出现另一种功能 上的差异,我们将需要在两个版本的代码中放置条件性编译。

也许这都是他们计划的一部分,通过挫折迫使我们使用MT5!
 
honest_knave:

有趣的是!如果你想让它消失,为什么还要检查它是否存在?

检查一个不存在的对象是否存在所花的时间与在MT4上试图删除一个不存在的对象所花的时间相当(在MT5上粗略检查一下就会发现它的速度要慢得多),所以我看不出运行这个检查有什么实际的性能好处。但它会给你的代码增加更多行数。

当你想检测用户是否不小心删除并需要重新创建的时候。我的意思是这是一般的 "内务管理",而不是为了单一的只有一次的删除功能

但是,是的,我同意,对于一个 "OnDeinit() "功能,没有必要先测试它。

 
Fernando Carreiro:

当你想检测用户是否不小心删除并需要重新创建的时候。我的意思是这是一般的 "内务管理",而不是为了单一的只删除一次的功能

但是,是的,我同意,对于 "OnDeinit() "功能,没有必要先测试它。

啊,我明白了。

作为一个附带说明。

#property strict

void OnStart()
  {
   string name = "MysteryObject";
   ulong begin;

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) int result = ObjectFind(0,name);
   printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name);
   printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin);
  }

在MT4上运行,里面没有什么东西。

在MT5上运行,它的速度要慢50倍以上。

有没有人知道为什么?

 
honest_knave: 啊,我明白了。

作为一个附带说明。

在MT4上运行,里面的内容不多。

在MT5上运行,它的速度要慢50倍以上。

有没有人知道为什么?

你用的是哪个版本?因为在最新的版本中,"ObjectDelete() "函数 似乎有一个可能的错误,可能 "ObjectFind() "也有问题。