文章 "利用 MQL5 的交互式 GUI 改进您的交易图表(第 II 部分):可移动 GUI(II)"

 

新文章 利用 MQL5 的交互式 GUI 改进您的交易图表(第 II 部分):可移动 GUI(II)已发布:

依靠我们的以 MQL5 创建可移动 GUI 的深度指南,在您的交易策略和实用程序中解锁动态数据表达的潜力。深入研究面向对象编程的基本原理,并探索如何在同一图表上轻松高效地设计和实现单个或多个可移动 GUI。

我们开启旅程,从头开始创建类似的仪表板,但这次用的是 .mqh 文件。如有必要,我们将借用之前的代码片段。为了有效地组织我们的代码文件,我们将创建一个新文件夹,恰如其分地命名为 “Movable Dashboard MQL5”。

接下来,我们将生成两个新文件:“Movable_Dashboard_MQL5.mq5” 文件,它将用作我们的主要 .mq5 文件,以及 “GUI_Movable.mqh” 文件,它持有令仪表板可移动的代码。正确命名这些文件对于轻松管理多个文件至关重要。

通过这些步骤,我们用更高效的代码复现了第 1 部分中完成的工作。注意,第 1 部分和第 2 部分之间主要 .mq5 文件中使用的代码体量存在明显差异。最好的部分是,从这里它只会变得更好。


结果:

图例 2. 简单可移动仪表板

作者:Kailash Bai Mina

 

您好!不知为何我错过了您的第二次发帖,我昨天才看到、

不知怎么的,我错过了你的第二篇帖子;我昨天才看到它。 干得好。 我在你的基础上进行了扩展,使仪表板功能更强。 我添加了我的 CreatePael 函数,并将附加参数复制到你的 Creat DashBoard 中,以允许设置背景颜色、boder 颜色和样式。 附上屏幕截图、mq5 和 mqh 文件。

用户可以直接使用测试类,但更重要的是,您的 Moveable DashBoard 类可以继承文本类,然后每个实例都可以使用所有文本功能。当在仪表板上放置特定函数时,它将与仪表板的移动相关联。 我在这里提供了一个 GUI 头文件,但我还没有将它用作示例。 您也许应该尝试找到最新版本,或者在 MQL5 中已经存在一个最新版本。


干杯,我期待着您的下一篇文章。


科达角

 
你好、

感谢您的文章!

我想通过左键点击图表 来动态创建多个 "仪表盘"。每次点击都会创建一个新的仪表盘。您能提示我如何修改代码才能实现这一目标吗?

谢谢

 
komlos 左键点击图表 来动态创建多个 "仪表盘"。每次点击都会创建一个新的仪表盘。您能提示我如何修改代码才能实现这一目标吗?

谢谢

您好、

您喜欢我的文章,我感到非常高兴!感谢您的反馈。

我认为您不需要修改我的代码就能实现您的目标,因为您的目标似乎与我的代码最初的设计目标截然不同。不过,您当然可以利用我的代码来使动态创建的仪表盘可移动。

要检测图表上的鼠标点击,您可以使用 ChartEvent,特别是 CHARTEVENT_CLICK。该事件将提供鼠标点击的坐标,让您可以在该位置创建一个新的仪表盘。然后,您就可以应用我的代码来使新创建的仪表盘可移动了。

如果您想了解有关 ChartEvent 的更多信息,我建议您参考本系列的第一部分,特别是题为"图表事件解码 " 的章节:可移动 GUI 的基石"一节。

此外,我强烈建议使用类,因为如果使用得当,它们会简化您的任务。如果您不熟悉类的概念,可以参考我的文章"了解类的概念",了解基本知识。

希望对您有所帮助!

Improve Your Trading Charts With Interactive GUI's in MQL5 (Part I): Movable GUI (I)
Improve Your Trading Charts With Interactive GUI's in MQL5 (Part I): Movable GUI (I)
  • www.mql5.com
