文章 "通用智能交易系统:组合交易及管理策略组合(第四章)"

 

新文章 通用智能交易系统:组合交易及管理策略组合(第四章)已发布:

在最后一篇关于CStrategy交易引擎的系列文章中,我们将考虑多个交易算法同时运行,学习如何从XML文件加载策略,并将给出一个简单的面板,用于从可执行模块中选择EA,并管理它们的交易模式。

点击面板中的任何一个按钮,定义了执行何种操作并执行之。例如,如果我们从列表中选择了一个策略,当前策略的索引值将等于选中的这个,然后你可以进行后续交易操作了。比如,你可以通过从下拉列表中选择恰当的策略模式选项,来改变选中策略的交易模式。

图 2. 选定策略的模式列表

图 2. 选定策略的模式列表

代表选定策略的买入和卖出执行起来是一样的。策略的指针调用CStrategy基类的Buy和Sell方法。交易量由传入的参数确定。在这种情况下,执行中的magic数字对应于策略的编号,因此无法区分手动交易还是EA交易。

需要注意的是EA的交易逻辑,所有用户的开仓以一般模式被EA所保持。它管理这类头寸如同管理其自动开仓的头寸一样。

作者:Vasiliy Sokolov

 
非常感谢Vasiliy Sokolov 如此详尽的工作。
请回答几个问题:
1.作者在第一篇文章中提到了平台独立性...
2. 当交易 10 种工具,每种工具有 2-3 个系统,每个系统有 10 个参数时,XML-portfolio 将成为一个非常大的文件,很难手工编辑而不出错。也许在这种情况下,将 XML 投资组合存储在不同的文件中会比较合理--每个工具一个文件,其中包含在该工具上交易的系统及其参数信息? 这样就可以更方便地启用/禁用(通过在文件中设置复选框)工具交易和该工具上的单个 TS。
 
Mike:
非常感谢Vasiliy Sokolov 如此详尽的工作。 请回答几个问题: 1.作者在第一篇文章中提到了平台独立性... 2. 当交易 10 种工具,每种工具有 2-3 个系统,每个系统有 10 个参数时,XML-portfolio 将成为一个非常大的文件,很难手工编辑而不出错。在这种情况下,也许应该将 XML 投资组合存储在不同的文件中 - 每个工具一个文件,其中包含在该工具上交易的系统及其参数的信息? 这样就可以更方便地启用/禁用(通过在文件中设置复选框)工具交易和该工具上的单个 TS。


遗憾的是,第一个问题不太容易回答。实际上,要使该引擎在 MT4 中工作,需要编写很多东西。我会尽快完成。当我将引擎移植到 MT4 上时,我会发表一篇相应的文章。

关于第二个问题 - 最好将所有内容存储在一个文件中。XML 很好,因为它允许您组织树状部分,即使有大量标签也不会混淆。另外,XML 标准本身并不欢迎人工编辑。它是一种用于算法之间相互通信的工业格式。在理想情况下,每个 XML 文件都应该有一个常规应用程序形式的 gui 口罩,允许您编辑策略参数。不过,尽管这很简单(从算法的角度来看),却需要花费大量时间,所以目前我们还是直接编辑 xml 文件。

 
Vasiliy Sokolov:

每个 xml 文件都应该有一个常规应用程序形式的 gui 口罩,允许编辑策略参数。不过,虽然这很简单(从算法角度看),但需要花费大量时间,所以目前我们还是直接编辑 xml 文件。

理想的解决方案是在用户面板上设置一个 "编辑 "按钮,打开一个窗口用于编辑相应的<Strategy>... </策略>:)
 
Mike:
理想的解决方案是在用户面板上设置一个 "编辑 "按钮,打开一个窗口来编辑相应的<策略>... 部分</策略>:)
是的,那一定很酷。现在就差找个人来做这件事了。这并不难,我甚至可以告诉你该怎么做。
 
Vasiliy Sokolov:
是啊,那太好了。我只需要找到一个愿意出面的人这并不难,我甚至可以告诉你该怎么做。
我还在学习中...:)
 

下午好 瓦西里

伟大的引擎!......当然,我还得完成一些事情(例如,处理待处理订单)....。但这已经在调试了...

我有一个问题...由于某些原因,在调用 m_trade.PositionClose() 方法时,仓位没有关闭...平仓时会出现错误 10030、10015。

我知道与 MQL4 相比,在关闭订单/头寸方面一切都发生了很大变化......我想了解问题出在哪里....。

 

瓦西里-索科洛夫(Vasiliy Sokolov),应该指出的是,您在创建通用引擎方面做了大量工作,并展示了对 OOP 的精湛掌握。因此,学习这本教材本身对提高您的 MQL5 编程技能就很有帮助。

该引擎包含许多必要和有用的要点,许多交易者都会需要它。

我目前正在将我的机器人从 S#.Shell 引擎迁移到 MT5,我必须说,您创建的交易引擎实现了我在熟悉 Codebase 中提供的标准智能交易模板时所缺乏的许多功能。此外,尽管上述产品是整个程序员团队的杰作,但许多功能都是在同一水平上实现的,甚至更酷。

因此,在熟悉之后,我决定停止我的代码工作,将其移植到您的引擎中。

 
Сергей Лебедев:

瓦西里-索科洛夫(Vasiliy Sokolov),应该指出的是,您在创建通用引擎方面做了大量工作,并展示了对 OOP 的精湛掌握。因此,学习这本教材本身对提高您的 MQL5 编程技能就很有帮助。

该引擎包含许多必要和有用的要点,许多交易者都会需要它。

我目前正在将我的机器人从 S#.Shell 引擎迁移到 MT5,我必须说,您创建的交易引擎实现了我在熟悉 Codebase 中提供的标准智能交易模板时所缺乏的许多功能。此外,尽管上述产品是整个程序员团队的杰作,但许多功能都是在同一水平上实现的,甚至更酷。

在这方面,经过熟悉之后,我决定停止我的代码工作,将其移植到您的引擎上。

感谢您对我提出的方法的赞赏。

我想指出的是,CStrategy 交易引擎本身是基于标准库的,从数据组织类开始,到 CTrade 交易类结束。标准库是优秀、强大和高效的,但并非所有类都是真正的OO。其中许多只是标准函数的封装。OO 方法的目标不是以另一种更复杂的方式调用标准函数,而是以尽可能高效的方式执行有用的任务,同时隐藏实现的复杂性。但这已经是一种哲学了......

 
Vasiliy Sokolov:

感谢您对我提出的方法的赞赏。

我想指出的是,CStrategy 交易引擎本身是基于标准库的,从数据组织类开始,到 CTrade 交易类结束。标准库是优秀、强大和高效的,但并非所有类都是真正的OO。其中许多只是标准函数的封装。OO 方法的目标不是以另一种更复杂的方式调用标准函数,而是以尽可能高效的方式执行有用的任务,同时隐藏实现的复杂性。但这已经是一种哲学了...

请告诉我如何使用 MoneyManagement 模块。示例中没有显示。是每个策略的 MoneyManagement 设置都不一样,还是整个投资组合的设置都一样?

为什么要在 MoneyManagement.mqh 中设置这些外部变量?我不明白它们用在哪里。

input ENUM_MM_TYPE TypeMM;           // Тип управления MM

input double       FixLotOrPercent;  // Фикс. лот или % 

 

你好。

这份材料很有意思。我读了之后决定在实践中尝试一下。我试图在 MT5 Build 1295 中编译所附的 Expert Advisor Agent.mq5。所有文件都没有错误,但最后出现了 "编译器内部错误"。您能告诉我该从哪里查找吗?