文章 "通用智能交易系统:支持挂单和对冲(第五章)"

 

新文章 通用智能交易系统:支持挂单和对冲(第五章)已发布:

本文是对CStrategy交易引擎的进一步描述。由于交易者的广泛需要,我们向交易引擎中添加了支持挂单的相关函数。同时,最新版的MetaTrader 5现在也支持了具有对冲选项的帐户。同样的功能也添加到了CStrategy中。本文给出了使用挂单进行交易和在账户中用CStrategy类进行对冲交易的详细算法描述。

更新功能后的策略测试结果和之前略有不同。在净额帐户上,EA将像传统的只能交易系统一样只操作一个头寸:


图. 5. 在经典净额账户上由一个多态EA管理的头寸。

本文的附件包含最新版的CImpulse策略,不同的帐户类型用不同的逻辑实现。   

注意交易逻辑的所有版本都是正确的。然而,交易策略的具体操作方式取决于策略本身。CStrategy仅提供一个通用的接口,根据头寸的类型类操作它们。 

作者:Vasiliy Sokolov

[删除]  

Чтобы упростить работу пользователей, в класс CStrategy были введены три метода: Ask(), Bid() и Last()

只添加一个MqlTick 不是更好吗?

文章中的视频在任何浏览器中都无法显示。

[删除]  

请作者提供。在撰写 TC 时,您的方法非常方便。一切多余的东西都被隐藏起来,这不能不令人高兴。这样做的回报是什么?

如果我使用经典方法和您的方法编写脉冲-TC,您的方法在测试器中会慢多少?

毫无疑问,你们的代码会更美观、简洁、方便和通用。

你们是否已经支持多符号 TC(多符号 OnTick 在哪里)?

[删除]  
我查看了 EventChartPBarChanged.mqh。为什么常量在应该被忽略的地方被忽略了?
[删除]  
// 管理 CStrategy 类型策略的生成器

打错了。

[删除]  

在我看来,只定义 CStrategyList::OnChartEvent,然后只在本地OnChartEvent 中调用它的做法是短视的。

如果是我,我会创建一个具有虚拟 OnChartEvent 的基类。所有的 CStrategyList、CStrategy 和其他类(顺便说一下,由于某些原因,你不能从任何类继承指标)都将从基类派生。在本地 OnChartEvent 中,您应该循环调用所有已创建的虚拟 OnChartEvent。

我发现您正在使用开发人员编写的库。例如数组。它们是正常编写的吗?

您的源代码中随处可见

#include <Strategy\Message.mqh>

这假定我没有用于其他需要的 Strategy 文件夹。在允许的情况下,为什么不在 includnics 中使用倒逗号?为什么不把

#include <Sokolov\Strategy\Message.mqh>
 
Anton Zverev:

在我看来,只定义 CStrategyList::OnChartEvent,然后只在本地 OnChartEvent 中调用它的做法是短视的。

如果是我,我会创建一个具有虚拟 OnChartEvent 的基类。所有的 CStrategyList、CStrategy 和其他类(顺便说一下,由于某些原因,你不能从任何类继承指标)都将从基类派生。在本地 OnChartEvent 中,我会在所有创建的虚拟 OnChartEvent 的循环中编写一个调用。

是的,这样可能更正确。现在,OnChartEvent 事件被专家们忽略了。我会在下一个版本中进行适当修改。

安东-兹韦列夫

我发现您使用了开发人员编写的库。例如数组。它们写得好吗

非常好,而且非常优化。在多年的使用过程中,它们中的所有算法都得到了完善和微调。这就是我推荐它们的原因。

Anton Zverev:
你在源代码中到处都是这样写的。

这是在假设我没有 Strategy 文件夹来满足其他需求。在允许的情况下,为什么不在 includnics 中使用倒逗号?为什么不把

位于 Strategy 文件夹内的源代码只是本地相互引用,也许我翻阅了一些东西,我不知道,但应该有本地引用。Expert Advisor 文件和 Expert Advisor mq5 模块本身全局引用引擎,这也是正确的,因为它是库的外部模块。

 
Anton Zverev:
我查看了 EventChartPBarChanged.mqh。为什么在需要常量的地方忽略了常量?
对 const 方法的偏见。我的程序员生涯与 C# 有关--但在 C# 中却不是这样,因为修改器施加的限制不起作用。
 
Anton Zverev:

请作者提供。在撰写 TC 时,您的方法非常方便。一切多余的东西都被隐藏起来,这不能不令人高兴。这样做的回报是什么?

如果我使用经典方法和您的方法编写脉冲-TC,您的方法在测试器中会慢多少?

毫无疑问,你们的代码会更美观、简洁、方便和通用。

你们是否已经支持多符号 TC(多符号 OnTick 在哪里)?

策略测试仪 的主要时间都花在基础架构上(滚动条、模拟交易环境等),花在智能交易代码上的时间要少得多。

另一方面,分析表明,CSTartegy 的主要资源密集型方法是 BuyInit、SellInit、BuySupport 和 SellSupport 方法,即 Expert Advisor 逻辑本身。所有其他绑定都以最佳方式成功编译到平面代码中,如果不使用,则直接剪切掉。这就是为什么高级 OOP 编程是合理的。

需要注意的是,如果智能交易系统或多或少比较复杂,有许多规则和繁重的基础结构,以最初的扁平化形式(没有函数和 OOP)进行编程将不可避免地导致程序员出错,因此这样的智能交易系统的性能甚至会比使用 OOP 时更低。汇编程序的时代已经过去。编译器早已在某些优化领域打败了人类。

 
Anton Zverev:

只添加一个MqlTick 不是更好吗?

文章中的视频在任何浏览器中都看不到。

顺便说一下,这个想法很有意思。由于某些原因,我没有想到这一点。

视频有问题。新版本的网站拒绝使用 Flash。现在只有在 yuteb 上才能观看视频。发布视频需要一些时间,但我们会尽快解决。

[删除]  
Vasiliy Sokolov:

位于 Strategy 文件夹内的源代码在本地相互引用,也许我翻阅了一些东西,我不知道,但应该有本地引用。Expert Advisor 文件和 Expert Advisor mq5 模块本身全局引用引擎,这也是正确的,因为它是库的外部模块。

已查看。查看 MoneyManagment.mqh。

来自 mq5 的全局引用 - 我完全理解这种需要。但您在解决方案中保留了 Include/Stategy 文件夹。而我使用这个文件夹是为了满足自己的需要。我不想在其中看到其他人的 mqh。如果您将所有基础架构移到 Include/Sokolov/Strategy、Include/Sokolov/Strategy、Include/Sokolov/Panel 等文件夹中,那将是合乎逻辑的。