Unleash the power of dynamic data representation in your trading strategies or utilities with our comprehensive guide on creating movable GUI in MQL5. Dive into the core concept of chart events and learn how to design and implement simple and multiple movable GUI on the same chart. This article also explores the process of adding elements to your GUI, enhancing their functionality and aesthetic appeal.
 
komlos 左键点击图表 来动态创建多个 "仪表盘"。每次点击都会创建一个新的仪表盘。您能提示我如何修改代码才能实现这一目标吗?

谢谢

你好,CapeCoddah、

您的反馈让我非常高兴。我写文章的目的正是为了启发像你这样的读者以自己独特的方式吸收概念并加以扩展。你做到了这一点,再次证明了我文章的实用性。

至于你提出的创建一个包含标签、按钮、文本框等的文本类的建议,有趣的是,我即将发表的文章实际上也在朝着类似的方向努力。我正在构建一个功能性交易仪表盘,它可以执行买入和卖出命令、要求批量大小,是的,它还将是可移动的,所有元素都包含在其中,这与您的建议完全一致。

不过,我认为,鉴于每个用户的需求各不相同,创建一个文本类可能不会带来普遍的好处。相反,我鼓励读者根据自己的具体要求创建类。

在查看您的文件时,我发现您的图形用户界面与我为第 3 部分准备的内容非常吻合,这非常巧合。我非常期待即将出版的 第三部分

下面是下一篇文章的预览:


是的,这是一个可移动的仪表盘,包含所有元素!

敬请期待更多精彩内容,再次感谢您的积极参与和反馈。

编码快乐

 
Kailash Bai Mina #:

你好,科达角

您的反馈让我非常高兴。我写文章的目的正是为了启发像您这样的读者,让他们以自己独特的方式接受这些概念并加以扩展。你能做到这一点,再次证明了我文章的实用性。

至于你提出的创建一个包含标签、按钮、文本框等的文本类的建议,有趣的是,我即将发表的文章实际上也在朝着类似的方向努力。我正在构建一个功能性交易仪表盘,它可以执行买入和卖出命令、要求批量大小,是的,它还将是可移动的,所有元素都包含在其中,与您的建议完全一致。

不过,我认为,鉴于每个用户的需求各不相同,创建一个文本类可能不会带来普遍的好处。相反,我鼓励读者根据自己的具体要求创建类。

在查看您的文件时,我发现您的图形用户界面与我为第 3 部分准备的内容非常吻合,这非常巧合。我非常期待它的即将出版。

下面是下一篇文章的预览:


是的,这是一个可移动的仪表盘,包含所有元素!

敬请期待更多精彩内容,再次感谢您的积极参与和反馈。

编码快乐

Kailash Bai Mina#:

你好,科达角、

您的反馈让我非常高兴。我写文章的目的正是为了启发像您这样的读者,让他们以自己独特的方式接受这些概念并加以扩展。你做到了这一点,再次证明了我的文章的实用性。

至于你提出的创建一个包含标签、按钮、文本框等的文本类的建议,有趣的是,我即将发表的文章实际上也在朝着类似的方向努力。我正在构建一个功能性交易仪表盘,它可以执行买入和卖出命令、要求批量大小,是的,它还将是可移动的,所有元素都包含在其中,这与您的建议完全一致。

不过,我认为,鉴于每个用户的需求各不相同,创建一个文本类可能不会带来普遍的好处。相反,我鼓励读者根据自己的具体要求创建类。

在查看您的文件时,我发现您的图形用户界面与我为第 3 部分准备的内容非常吻合,这非常巧合。我非常期待它的即将出版。

下面是下一篇文章的预览:


是的,这是一个可移动的仪表盘,包含所有元素!

敬请期待更多精彩内容,再次感谢您的积极参与和反馈。

编码快乐

 

你好,凯拉什、


