文章 "开发多币种 EA 交易(第 3 部分):架构修改"

 

新文章 开发多币种 EA 交易(第 3 部分):架构修改已发布:

我们在开发多币种 EA 方面已经取得了一些进展,该 EA 有几个并行工作的策略。考虑到所积累的经验,让我们回顾一下我们解决方案的架构,并尝试在我们走得太远之前对其进行改进吧。

我们分配了一个 EA 对象(CAdvisor 类或其子类),它是交易策略对象(CStrategy 类或其子类)的聚合器。在 EA 运行开始时,OnInit() 处理函数中会发生以下情况:

  • 创建 EA 对象。
  • 创建交易策略对象并将其添加到 EA 的交易策略数组中。

在 OnTick() 事件处理函数中会发生以下情况:

  • 为 EA 对象调用 CAdvisor::Tick() 方法。
  • 此方法遍历所有策略,并调用它们的 CStrategy::Tick() 方法。
  • CStrategy::Tick() 中的策略执行所有必要操作,以打开和关闭市场仓位。

这可以用示意图来表示:

Fig. 1. Operation mode from the first article

这种模式的优势在于,只要拥有遵循某种交易策略的 EA 的源代码,就可以通过一些相对简单的操作,使 EA 与其他交易策略实例协同工作。

然而,主要的缺点很快就显现出来了:在组合多个策略时,我们必须或多或少地减少每个策略实例所开立仓位的大小。这可能导致某些甚至所有策略实例完全被排除在交易之外。由于公开市场仓位的最小规模是固定的,因此并行工作中包含的策略实例越多或初始存款越少,出现这种结果的可能性就越大。

作者:Yuriy Bykov