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

 

新文章 基于 .Net 框架和 C# 为 EA 交易和指标开发图形界面已发布:

本文介绍了一种使用 Visual Studio 创建图形窗口的简单而快速的方法,并随后将其集成到专家顾问的MQL代码中。本文面向非专业读者,不需要了解C#和.NET技术。

MetaTrader 5 策略测试器具有许多特性,MQL GUI开发人员应该考虑这些特性。主要原因是根本不调用 OnChartEvent图形事件处理函数。此功能是合乎逻辑的,因为图形表单涉及实时与用户一起工作。然而,在测试器中实现某种类型的面板将是非常有趣的。这些是所谓的“交易播放器”,允许用户手动测试他们的交易策略。例如,策略测试器在快进中生成当前市场价格,而用户单击买入和卖出在历史中模拟交易操作。我们开发的 TradePanel 就是这种类型的面板。尽管它很简单,但它很可能是一个拥有最必要功能的普通交易播放器。 

但让我们来考虑一下我们的面板将如何在 MetaTrader 5 策略测试器中工作。TradePanel 的图形窗口作为独立的.NET程序集存在,因此,它不依赖于当前的 MetaTrader 5 环境,甚至终端本身。严格来说,它可以从任何其他程序运行,而即使用户自己也可以启动位于exe容器中的程序集。

因此,我们的程序不需要调用 OnChartEvent,此外,还可以在策略测试器中定期启动的任何事件处理功能中更新窗口中的数据并接收用户的新订单。OnTick 和 OnTimer 就是这样的函数,面板通过它们来工作。因此,尽管我们的面板是为实时操作而设计的,但是我们的面板在策略测试器中也能很好地工作,无需更改。让我们通过在测试器中启动面板并执行几个交易来检查此声明:

作者:Vasiliy Sokolov

 

这张图片

您可以清楚地看到,在进行可视化交易时,您必须做些什么才能看到余额/权益图表。


ZY 每个窗口右上角的两个附加按钮是什么?

 
fxsaber:

在这张照片中

您可以清楚地看到,在进行可视化交易时,您需要做什么来查看余额/权益图表。

对于有两台显示器的人来说,这其实非常方便。我有两台显示器,但为了图片不得不这样布局。

fxsaber

每个窗口右上角的两个附加按钮是什么?

这是一个额外的工具,可以方便地在两个显示器上工作。在这种情况下,它不应该出现在 gif 中,但你不可能看到所有东西。

 
Найдите скомпилированный файл MtGuiController.dll в папке MtGuiController\bin\debug и скопируйте его в каталог библиотек MetaTrader 5
这不是调试版本吗?
 
第一行告诉编译器将调用открытым статическим методам класса, располагающимся в MtGuiController.dll 。请注意,不必指定我们将在此程序集中调用哪些方法。编译器会在自动模式下为我们完成这项工作。
能否在编辑器模式下获取这些方法的列表?
 

好文章,但出于某种原因,我认为这篇文章的水平不适合初学者,虽然作为指导,"什么 "和 "如何 "非常详细,谢谢!

ZY:带按钮的表单不需要第三方 dll (GuiController.dll ) 用户可以使用 VS2017 工具创建带按钮的表单,只需点击 2 次:创建项目 - Net 类库,然后创建项目 - 添加 Windows 表单。

在第一个窗口 "类库 "中,我们只需编写几行代码即可启动图形表单,大致如下:

using System;
using System.Threading; 
public class MainForm
    {
        static Form1 mainform;
        static Thread threadmainform;
        
public static void Init()
        {
            if (mainform == null)
            {
                threadmainform = new Thread(NewForm);
                threadmainform.Start();
            }
        }

public static void DeInit(int reason)
		{
            if (reason == 3 || reason == 5) return;
            if (mainform!=null) {mainform.Close(); Thread.Sleep(1000);}
			if(threadmainform!=null) threadmainform.Join();
			mainform=null;
			threadmainform=null;
		}

private static void NewForm()   {   mainform = new Form1();   mainform.ShowDialog();   }
}

如果在 VS2017 中编译这十行代码,那么在 MT5 中就可以创建图形表单(添加到表单中的所有元素都是 "可点击 "的),并且可以删除(DeInit () ) ,剩下的工作就是在表单(在单独线程中 "旋转")和 MT5 本身之间建立数据交换。

MT4 的情况要糟糕得多,但您仍然可以让用 .Net 编写的 dll 运行。


 

感谢 github 提供的示例。MT5 是否也能实现同样的原理?

#include <Include.mqh> // 共享项目路径

