文章 "基于 .Net 框架和 C# 为 EA 交易和指标开发图形界面" - 页 3

 
Stanislav Korotky:

...设计 WPF 表单,在 MQL 中读取 XAML。

杰作

 
Stanislav Korotky:

是的,这是一篇好文章,但我不确定编辑们是否读过它;-)。"此外 "是拼在一起的,但文中其他地方都是分开的。这引起了我的注意,因为与其他文章相比,我读得比较仔细。

事实上,这一方面似乎不错。但另一方面--仅仅为了可视化表单编辑器而调用所有与 Studio 相关的东西有点麻烦。如果已经安装了 Studio,那就没问题了。

我会在 MQL 中与设计器一起完成所有工作(我有一些想法,但还没拿到手)。我认为还有一种中间方案--使用 Studio,但不使用 DLL--设计 WPF 表单,在 MQL 中读取 XAML。

这篇文章的作者举例说明了如何制作一个 "带按钮的面板",它既可以在线使用,也可以在测试器中使用,用 MQL 制作图形并不难,但在测试器中却无法使用....。我个人有时希望我的项目 在在线和测试器中都能以同样的方式运行,在 Vasily 文章的帮助下,您只需具备基本的编程知识,就能在 2-3 小时内制作出一个可用的示例。

 
Stanislav Korotky:

...

我会在 MQL 中与设计器一起完成所有工作(我有一些想法,但还没拿到手)。我认为还有一种中间方案--使用 Studio,但不使用 DLL--在 MQL 中设计 WPF 表单,读取 XAML。

我还想向太空发射飞船。我有很多想法,但也无法付诸实施。

总的来说,这是很自然的:下载工作室很困难,但自己编写 XAML 解释器 - 这没什么,但你就是找不到时间。

 

Dll 连接的水平给我留下了深刻印象。

连接 C#_dll 比连接 EX5-library 要容易得多,因为在第二种情况下您需要编写函数,这种说法对吗?

类、枚举、结构在 EX5 库中可用吗?从文章中可以看出,ME 在 dll 中看到了所有这些,就像你连接了 mqh 一样,但这里只能访问签名,而不能访问源代码。

 
Vasiliy Sokolov:
我们都在等彼得。让我们看看他对我提出的解决方案的 "专家评估":)

瓦西里,我不得不说,从技术上讲,我认为你走在了正确的道路上。当然,这仅仅是个开始,要建立一个成熟、方便的连接,你还有很多工作要做,但结果是值得的。祝贺你们!))

 
fxsaber:

dll 连接水平给人留下了深刻印象。

...

我也是...

 

我想按照文章中的例子,在第三方交互式图表上将数据可视化。

我能否向 C# 发送一个双数组,然后它就能根据一些视觉上先进的圣经构建一个图表,在鼠标下缩放、滚动并显示数值?各种反馈图表等等。


ZЫ 我肯定有条形可视化圣经。谁知道呢,告诉我如何在表单中获得完整的价格图表?

 
fxsaber:

我想按照文章中的示例,在第三方互动图表上将数据可视化。

我能否将一个双数组发送给 C#,然后它就会根据一些视觉上先进的 "圣经 "构建一个图表,在鼠标下缩放、滚动并显示数值?各种反馈图表等等。

这些都需要您自己来创建。在这里,我们只提供一个适配器,用于连接 Sharp 表单中的简单图形用户界面元素。

 
fxsaber:

dll 连接水平给人留下了深刻印象。

连接 C#_dll 是否更容易?

是的,现在在 MT5 中连接 C# 库完全不成问题,如果您刚刚熟悉这一功能,请下载 SharpDevelop(14 MB)(不要下载 VS2017 > 200 MB ~ 1GB)

以下是我写的简要说明https://www.mql5.com/ru/forum/293630/page57#comment_9851502

不谈图形,运行 MT 开发人员推荐的示例:https://www.mql5.com/ru/forum/285631。

public class TestClass
{
   public static void Inc(ref int x)
   {
    x++;
   }
}

MT5 中 C# 库的集成水平给我留下了深刻印象,一旦写入带有 dll 名称的 #import 指令,dll 中函数的签名将立即出现在工具提示中,您可以将它们用作 MT 交付的本地包含器。


Retag Konow:

您必须自行创建。它只提供一个适配器,用于连接 Sharp 表单的简单图形用户界面元素。

您想连接到复杂的元素,但为什么呢?Sharp 程序可自行运行,MT5 可自行运行,文章作者已经展示了一个数据交换的示例.....,我甚至可以向您展示更多:当通过引用将数组从 MT5 传递到 C# 时,通过调用标准的 Sharp 函数 .Length(),不仅可以获得数据,甚至还可以获得数组的大小,即只需通过引用传递缓冲区名称即可,也就是说,您可以在 Sharp 中找到数组的大小。

int arr[100];
dllsharp(arr);

在 Sharp 中,您可以找出 buf.Length() 的大小 .....集成就是如此神奇)

public class TestClass
{
   public static int tst(ref int[] a)
   {
    return a.Length();
   }
}
 
Igor Makanu:

...

在 Sharp 中,您可以找出 buf.Length() 的大小 ....这样的集成奇迹;)

是的,我都明白了。我很害怕,害怕 C 调...... :)))))