文章 "利用MQL5创建您自己的图形面板"

 

新文章 利用MQL5创建您自己的图形面板已发布:

MQL5程序的可用性,是由其丰富的功能性和制作精细的图形用户界面所决定的。视觉感知有时比快速且稳定的运行更加重要。根据标准库类,您可以自行创建显示面板,以下即逐步操作指南。

 

作者:MetaQuotes Software Corp.

 

目前,该库是为图表上的一个面板定制的。

如果您尝试添加 2 个面板,则会错误地捕获事件--元素具有相同的 Id,且未检查父 Id。

为了测试这一点,我使用了演示版Controls.mq5,并复制了面板--所有事件都被复制到了两个面板上,尽管它们不应该被复制。

附加的文件:
 
在 "填充显示面板 "项目中,我们是否可以使用
ObjCAppDialog.Create(chart,name,subwin,x1,y1,x2,y2))
而不是
CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
 
Rorschach:
在 "填充显示面板 "项目中,是否可以使用类似"...... "的字样来代替

您好,也许您能告诉我该怎么做。

您的示例是 ekspert Controls。

当切换到不同的时间段时,专家会被卸载,我试着在 OnDeinit() 中移除 ExtDialog.Destroy(reason);。

您能告诉我该怎么做才能使对话窗口在切换到其他时段时继续工作吗?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
vdv2001:

您好,也许您能告诉我该怎么做。

您的示例是一个 Expert Advisor 控件。

当切换到另一个时段时,EA 会卸载,我试图在 OnDeinit() 中删除 ExtDialog.Destroy(reason);。

您能告诉我,当切换到其他时段时,我需要做什么才能使对话窗口继续工作吗?

非常感谢您的意见。错误已修复。在下一个版本中更新。
 

在我看来,手工创建类库更容易,可以知道在哪里使用、如何使用,或者在出错时进行修复。

不使用标准类编写面板的示例:VirtualTradePad PositionsStyle

 

有人会问,为什么使用MQL5 向导 构建类会产生无法编译的代码?


如文章所述,您必须手动添加这行代码,这对于面向非编码者的向导来说有点奇怪。

#include <Controls\Dialog.mqh>

另外 :

This article will demonstrate how easy it is to create your own display panels in a separate chart subwindow using the Standard Library classes.

我觉得这是个笑话,不是吗?

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

"这对于一个面向非编码员的向导来说有点奇怪"。

我不认为这个向导是为非编码者准备的。

它可能会让你(程序员新手)迈出必要的第一步,创建一些东西。

MQL5 框架具有很大的潜力,其中一些潜力可以通过向导创建来发现

但我认为,要获得像本示例这样更复杂的东西,您始终需要编程基础。

但我同意,如果您从一个基类派生出来,就有必要包含一些显而易见的东西...

 
ugo58:

"这对于一个面向非编码员的向导来说有点奇怪"。

我不认为这个向导是为非编码者准备的。

它可能会让你(程序员新手)迈出必要的第一步,创建一些东西。

MQL5 框架具有很大的潜力,向导创建功能可以发掘其中的一些潜力

但我认为,要获得像本示例这样更复杂的东西,您始终需要编程基础。

但我同意,如果您从一个基类派生出来,就有必要包含一些显而易见的东西...

您可能是对的,但我认为MQL5 向导 首先是为非编程人员设计的。无论如何,这个问题在这里就像一个 bug,因为您必须手动添加代码才能编译向导创建的代码。

MQL5 Wizard: Creating Expert Advisors without Programming
  • 2011.01.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Do you want to try out a trading strategy while wasting no time for programming? In MQL5 Wizard you can simply select the type of trading signals, add modules of trailing positions and money management - and your work is done! Create your own implementations of modules or order them via the Jobs service - and combine your new modules with existing ones.
 

我注意到,在用户图形用户界面(面板)库中复制的事件模型在我看来并不十分成功:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    ...
}

首先,并非所有事件都有一组与 int、long、double 和 string 相对应的变量。有些地方描述事件的变量可能更多,有些地方可能更少,有些地方则与提议的基本类型不一致。事实上,我们经常可以看到这样的转换:int -> bool、string -> int、double -> int 等。如果从过程式编程的角度来看,您几乎无计可施(因为您不会为每种假设情况创建 1 000 000 个重载函数),那么在 OOP 框架内,一切都可以做得更简单、更优雅。

但 OnEvent 的主要问题在于,该事件处理程序的目的是处理从图表中接收到的事件,而事件可以是任何东西,例如打开一个新位置或更改报价。总的来说,OnEvent(...)在某种程度上看起来并不像一个通用的事件处理程序。也许开发人员已经设法在现有 CWnd 的基础上处理他们自己的事件,但对我来说,使用 面板标准库 仍然存在问题。

Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • 2010.11.10
  • Samuel
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 

谢谢,我已经研究过了,非常有用!稍等一下:是否有计划创建某种构造函数,这样就可以像 VS 中那样在窗体构造函数中组装面板?)

对于宏,他们显然做得太过了...