当 ME 通过在路径中指定注释自动同步 mqh 文件时?

 

感谢您的文章!一切都嚼碎了。我没有只读到 C# 的内核。但创建表格真的不需要了解它。


关于应用程序的想法

  • 在应用程序中,即使不在可视化模式下,也可以停止执行单程。例如,一个循环的 MO-learning 正在 OnTester 中运行。使用表单可以方便地在您认为合适的时候停止执行。
  • 由此可见,用 C# 编写完整的交易 API 非常简单。然后用 C# 编写所有智能交易系统,并在终端/测试器中运行它们。在此 API 的基础上,您还可以创建带有自定义皮肤的其他终端。面向普通用户的应用机会巨大。您可以收集他们的愿望并将其付诸实施:Tick 图表、测试器等。
  • 您可以轻松地将面板嵌入到 EA 中,作为展示台手动交易 的补充。这样,您就可以为自动交易顾问模拟压力情况(删除其订单、下达您自己的订单等)。但更令人高兴的是,所有手动操作都可以轻松记录和回放,无需表格,也无需按按钮。这样您就可以在调试模式下调试 EA,以确保手动干预的稳定性。


如果运行多个这样的表单顾问,将如何进行交互?

 
fxsaber:

感谢 github 提供的示例。MT5 是否也能实现同样的原理?

#include <Include.mqh> // 共享项目路径

当 ME 根据路径中的注释自动同步 mqh 文件时?

您所描述的可能是 ME 的一个非常有趣且很酷的功能,但当然并不是这样。

不过,GitHub 直接支持 MQL4 和 MQL5

此外,还有一些实用工具,主要是Git Bash,可以让您实现 VisualStudio 的所有功能,甚至更多。它们与 MQL 项目配合得天衣无缝。如果整本书都是在 Github 的帮助下写成的,那该怎么说呢?

事实上,在 github 上开发 MQL 项目得到了长期和高水平的支持。

 
Vasiliy Sokolov:

你所描述的对 ME 来说可能是一个非常有趣、很酷的功能,但当然并不是这样。

不过,GitHub 直接支持 MQL4 和 MQL5

此外,还有一些实用工具,主要是Git Bash,可以实现 VisualStudio 所能实现的一切,甚至更多。它们与 MQL 项目配合得天衣无缝。如果整本书都是在 Github 的帮助下写出来的,那该怎么说呢?

事实上,在 github 上开发 MQL 项目已经有很长一段时间了,而且得到了高水平的支持。

不幸的是,对于像我这样的书呆子来说,这一切都是一片黑暗的森林。您的文章展示了 github 的一个很酷的应用。这可能只是其功能的 1%,但它很有用。

从给出的链接中,我还不明白它对 MQL5 有什么帮助。它可能是程序员的必备工具,但也有像我这样远离编程的人。

如果有一篇关于 MQL5 的文章,那将会非常有用。

 
fxsaber:

感谢您的文章!一切都嚼碎了。我没有只读到 C# 的内核。但创建表格真的不需要了解它。

关于应用程序的想法

  • 1) 在应用程序中,即使不在可视化模式下,也可以停止单次执行。例如,一个循环的 MO-learning 正在 OnTester 中运行。使用表格可以很方便地在您认为合适的时候停止执行。
  • 2) 可以看出,用 C# 编写一个完整的交易 API 非常容易。然后用 C# 编写所有智能交易系统,并在终端/测试器中运行它们。在此 API 的基础上,您还可以创建带有自定义皮肤的其他终端。面向普通用户的应用机会巨大。您可以收集他们的愿望并将其付诸实施:Tick 图表、测试器等。
  • 3) 可以轻松地将面板嵌入到您的 EA 中,作为展示台手动交易的补充。这样,您就可以为自动交易顾问模拟压力情况(删除其订单、下达您自己的订单等)。但更令人高兴的是,所有手动操作都可以轻松记录和回放,无需表格,也无需按按钮。这样,您就可以在调试模式下调试 EA,以确保手动干预的稳定性。

4) 如果运行多个这样的表单顾问,互动将如何进行?

1) 当然可以。外部应用芯片允许您做所有这些事情。

2) 的确可以编写。但将整个交易环境塞进 C# 是个坏主意。最好用纯 MQL 编写智能交易系统,但也可以用 C# 为其添加必要的 "修饰"。

3) 是的,可以做到。

4) 可以通过不同方式进行配置。您只需指定窗体名称和窗体所在的程序集。也就是说,现在你可以运行一个、两个或五个表单。没有任何限制。