你的预览让我很感兴趣。 这正是我的最终目标。 文本类的概念是一个用于创建交易仪表板面板的函数工具箱。您的预览展示了我的文本类的几个成员:标签、输入框、按钮、面板,也许还有文本面板,现在我使用的是按钮。我希望将制作标签的细节封装在一个可调用的文本类函数 CreateLabel(....) 中,这样用户就可以多次调用标签函数,在可移动面板的不同位置放置不同的文本。

按照我的设想,OnInit 函数将用于调用每个面板的开发,OnTick 函数将为各个面板提供更新功能,可能还会有一个功能面板,可以按需打开和关闭面板。

 
CapeCoddah OnInit 函数将用于调用每个面板的开发,OnTick 函数将为各个面板提供更新功能,可能还会有一个功能面板,可以按需打开和关闭面板。

我正在考虑创建这样一个文本类,可能命名为 "GUI",用于容纳所有对象,包括矩形标签、标签、编辑和按钮。


您提出的为每项任务(如指标和交易管理)创建多个独立子面板的想法,正是我对未来文章的预期成果。虽然实现这一目标并非没有挑战,例如处理 z 排序、不同屏幕尺寸对面板尺寸的影响等等,但我相信我们可以一起克服这些障碍。


面板管理器的概念听起来也很有前景。我们应该很快就能做到这一点。

 
Kailash Bai Mina #:

你好、

您喜欢我的文章,我感到非常高兴!感谢您的反馈。

我认为您不需要修改我的代码就能实现您的目标,因为您的目标似乎与我的代码最初的设计目标截然不同。不过,您当然可以利用我的代码使您动态创建的仪表板可移动。

要检测图表上的鼠标点击,您可以使用 ChartEvent,特别是 CHARTEVENT_CLICK。该事件将提供鼠标点击的坐标,让您可以在该位置创建一个新的仪表盘。然后,您就可以应用我的代码来使新创建的仪表盘可移动。

如果您想了解有关 ChartEvent 的更多信息,我建议您参考本系列的第一部分,特别是题为"图表事件解码 " 的章节:可移动 GUI 的基石"一节。

此外,我强烈建议使用类,因为如果使用得当,它们会简化您的任务。如果您不熟悉类的概念,可以参考我的文章"理解类的概念",了解基本知识。

希望对您有所帮助!

我的问题是,我不知道如何在每个动态创建的仪表盘实例上调用 OnChartEvent 中的 OnEvent 函数(因为每个仪表盘实例都必须独立处理事件,正如您在文章中提到的那样)。按照您目前的代码工作方式,OnEvent 会通过事先在 OnChartEvent 中单独定义的方式在每个之前创建的实例上调用。但是在动态创建仪表板实例时,您不能事先在 OnChartEvent 中定义它们,因为它们尚未创建...
谢谢
 
komlos #:
我的问题是不知道如何在每个动态创建的仪表盘实例上调用 OnChartEvent 中的 OnEvent 函数(因为每个仪表盘实例都必须独立处理事件,正如您在文章中提到的那样)。按照您当前的代码工作方式,OnEvent 会通过事先在 OnChartEvent 中单独定义的方式在每个之前创建的实例上调用。但在动态创建仪表板实例时,您不能事先在 OnChartEvent 中定义它们,因为它们尚未创建...
谢谢

哦,我明白您的困难所在了。我来帮您。

我写了一个名为 MultiDash 的智能交易系统 (EA),与您想要的一模一样,只需稍微修改一下代码。

我把它附在下面供您参考。如果代码中有任何不明白的地方,请随时咨询。我很乐意提供帮助。


附加的文件:
 
Kailash Bai Mina #:

哦,我知道你有什么困难了。我来帮你。

我已经编写了一个名为 MultiDash 的智能交易系统 (EA),只要稍微修改一下代码,就能完全满足您的要求。

我把它附在下面供您参考。如果代码中有任何不明白的地方,请随时咨询。我很乐意提供帮助。


哇,谢谢你,你真是太好了!我一定会看看的!