RQAlpha源码阅读(二)

RQAlpha源码阅读

RQAlpha源码阅读(二)-CycleGen

上一节我们分析了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传入内部并进行循环调用,回测策略。

结束回测。

执行收尾工作。

本文系作者 @ 原创发布在 CycleGen。未经许可,禁止转载。

喜欢()
评论 (0)
    热门搜索
    173 文章
    1 评论
    47 喜欢
    Top