用 MQL 编写的用户界面图库 - 页 76

 
Edgar Akhmadeev #:

我们也还不是。我们必须从某个地方开始。散开,跳跃。

我正在自行决定制作第一个版本,没有退路,但我一定会听取尊敬的论坛成员的明智意见。
 
就像 STALKER2 一样,我们会一起完成它。
 
Edgar Akhmadeev #:
就像 STALKER2 一样,我们一起完成它。
好的)。
 
用户界面仍然是 100% 纯 MQL。
全部基于矢量,完全可缩放并可调整以适应任何显示器。
所有可视化显示都在一个核心类中同步运行,该类根据对象的订阅设置和事件优先级,处理并向对象分发所有 MQL 事件。
它还提供了一个应用程序接口(API),用于访问所有数据,并通过用 MQL(特殊模板)和 C# 编写的指标控制交易。
>400 个类,<>200.
没有原始库或类
实际上整个代码 99.99% 是
MQL,只有管道交互字符串比较是用 C#/DLL 完成 的。

截图显示的是差价合约交易,但使用的是标的期货的映射交易量。这就是为什么有一个真实的订单簿和交易量概况。

 
另外,这也是其中的一部分,一个带有对象和类浏览器等功能的增强型开发环境:

 

VE 目前的开发阶段:

  • 核心部分的近 400 多个窗口属性、元素和参数已集成到编辑器窗口中,并以标签形式显示。所有这些都将成为在 VE 中创建的图形用户界面元素的可控设置。
  • 用户工作中所需的各种控制元素的 52 个模板已经集成。
  • 在设计和造型方面已经做了大量工作。我将继续权衡各种解决方案,以实现 VE 图形用户界面的实用性和可用性。
  • 一旦完成模板和属性的整合,以及它们的分类和分配,就将开始功能方面的工作。
  • 目前,图形用户界面是用 KIB 标记语言编写的,非常繁琐。目前还没有过渡到可视化编辑。不过,这将在不久的将来实现。
  • 图形用户界面存在缺陷。这些都是暂时的。
  • 为了节省空间,任务栏的高度已经降低。
  • 为了节省空间,编辑器窗口的边框已移出视野范围。


 
听起来很不错,彼得,我想一旦你使用 VE 进行自我构建,它肯定会给你一些宝贵的见解,让你了解你的用户界面设计是如何工作的。
期待下一次开发更新。
 
Douglas Prager #:
听起来不错,彼得。我认为,当你使用 VE 进行自我构建时,它将为你的用户界面设计工作提供宝贵的见解。期待下一次开发更新。
谢谢你,道格拉斯。你说得没错。我们需要克服一个最起码的技术 "障碍"。

我也将饶有兴趣地关注你们的基本开发工作。
 
Doerk Hilger #:
用户界面仍然是 100% 的纯 MQL。
全部基于矢量,完全可缩放并可根据任何显示器进行调整。 所有可视化显示都在一个核心类中同步运行,该类根据对象的订阅设置和事件优先级处理并向对象分发所有 MQL 事件。


我希望我没有盗用这个非常有趣的主题,如果我盗用了,请原谅我 Peter,这不会是一个讨论,只是希望得到一个简短的答案,以满足理论上的兴趣--你的意思是你有一种静态类,它知道(跟踪所有对象指针)系统中实例化的所有类对象,每个对象都可以访问该控制静态类订阅自己所需的事件,该静态控制单例类只是将事件传递给所有对象?如果是这样,你认为这在 OOP 方面是正确的,还是可以接受的事件驱动编程?因为你写过这方面的文章,所以我猜你会希望接受相关的问题,如果是这样的话,请尽量简短,不要劫持这个主题,虽然它是相关的。

 
Amir Yacoby #:

我希望我没有盗用这个非常有趣的主题,如果我盗用了,请原谅我 Peter,这将不会是一个讨论,只是希望为理论兴趣提供一个简短的答案--你的意思是你有一种静态类,它知道(跟踪所有对象指针)系统中实例化的所有类对象,每个对象都可以访问该控制静态类订阅自己所需的事件,该静态控制单例类只是将事件传递给所有对象?如果是这样,你认为这在 OOP 方面是正确的,还是可以接受的事件驱动编程?因为你写过这方面的文章,所以我猜你会希望接受相关的问题,如果是这样的话,请尽量简短,不要劫持这个主题,虽然它是相关的。


简要说明:

核心接收所有 MetaTrader 事件,任何对象都可以订阅核心。因此,必须重新设计/修改 CObject 类,使任何对象都有一个名为 "public: virtual void OnEACycle(CCycleParams * cpm) "的函数。这样一个循环就可以是一个图表事件、init、deinit 等。每个对象还可以有一个 "public: virtual void OnEATick() "函数。这样做的副作用是,你可以获得额外的功能,因为你也可以订阅任何周期的结束,不管是哪个周期。

此外,每个 CObject 对象都可以有子对象和订阅者。这意味着,一个对象可以触发自己的事件,如点击......或类似事件。然后,只需执行 object.SubEvent(STH_CLICKED, params)。这样,对象本身并不关心谁需要这些信息,而只是将这些信息分发给订阅者,他们会收到 OnSubEvent(int msg, CSubEventParams * sep) 并可以做任何他们想做的事情。

总而言之,这种方式更接近于我们从 C# 中了解到的编码方式,在 C# 中也只是使用 .Invoke()来触发事件,而在 C# 中也只是使用 .SubEvent()来触发事件。

其实实现起来并不复杂,当然细节是最终的挑战,因为它是未来每个 EA 或指标的核心/基础,必须在各种情况下都能发挥作用。