文章 "通用智能交易系统:事件模型和交易策略原型(第二章)"

 

新文章 通用智能交易系统:事件模型和交易策略原型(第二章)已发布:

本文是通用智能交易模型系列文章的又一篇。这一部分详细介绍了基于数据集中处理的原始事件模型,并考虑了交易引擎CStrategy基类的结构。

本文包含对通用交易引擎CStrategy的进一步描述。在第一片文章通用智能交易系统:交易策略的模式(第一部分)中, 我们详细讨论了要实现的交易模型及函数。我们已经分析过一个由四种方法组成的通用EA框架,两个方法用于开新仓其他两个用于平仓。不同的方法调用组合可以 定义一个特定的交易模型。例如,只允许EA卖或者买,可以管理未平仓头寸或等待。使用这些方法,一个EA可以根据交易时间或者日期进行灵活的设置。

然而,交易模型并不是一个EA的全部。在第二部分我们将讨论基于事件集中处理的CStrategy交易模型的事件模型。提出的事件处理方案和所有事件聚集在一处的系统事件不同。这样实现的好处在后面会讲到。

此外,本文还介绍两个重要的交易引擎类 — CStrategyCPosition。第一个是整个EA交易逻辑的核心,它将事件和模型结合起来成为一个灵活的框架,自定义EA可以直接继承它。第二个类是通用交易操作的基类。它包含针对未平仓头寸的操作(如平仓或者修改止赢止损)。这样可以构成所有的交易操作并且使得它们独立于平台。

处理其他交易对象上发生的事件,MarketEvent结构体

当设计一个分析多货币对交易系统时,你需要创建一个可以追踪多货币对价格变化的机制。然而,标准的OnTick函数仅在EA运行货币对上新报价到来时被激活。另一方面,交易系统开发者可以使用OnBookEvent函数,它响应订单簿(市场深度)中的价格变化。和OnTick不同,OnBookEvent在订单簿中的任一对象发生价格变化时被调用,你可以使用MarketBookAdd 函数来订阅订单簿。

订单簿的改变非常频繁,这也是为何监控该事件是非常耗费资源的。一般,对于EA来说监控所需货币的报价变化足够了。另一方面,订单簿变化事件也包含了新报价的到来。除了OnBookEvent,你可以设置以一定的时间间隔调用OnTimer,并在其中分析多货币对的价格变化。

因此,在对NewTick,BookEvent 和 Timer 事件做出响应的系统函数中,你可以添加对某些中间件 的调用(我们称之为事件处理器EventProcessor),它将同时分析多个货币对的价格变化并产生与之对应的事件。每一个事件将有一个结构体形式的 统一描述,并将由策略的控制函数传递。接收到一个结构体的事件后,策略将对此做出相应或者忽略它。在这种情况下,为EA最终实际产生事件的系统函数将不可 知。

事实上,如果EA接收到一个新报价事件通知,至于通知通过OnTick, OnTimer 还是 OnBookEvent来 接收是无关紧要的。重要的是指定货币对上有新的报价到来。一个事件处理器可以给很多策略使用。例如,如果每个策略由一个自定义类代表,这些类的实例可以被 存储在特定的策略列表中。在这种情况下,列表中的任一策略将能够接收到由EventProcessor产生的新事件。下面的图表显示了事件是如何产生和发 送的:

图 1. 事件产生和发送图

作者:Vasiliy Sokolov

原因: