RQAlpha源码阅读(二)
RQAlpha源码阅读
上一节我们分析了cmds子包的各个模块的功能,在run命令运行时,rqalpha将会拉起rqalpha.main.run
对策略进行回测分析。下面我们从此处进行进一步的源码分析。
rqalpha.main.run
的运行逻辑
rqalpha.main.run
首先会将配置文件保存到Environment
实例(源码位于rqalpha.environment.Environment
)中,该实例即为策略运行环境。实例化Environment
后会创建Mod管理器ModHandler
,该类中缓存了所有被启用的mod。rqalpha通过config来配置logger并初始化rqdatac。
而后通过compile策略文件来实现策略加载器,其主要作用是加载策略,并将策略运行所需要的域环境传递给策略执行代码。
将上述策略加载器保存到域环境即Environment中,然后把Environment通过ModHandler.set_env
方法传递到ModHandler,而后调用ModHandler.start_up
启动所有Mod。
检查数据源是否已配置,若未配置将会使用rqalpha.data.bar_dict_price_board.BarDictPriceBoard
作为默认数据源,数据来源于bundle
目录。
检查价格面板是否已配置,如果没有配置则会使用rqalpha.data.bar_dict_price_board.BarDictPriceBoard
作为默认价格面板。
根据以上两条信息设置数据代理rqalpha.data.data_proxy.DataProxy
。
调整回测起止日期到距离最近的交易日。
配置运行时上下文rqalpha.execution_context.ExecutionContext
。运行时上下文并不独立存在,它被保存进一个stack中,作为截面信息存在。
再次调整回测开始日期,将日期与时间结合,创建启动的分钟级起点。
检查是否启用投资组合,没有启用则实例化rqalpha.portfolio.Portfolio
作为默认投资组合。
环境中自带事件总线event_bus
,以上操作结束后会发布系统已初始化完成的事件。
而后创建一个基础的运行域,并更新域中g
变量为命令行中设置的全局变量内容,然后将rqalpha.api
中的方法更新到运行域中。
将上面的运行域导入进策略加载器中,并创建策略上下文rqalpha.core.strategy_context.StrategyContext
。这就是在编写策略时使用到的context变量。
创建调度执行器rqalpha.core.executor.Executor
。
将前面策略加载器中的策略绑定到rqalpha.core.strategy.Strategy
中,以便后续调用。
事件总线在以上操作结束后会发布在策略运行前的事件。
调用策略的init方法。
将配置文件中额外的上下文变量更新进context。
实盘时可通过persist_helper
进行现场恢复。
rqalpha.model.bar.BarMap
为策略中使用的bar_dict。
调度执行器将bar_dict传入内部并进行循环调用,回测策略。
结束回测。
执行收尾工作。
本文系作者 @root 原创发布在 CycleGen。未经许可,禁止转载。