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

 
Igor Makanu:

文章中介绍了 MT5 与 "外部世界 "交互的一种完全不同的方式,您需要在 MT5 代码中描述 C++ 函数的签名,并像普通 dll 一样调用它们,这里有一个工作示例,我一个月前测试过。

https://www.mql5.com/zh/articles/18

你好:tensorflow c# 完全可以在谷歌上搜索到,这里有 C# 的现成解决方案https://nugetmusthaves.com/Tag/tensorflow 

好文章,我会注意的,谢谢!

我已经知道 tensorflow c# 完全可以 google,我只是不想花时间学习 C#,所以我将 tensorflow 与 C++ 整合在一起。

这不是我的问题。

文章中描述的交互方式与通常的交互方式有何不同?文中写道,只要在 .Net 平台上编写 dllka 就足够了。但在该平台上编写不一定要使用 C#。但当我使用C++/CLR (Visual Studio 建议 我使用 .Net 类编写应用程序 ),MQL5 仍然要求 像往常一样从生成的 dllka 中声明函数, 而根本看不到类。

 

是否可以从Visual Studio 向 MT5 发送字符串?我该如何操作?


感谢您的帮助

 
AikAcrobatt:

文章中描述的交互方式与通常的交互方式有何不同?文中说,只需在 .Net 平台上编写 dllka 即可。但在这个平台上编写不一定要使用 C#。

如果我没记错的话,文章中使用的方法叫做 C# 注入 - 谷歌一下,我在这里帮不上忙,C# 和 MQL5 之间的交互是如何发生的,作为一个选项 "旋转 "示例https://www.mql5.com/ru/forum/303283/page3#comment_10607873。

Обсуждение статьи "Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#"
Обсуждение статьи "Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#"
  • 2019.02.12
  • www.mql5.com
Опубликована статья Создание графических интерфейсов для экспертов и индикаторов на базе .Net Framework и C#: Автор: Vasiliy Sokolov...
 
fxsaber:

举例说明如何使用这个库,这现实吗?

这个库很有趣。我认为将其与引擎集成是非常现实的。

 
AikAcrobatt:

您好,这是一篇很好的文章!

从上文可以看出一些问题:

1) 从文章的文字中我得到的印象是,不仅图形界面,而且几乎所有 "不适合" MQL5 的 API 的实现都可以用同样的方式组织。

是的,完全正确。这篇文章本质上描述了一种改进的 MVC设计模式。模式是通用的,并不依赖于语言工具和任务,最主要的是 "模型-表示-控制器 "的概念与任务相匹配。

AikAcrobatt:

我的问题是,是否有可能编写一个 C++ .Net 库(我的理解是使用 C++/CLR),以便在其 .Net 代码中实现 MQL5,就像在您的 GuiController 引擎中一样?

2) 理论上可以。.Net dll 是一个打包的 CIL,像 C#、VB Net、C++ Net 这样的高级语言会被翻译成它。也就是说,无论 net dll 是用什么语言编写的,MQL 都可以读取。但只有在实践中才需要检查,因为开发人员显然是以 C# 为基础的。

AikAcrobatt:

我感兴趣的实际例子是这样的。如今,VS2017 可以集成机器学习的传感器库,例如 TensorFlow 提供了支持 GPU 计算的 C++ API。您的文章提供了将 TensorFloW(或任何其他机器学习库)的 C++ 实现直接集成到 MQL5 的绝佳机会,这对我来说似乎非常方便。问题是,由于某些原因,我甚至无法使用此处指定的方法将试用版 C++ dll 导入 MQL5。

您指的是 Net C++ dll 吗? 如果是,您应该检查看看。很难理解它在现实中是如何工作的。

但总的来说,您说得非常对:与现有代码快速集成肯定是未来的趋势。而且您也没有足够的时间自己编写所有代码。在这里,您可以下载您需要的东西,然后继续前进。

 
AikAcrobatt:

...

文章中描述的交互方式与通常的交互方式有何不同?文中说,只要有一个在 .Net 平台上编写的 dllka 就足够了。但在该平台上编写不一定要使用 C#。但是,当我使用C++/CLR (Visual Studio 建议 我使用 .Net 类创建应用程序 ),MQL5 仍然 像往常一样要求从生成的 dllka 中声明函数, 但它根本看不到类。

这非常奇怪,因为 C# 的工作方式完全不同。MQL 完全可以看到 Net 类及其带有签名的方法。甚至在 MetaEditor 中,intellisense 也能正常工作。

不幸的是,我对 C++ 几乎毫无经验。我很乐意帮助您,但恐怕帮不上忙。

 
Norton Daniel Barth:

是否可以从 Visual Studio 向 MT5 发送字符串?我该如何操作?

感谢您的帮助

当然可以。您可以从方法(第 1 行)中返回字符串。您也可以从引用中返回字符串(第 3 行):

string line = SharpClass::GetSting();
string line_l;
SharpClass::GetStringByLink(line_l);

其中 SharpClass 是程序集中的静态 C# 类。

 
Vasiliy Sokolov:

这非常奇怪,因为 C# 的所有工作方式都截然不同。MQL 可以完美地看到 Net 类及其带有签名的方法。甚至 MetaEditor 中的 intellisense 也能正常工作。

不幸的是,我对 C++ 几乎毫无经验。我很乐意帮助你,但恐怕帮不上忙。

到目前为止,我有以下几种方法:

使用 .NET 的最简单 C++ dllka:

using namespace System;

namespace TesterMQL54 {
        public ref class Class1
        {
        public: static int Func1(int arg) { return (arg - 1); };
        };
}

该库与 MQL5 的交互方式与 C# 中的类似库相同(我检查过),也与您文章中描述的库类似。
当我们将程序插入 MQL5 时:

#import "TesterMQL5_4.dll"
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("Beg");
   Print(Class1::Func1(7));
   Print("End");
  };
//+------------------------------------------------------------------+


编译器会看到类 Class1 和函数 Func1。但与 Sharpe 行为不同的是,终端显示加载 dll 失败:

无法加载 'C:\Users\...\MQL5\Libraries\TesterMQL5_4.dll' [0]

EX5 加载失败。



 
Vasiliy Sokolov :

当然可以。可以从方法中返回字符串(字符串 1)。也可以返回字符串引用(第 3 行):

其中 SharpClass 是程序集中的一个静态 C # 类。

感谢您的帮助,但我还需要学习更多的 C# 知识,我才能真正让这个简单的东西发挥作用或包含代码


再次感谢您的宝贵时间

 
AikAcrobatt:

到目前为止,我有以下收获

使用 .NET 的 C++ 编写的简单 dll:

...

请正确插入代码: