所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出)。
脚本型:脚本型的程序包括最早的批处理文件以及使用Python做交易策略回测等等,这类程序的特点是在用户启动后会按照编程时设计好的步骤一步步运行,所有步骤运行完后自动退出。
连续运行型:连续运行型的程序包含了操作系统和绝大部分我们日常使用的软件等等,这类程序启动后会处于一个无限循环中连续运行,直到用户主动退出时才会结束。
一、连续运行型程序
我们要开发的交易系统就是属于连续运行型程序,而这种程序根据其计算逻辑的运行机制不同,又可以粗略的分为时间驱动和事件驱动两种。
1.1 时间驱动
时间驱动的程序逻辑相对容易设计,简单来说就是让电脑每隔一段时间自动做一些事情。这个事情本身可以很复杂、包括很多步骤,但这些步骤都是线性的,按照顺序一步步执行下来。
from time import sleepdef demo(): print('BB')while True: demo() sleep(1.0)
时间驱动的程序本质上就是每隔一段时间固定运行一次脚本。尽管脚本自身可以很长、包含非常多的步骤,但是我们可以看出这种程序的运行机制相对比较简单、容易理解。
时间驱动的程序在量化交易方面还存在一些其他的缺点:如浪费CPU的计算资源、实现异步逻辑复杂度高等等。
1.2 事件驱动
与时间驱动对应的就是事件驱动的程序:当某个新的事件被推送到程序中时,程序立即调用和这个事件相对应的处理函数进行相关的操作。
举个例子:
有些人喜欢的某个公众号,然后去关注这个公众号,哪天这个公众号发布了篇新的文章,没多久订阅者就会在微信里收到这个公众号推送的新消息,如果感兴趣就打开来阅读。
上面公众号例子可以翻译为,监听器(订阅者)监听了(关注了)事件源(公众号),当事件源的发送事件时(公众号发布文章),所有监听该事件的监听器(订阅者)都会接收到消息并作出响应(阅读文章)。
公众号为事件源 订阅者为事件监听器 订阅者关注公众号,相当于监听器监听了事件源 公众号发布文章这个动作为发送事件 订阅者收到事件后,做出阅读文章的响应动作事件驱动主要包含以下元素和操作函数:
1.2.1 元素
事件源 事件监听器 事件对象1.2.2 操作函数
监听动作 发送事件 调用监听器响应函数现在用python实现来实现上述的业务逻辑,先看流程图:
1.2.3 EventManager事件管理类代码如下:
新闻热点
疑难解答