这是一个解读RQAlpha源代码的系列,我会定期更新。RQAlpha的github地址为:https://github.com/ricequant/rqalpha 。 对于一个事件驱动型的量化回测框架,我一般是从其关于对事件的处理的代码开始分析的,以下按照这个逻辑对RQAlpha的源代码进行分析。
1. events.py
该py文件中定义了Event, EventBus, EVENT三个类和parse_event这一个函数,这些类和函数是构建事件驱动引擎的基础。
Event类
class Event(object):
def __init__(self, event_type, **kwargs):
self.__dict__ = kwargs
self.event_type = event_type
def __repr__(self):
return ' '.join('{}:{}'.format(k, v) for k, v in self.__dict__.items())
Event类用于定义各类事件,一个事件有两个属性:事件的类型和事件的内容,event_type属性就代表事件的类型。关于事件的内容,这里设置得相当普适,事件的内容**kwargs的形式输入,这样的话就可以以多个实例属性的形式展现该事件的内容。
但这里需要注意的是,self.dict = kwargs和self.event_type = event_type这两个语句的顺序不能替换。我们知道__dict__表示的是类或实例的属性和方法(这里是实例),如果顺序替换,则self.__dict__中不会包含event_type,就会导致event_type属性不存在于实例中。下面以一个具体的例子展示Event类的使用:
class Event(object):
def __init__(self, event_type, **kwargs):
self.__dict__ = kwargs
self.event_type = event_type
def __repr__(self):
return ' '.join('{}:{}'.format(k, v) for k, v in self.__dict__.items())
if __name__ == "__main__":
bar = Event("bar", open=3645,high=3665,low=3620,close=3637,volume=39776543,openinterest=34555555342)
print(