程序库: Easy Canvas - 页 16

 

你好,尼古拉。

使用该库 时,我遇到了一个问题:如果在一个终端中使用多个带有 iCanvas 的程序,那么在重新加载终端后,图像会开始自发地从一个变为另一个。起初我在代码中寻找原因,但一无所获。后来,我的一位客户无意中发现 iCanvas 对象名称在不同的图表上重合。

我查看了 iCanvas 对象名称的生成方式,发现如下:

Name+=IntegerToString(GetTickCount());

如果我们谈论的是智能交易系统,这种加载终端的方式会导致不同图表上的对象名称相同,因为加载时终端中的所有智能交易系统都会接收相同的 GetTickCount() 值。而指标则没有这个问题。

为了解决这个问题,我提出了生成唯一对象名称的方法:

   Name += IntegerToString(ChartID()) + IntegerToString(GetTickCount());

这里的唯一性是由以下因素保证的:

  1. 即使所有指标都在同一图表上启动,它们也会获得不同的 GetTickCount() 值。因此,此方法适用于它们。
  2. 智能交易系统会获得相同的GetTickCount() 值,但由于智能交易系统只能在一个图表上运行,因此其对象会因图表标识符而获得唯一性。
 
Ihor Herasko 使用该库 时,我遇到了一个问题:如果在一个终端中使用多个带有 iCanvas 的程序,那么在重新加载终端后,图像会开始自发地从一个变为另一个。起初我在代码中寻找原因,但一无所获。后来,我的一位客户偶然发现 iCanvas 对象的名称在不同的图表上是一致的。

我查看了 iCanvas 对象名称的生成方式,发现如下:

如果我们谈论的是智能交易系统,那么这种加载终端的方式会导致不同图表上的对象名称相同,因为加载时终端中的所有智能交易系统都会接收相同的 GetTickCount() 值。指标则没有这个问题。

为了解决这个问题,我建议使用这种生成唯一对象名称的方法:

这里的唯一性是由以下因素保证的:

  1. 即使指标都在同一图表上运行,它们也会获得不同的 GetTickCount() 值。因此,此方法适用于它们。
  2. 智能交易系统会获得相同的GetTickCount() 值,但由于智能交易系统只能在一个图表上运行,因此其对象会因图表 ID 而获得唯一性。

我同意。
谢谢,伊戈尔!
上传了更正版本。

奇怪,我还以为名称就是这么来的。:))

 
最新版本 1.49
附加的文件:
iCanvas.mqh  58 kb
 
更新版本至 1.49
缩短了资源名称,因为它太长了。
 

 Nikolai Semko #:
 обновил версию до 1.49
 укоротил имя ресурса, т.к. нарвался на слишком длинное имя

下午好!
在 iCanvas.mqh 文件中(MT5 版本链接上)有 "#属性版本 "1.09"...
在哪里可以下载最新的实际版本?
还有一个关于 MT4 版本的问题 - 在下载的存档中,版本 "#属性版本 "1.47"
- 它是MT4 的最新版本吗?如果不是,在哪里可以下载最新的实际版本?

谢谢。

 
Maksims Ignatovs #:

下午好!
在 iCanvas.mqh 文件中(MT5 版本链接上)有 "#属性版本 "1.09"...
在哪里可以下载最新的实际版本?
还有一个关于 MT4 版本的问题 - 在下载的存档中,版本 "#属性版本 "1.47"
- 它是MT4 的最新版本吗?如果不是,在哪里可以下载最新的实际版本?

谢谢。

您好!
您下载的一定是压缩文件。千万不要下载。这是 MQ 的一个错误。当我更新版本时,压缩文件不会被覆盖,而且我也无法访问它。
单击 iCanvas.mqh 文件本身或从查看器 中复制它。



 
Nikolai Semko #:

您好!
您下载的一定是压缩文件。千万不要下载。这是 MQ 的一个错误。当我更新版本时,压缩文件不会被覆盖,而且我也无法访问它。
单击 iCanvas.mqh 文件本身或从查看器 中复制它。



谢谢!
 


感谢您的分享。
我一直在考虑制作这样一个工具,现在我可以用你的代码作为基础了。

干得好
 
Guilherme Mendonca #:


感谢您的分享。我一直在考虑制作这样一个工具,现在我可以用你的代码作为基础了。干得好


谢谢
 
最新版本 1.53
附加的文件:
iCanvas.mqh  71 kb