- 金融科技
【免费下载链接】rqalpha
A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities
本文基于 docs/source/index.rst(RQAlpha 官方文档首页)整理成文,并结合作者所在的 rqalpha 仓库源码(
rqalpha/目录)对其中涉及的架构定位、配置体系与 Mod 扩展机制进行源码级展开,帮助读者全面理解 RQAlpha 的能力边界、配置方式与扩展入口。
导读
RQAlpha 是一套从数据获取、算法交易、回测引擎、实盘模拟、实盘交易到数据分析的全流程程序化交易解决方案。本文先介绍 RQAlpha 的整体定位与核心特点,再重点剖析其"灵活的配置方式"与"强大的 Mod 扩展性"两大支柱:读者可以借此掌握rqalpha mod list/enable/disable的 Mod 管理命令、七大系统 Mod 的职责与全部配置项,并能结合仓库源码理解撮合、风控、税费等底层实现,从而定制专属于自己的量化交易系统。
RQAlpha 是什么:覆盖交易全链条的量化框架
RQAlpha 的定位可以从其项目描述中直接读出:一个可扩展(extendable)、可替换(replaceable)的 Python 算法回测与交易框架,支持多种证券品种。在官方文档首页中,这一理念被进一步概括为:
RQAlpha 从数据获取、算法交易、回测引擎、实盘模拟,实盘交易到数据分析,为程序化交易者提供了全套解决方案。
也就是说,RQAlpha 并不只是一个回测引擎,而是一条完整的链路:
- 数据获取:通过数据源(data bundle)提供行情数据,仓库中对应 rqalpha/data 目录,其中
base_data_source实现了数据存储与读取层,data_proxy.py向策略层提供统一的数据访问接口; - 算法交易:策略编写与执行层,对应 rqalpha/core/strategy.py 与 rqalpha/apis 提供下单、查询等 API;
- 回测引擎:由
sys_simulationMod 提供模拟撮合引擎与回测事件源(rqalpha/mod/rqalpha_mod_sys_simulation/simulation_broker.py); - 实盘模拟与实盘交易:通过运行类型(
run_type)切换b(回测)/p(模拟)/r(实盘),并支持 persist 持久化功能(见 rqalpha/config.yml); - 数据分析:由
sys_analyserMod 记录每日下单、成交、组合、持仓信息,计算风险指标并输出 csv、plot 等分析结果。
整个框架采用"核心 + Mod"的架构:核心负责环境(rqalpha/environment.py)、事件总线(rqalpha/core/events.py)与执行流程,业务能力全部通过 Mod 插拔式挂载,从而保证框架本身轻量、可替换。
六大核心特点
官方文档将 RQAlpha 的特点归纳为下表,其背后在仓库中均有对应实现:
| 特点 | 说明 | 仓库依据 |
|---|---|---|
| 易于使用 | 让您集中于策略的开发,一行简单的命令就可以执行您的策略 | rqalpha run -f strategy.py即可回测,见 rqalpha/cmds/run.py |
| 完善的文档 | 提供完整的 RQAlpha 使用文档 | 本仓库 docs 目录包含安装、教程、API、Mod 开发等全套文档 |
| 活跃的社区 | 官方社区可获取和询问有关 RQAlpha 的一切问题 | 官方维护的交流渠道(见"获取帮助"一节) |
| 稳定的环境 | 大量算法交易在官方平台稳定运行 | 框架本身对事件、数据、异常有完善处理 |
| 灵活的配置 | 支持多种方式配置和运行策略,只需简单配置即可构建适合自己的交易系统 | 分层配置体系,见下文"灵活的配置方式" |
| 强大的扩展性 | 开发者可以基于 Mod Hook 接口进行扩展 | Mod 机制,见下文"Mod 扩展机制" |
其中"易于使用"可以直接体验:仓库 rqalpha/examples 提供了buy_and_hold.py、golden_cross.py、macd.py、turtle.py等可直接运行的示例策略,配合一行命令即可完成一次完整回测。
灵活的配置方式
三层配置体系
RQAlpha 的配置分为三个层次,从底层到上层优先级递增:
- 默认配置:仓库中的 rqalpha/config.yml 定义了全部基础配置项的默认值;
- 用户配置文件:用户通过
--config参数或用户目录下的配置文件覆盖默认值; - 策略内配置:通过
from rqalpha import run传入 Python 字典形式的config,或在策略代码中通过白名单机制直接指定配置项。
基础配置项详解
rqalpha/config.yml 是理解 RQAlpha 行为的钥匙,核心配置项如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
base.data_bundle_path | ~ | 数据源所存储的文件路径 |
base.strategy_file | strategy.py | 启动的策略文件路径 |
base.start_date | 2015-06-01 | 回测起始日期 |
base.end_date | 2050-01-01 | 回测结束日期(实盘时忽略) |
base.margin_multiplier | 1 | 保证金乘数,取值(0, +∞],非法取值会在启动时被 rqalpha/mod/rqalpha_mod_sys_simulation/mod.py 拦截并报错 |
base.run_type | b | 运行类型:b回测、p模拟交易、r实盘交易 |
base.frequency | 1d | 回测频率,支持1d(日线)、1m(分钟线)、tick(逐笔);分钟线与 tick 级别回测依赖对应数据源 |
base.accounts | stock: ~ | 设置可交易品种及初始资金,支持stock(股票)、future(期货),也可自行扩展账户类型 |
base.persist | false | 模拟/实盘交易中开启 persist,在每个 bar 结束时持久化持仓、账户与用户代码上下文 |
base.round_price | false | 是否根据价格最小变动单位调整发单价格 |
base.forced_liquidation | true | 是否开启强平 |
extra.log_level | info | 日志输出等级:verbose/info/warning/error |
extra.context_vars | ~ | 将预定义变量传入context内 |
extra.enable_profiler | false | 是否启动性能分析 |
配置文件中还定义了白名单机制:whitelist: [base, extra, validator, mod],即只有在白名单内的配置段才允许在策略代码中直接指定,这保证了配置的边界安全。
代码内配置示例
对于需要精细控制回测行为的场景,官方文档推荐在代码中通过run(config)传入完整配置。例如设置滑点:
from rqalpha import run config = { "base": { "strategy_file": "strategy.py", "start_date": "2015-01-09", "end_date": "2015-03-09", "frequency": "1d", "accounts": { "stock": 100000 } }, "mod": { "sys_simulation": { "enabled": True, "slippage": 0.01 } } } run(config)这是文档中最典型的配置用法:base段负责策略与回测周期,mod段负责各 Mod 的开关与参数覆写。
强大的扩展性:Mod Hook 机制
Mod 管理命令
RQAlpha 最具特色的能力是Mod Hook 接口——开发者可以通过实现统一的 Mod 接口对接第三方库、替换默认实现。官方文档给出了三个最常用的 Mod 管理命令:
# 查看当前安装的 Mod 列表及状态 $ rqalpha mod list # 启用 Mod $ rqalpha mod enable xxx # 禁用 Mod $ rqalpha mod disable xxx这三个命令的底层实现在 rqalpha/cmds/mod.py:
mod list读取 Mod 配置,通过tabulate以表格形式输出每个 Mod 的name与enabled/disabled状态;mod enable/disable会先尝试import_module("rqalpha_mod_" + mod_name)校验 Mod 是否已安装(系统 Mod 会被解析为rqalpha.mod.rqalpha_mod_sys_xxx),再将修改写入用户级 Mod 配置文件。若 Mod 未安装,会提示can not find mod [...]并跳过,不会中断其他 Mod 的批量操作。
系统 Mod 默认配置
仓库中的 rqalpha/mod_config.yml 是系统 Mod 的默认开关配置,默认全部启用:
mod: sys_accounts: { enabled: true } # 载入 Account 和 Position Model sys_simulation: { enabled: true } # 回测 / 模拟交易支持 Mod sys_progress: { enabled: true } # 命令行查看回测进度 sys_risk: { enabled: true } # 风控 Mod sys_analyser: { enabled: true } # 策略分析 Mod sys_scheduler: { enabled: true } # 定时任务 Mod sys_transaction_cost:{ enabled: true } # 交易税费 Mod可见 RQAlpha 开箱即用:安装后不做任何 Mod 配置,也能获得回测、风控、分析、税费、定时器、进度显示等完整能力。您也可以按需禁用某些 Mod(例如rqalpha mod disable sys_analyser)来精简回测流程、提升性能。
自定义 Mod 的入口
从源码结构看,自定义 Mod 需继承 rqalpha/interface.py 中定义的AbstractMod接口,实现start_up(env, mod_config)与tear_down(code, exception)生命周期方法,并在start_up中通过env环境对象挂载 Broker、EventSource、Validator 或订阅事件总线(rqalpha/core/events.py)——系统 Mod 均是这一接口的实现范例。官方文档也提示:如果您基于 RQAlpha 进行了 Mod 扩展,可以提交给官方审核,审核通过后会补充进 Mod 列表。
七大系统 Mod 详解
以下逐一展开官方文档列出的七个系统 Mod,内容结合各 Mod 的 README(位于rqalpha/mod/目录)与源码实现。
1. sys_accounts:账户与持仓模型
职责:提供股票、期货的下单 API 实现及持仓模型的实现,是扩展账户 Mod。
配置项(见 rqalpha/mod/rqalpha_mod_sys_accounts/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
stock_t1 | True | 是否开启股票 T+1 限制 |
dividend_reinvestment | False | 是否开启自动分红再投资 |
cash_return_by_stock_delisted | True | 持仓股票退市时,是否按退市价格返还现金 |
auto_switch_order_value | False | 股票下单因资金不足被拒时,是否改为使用全部剩余资金下单 |
validate_stock_position | True | 开启对股票仓位能否满足平仓需求的检查 |
validate_future_position | True | 开启对期货仓位能否满足平仓需求的检查 |
financing_rate | 0.00 | 融资利率(年化) |
financing_stocks_restriction_enabled | False | 是否开启融资可买入股票的限制 |
futures_settlement_price_type | close | 期货逐日盯市结算价:settlement/close |
其账户模型实现在 rqalpha/mod/rqalpha_mod_sys_accounts/position_model.py 与api/子目录下的api_stock.py、api_future.py,分别对应股票与期货的下单语义(含order_target_portfolio等组合调整接口)。
2. sys_analyser:策略分析与报告输出
职责:记录每天的下单、成交、投资组合、持仓等信息,计算风险度指标,并以 csv、plot 图表等形式输出分析结果。系统模块,不可删除。
配置项(见 rqalpha/mod/rqalpha_mod_sys_analyser/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
benchmark | None | 策略基准,用于风险指标计算与收益曲线图绘制。单指数/股票直接填order_book_id,如"000300.XSHG";复合指数传order_book_id与权重的字典,如{"000300.XSHG": 0.2, "000905.XSHG": 0.8} |
record | True | 不输出 csv/pickle/plot 等结果时,可关闭该项以跳过部分数据收集逻辑,提升性能 |
output_file | None | 回测结果输出路径,pickle 格式,含每日净值、头寸、流水及风险指标;不设置则不输出 |
report_save_path | None | 回测报告数据目录,csv 格式;不设置则不输出 |
plot | False | 回测结束后是否绘制收益曲线图;True使用默认模板,或设置模板名称(当前模板:'default'、'ricequant') |
plot_save_file | None | 收益曲线图保存路径,设置后输出为 png 文件 |
plot_config.open_close_points | False | 是否在收益图中展示买卖点 |
plot_config.weekly_indicators | False | 是否在收益图中展示周度指标和收益曲线 |
扩展命令:启用该 Mod 后新增两条命令:
# 根据回测结果 pickle 文件绘制收益曲线图,--hide 隐藏显示窗口,--plot-save 指定 png 输出路径 $ rqalpha plot result_pickle_file_path --hide --plot-save target_plot_img_path # 根据回测结果 pickle 文件生成 csv 报告 $ rqalpha report result_pickle_file_path target_report_csv_path从源码结构看,报告生成逻辑位于 rqalpha/mod/rqalpha_mod_sys_analyser/report 目录,绘图逻辑位于 rqalpha/mod/rqalpha_mod_sys_analyser/plot 目录,支持将分析结果沉淀为 excel 模板(report/templates/summary.xlsx)。
3. sys_progress:回测进度显示
职责:在控制台输出当前策略的回测进度。系统模块,不可删除。
配置项(见 rqalpha/mod/rqalpha_mod_sys_progress/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
show | False | 是否在命令行/终端绘制进度条 |
扩展命令:启用该 Mod 后,可直接通过rqalpha run --progress开启进度条显示:
$ rqalpha run -f strategy.py --progress4. sys_risk:事前风控校验
职责:对订单进行事前风控校验。系统模块,不可删除。
配置项(见 rqalpha/mod/rqalpha_mod_sys_risk/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
validate_price | True | 开启对限价单价格合法性的检查 |
validate_is_trading | True | 开启对标的可交易情况的检查 |
validate_cash | True | 开启对可用资金是否足够满足下单要求的检查 |
validate_self_trade | False | 开启对存在自成交风险的检查 |
各校验器独立成文件,位于 rqalpha/mod/rqalpha_mod_sys_risk/validators 目录(cash_validator.py、is_trading_validator.py、price_validator.py、self_trade_validator.py),作为前端校验器(frontend validator)挂入订单处理链路。
5. sys_scheduler:定时任务
职责:提供定时器,即按照特定周期执行指定逻辑的功能。系统模块,不可删除。
其核心实现在 rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py,策略侧配合scheduler.run_daily/run_weekly/run_monthly等 API 使用,可将策略逻辑按日、周、月周期挂载执行。仓库测试 tests/integration_tests/test_api/mod/sys_scheduler/test_scheduler.py 覆盖了定时任务的触发行为。
6. sys_simulation:模拟撮合引擎与回测事件源
职责:提供模拟撮合引擎及回测事件源等模块,为回测和模拟交易提供支持。系统模块,不可删除。
配置项(见 rqalpha/mod/rqalpha_mod_sys_simulation/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
signal | False | 信号模式:开启后所有通过风控的订单不进行撮合,直接按信号价格产生交易 |
matching_type | current_bar | 撮合方式,随回测频率不同而不同(详见下文) |
price_limit | True | 开启对处于涨跌停状态的证券的撮合限制 |
liquidity_limit | False | 开启对对手盘无流动性的证券的撮合限制(仅在 tick 回测下生效) |
volume_limit | True | 成交量限制:每个 bar 累计成交量不超过该时间段市场总成交量的一定比值(volume_percent);tick 级别则为当前 tick 与上一 tick 市场总成交量之差的一定比值 |
volume_percent | 0.25 | 每个 bar/tick 可成交数量占市场总成交量的比值,在volume_limit开启时生效 |
slippage_model | PriceRatioSlippage | 滑点模型:PriceRatioSlippage(按价格比例)或TickSizeSlippage(按跳);也可传包含包和模块的完整类路径自定义,需继承rqalpha.mod.rqalpha_mod_sys_simulation.slippage.BaseSlippage |
slippage | 0 | 滑点值:对PriceRatioSlippage表示价格比例,对TickSizeSlippage表示跳的数量 |
inactive_limit | True | 开启对当前 bar 无成交量的标的的撮合限制(仅在日和分钟回测下生效) |
management_fee | [] | 账户每日计提费用,格式[("STOCK", 0.0001), ("FUTURE", 0.0001)] |
撮合方式的频率适配,这是回测真实性的关键:
- 日回测:
"current_bar"(以当前 bar 收盘价撮合)或"vwap"(成交量加权平均价撮合); - 分钟回测:
"current_bar"、"next_bar"(下一个 bar 的开盘价撮合)或"vwap"; - tick 回测:
"last"(最新价)、"best_own"(己方最优价)、"best_counterparty"(对手方最优价),以及"counterparty_offer"(逐档撮合)。
这些值在 rqalpha/mod/rqalpha_mod_sys_simulation/mod.py 的parse_matching_type中被解析为MATCHING_TYPE常量,并对频率做合法性校验。值得注意的是,matching_type为空时会根据frequency自动选择:日线/分钟线默认current_bar,tick 默认last。若日线回测中显式设置next_bar,框架会警告"该配置在日线频率下被弃用"并自动回退为current_bar。
扩展命令:启用该 Mod 后,rqalpha run命令新增以下选项:
# 使用信号方式直接按下单价格成交,屏蔽订单细节 --signal # 指定成交滑点,按当前价格的百分比计算 --slippage / -sp # 指定手续费乘数 --commission-multiplier / --cm # 指定撮合的锚定价格及对应方式 --matching-type / --mt注意事项:
- 在 tick 级别回测频率下,开盘集合竞价期间的撮合无视
matching_type设置,一律用last撮合; - 默认情况下,tick 回测使用
DefaultTickMatcher,日频和分钟频率回测使用DefaultBarMatcher。
7. sys_transaction_cost:交易税费
职责:实现股票、期货的交易税费计算逻辑,针对不同市场、不同交易标的差异化计算。
配置项(见 rqalpha/mod/rqalpha_mod_sys_transaction_cost/README.rst):
| 配置项 | 默认值 | 说明 |
|---|---|---|
cn_stock_min_commission | 5 | 股票最小手续费,单位元 |
commission_multiplier | None | 佣金倍率,在默认手续费率基础上按该倍数调整(股票默认佣金万八,期货默认佣金因合约而异) |
stock_commission_multiplier | 1 | 股票佣金倍率 |
futures_commission_multiplier | 1 | 期货佣金倍率 |
tax_multiplier | 1 | 印花倍率,在默认印花税(千分之一,单边收取)基础上调整 |
税费计算的具体逻辑在 rqalpha/mod/rqalpha_mod_sys_transaction_cost/deciders.py,通过实现统一的费用决策器接口,将佣金、印花税、过户费等成本折算进每笔成交。
从文档到实践:一个最小可运行的回测
综合以上内容,一次完整的 RQAlpha 回测只需要三件事:
- 准备策略文件:如 rqalpha/examples/buy_and_hold.py,定义
init与handle_bar两个回调; - 配置回测参数:在
run(config)的base段设置策略文件、起止日期、频率与账户初始资金; - 运行并分析:默认启用
sys_simulation(撮合)、sys_risk(风控)、sys_analyser(分析)、sys_transaction_cost(税费)等系统 Mod,回测结束后由sys_analyser输出净值、风险指标与收益曲线。
如果想要精细控制撮合行为,只需在mod.sys_simulation段覆写matching_type、slippage、volume_limit等参数;如果想屏蔽订单细节快速验证策略逻辑,可开启signal: True或使用--signal参数;如果想观察回测进度,开启sys_progress.show或加--progress参数。
获取帮助
官方文档为使用者提供了三条获取帮助的途径:
- 通过文档索引或搜索功能查找特定问题;
- 在Github Issue中提交 issue 反馈问题;
- 加入RQAlpha 交流群(QQ 群号:487188429)与其他使用者交流。
小结
RQAlpha 的价值在于"核心稳定、外围可换":稳定的事件驱动核心 + 七个职责清晰的系统 Mod + 公开的 Mod Hook 接口,使其既能开箱即用地完成日线/分钟线/tick 级别的回测、模拟与实盘接入,又能让开发者以较低成本替换撮合、数据源、税费等任一环节,或扩展全新的账户、风控、分析能力。本文所涉及的 Mod 管理命令、配置体系与各 Mod 配置项,均可在当前仓库的 docs/source/index.rst、rqalpha/config.yml、rqalpha/mod_config.yml 及各 Mod 的 README 中进一步查阅验证。
- 金融科技
【免费下载链接】rqalpha
A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities
相关推荐
RQAlpha 架构深度解析:事件驱动、Mod 扩展与可替换组件的量化回测框架
RQAlpha 架构深度解析:事件驱动、Mod 扩展与可替换组件的量化回测框架 导读 本文以 docs/claude/architecture.md https
金融科技RQAlpha多品种量化交易框架:股票、期货、基金、债券全解析指南
RQAlpha多品种量化交易框架:股票、期货、基金、债券全解析指南 RQAlpha是一个可扩展、可替换的Python算法回测和交易框架,支持多种证券品种的量化交
金融科技RQAlpha量化交易框架:策略运行的多种方式详解
RQAlpha量化交易框架:策略运行的多种方式详解 引言 RQAlpha作为一款功能强大的Python量化交易回测框架,提供了多种灵活的策略运行方式,满足不同场
金融科技
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考