RQAlpha 项目研究站 · 运行策略

RQAlpha 怎么运行策略:五种方式与参数优先级

官方把「参数配置」从策略代码里剥离出来:同一份策略代码,换启动参数就能变成不同的研究、风控与调优任务。可以走命令行、config.yml、策略内的 __config__,也可以在自己的 Python 程序里用 run_file / run_code / run_func 直接调用——但必须理解优先级,否则会出现「设置了却不生效」。

核心命令:rqalpha run完整参数:rqalpha run -h依据官方 run_algorithm 文档(2026-09 核验)
命令行
rqalpha run …
配置文件
config.yml
策略内
__config__
代码调用
run_file/code/func

依据官方 run_algorithm 文档整理的四种配置入口示意;非官方流程图。

Ways

五种运行方式对照

官方文档按「谁来传参数」区分这几种方式,适用场景不同。

方式写法适合场景注意点
命令行rqalpha run -f 策略.py -s 起 -e 止 --account stock 100000快速试跑、临时改参数、脚本化批量并非所有参数都有命令行选项,特殊的用 -mc 或配置文件补
配置文件当前目录放 config.yml / config.json,直接 rqalpha run固定参数长期复用generate-config 生成模板;模板不含 Mod 配置项
策略内 __config__策略文件里定义 __config__ 字典,框架自动识别自动化测试中给每个策略固定参数官方明确:不建议在策略开发与日常运行中使用
run_filefrom rqalpha import run_file,传策略路径 + config 字典在自己的程序 / Notebook 里驱动回测代码传入的 config 优先级高于 config.yml
run_code把策略源码作为字符串传入策略由程序生成 / 参数化拼装同样会先读当前目录的 config.yml,再被代码参数覆盖
run_func直接传 init / handle_bar 等函数对象函数已定义在当前环境(如 Notebook 交互式研究)函数名符合 API 规范时可直接 run_func(**globals())
Priority

参数优先级:从上到下覆盖

官方专门用警告框强调这一点,配置不生效时先查这里。

层级(高 → 低)来源什么时候会「被覆盖」
1(最高)策略代码中的配置只要策略里写了配置,命令行的同名参数就不起作用
2命令行传参,或 run_file / run_code / run_func 的函数传参会被策略内配置覆盖
3用户配置文件(当前目录 config.yml / config.json会被上面两层覆盖;代码调用时也会先读它
4(最低)系统默认配置所有上层的默认来源;完整默认值见 rqalpha/config.yml
实操建议:调试阶段把参数写在命令行(看得见、改得快),跑通后再固化进 config.yml;策略文件里尽量只保留「策略逻辑相关」的变量(给 --extra-vars 留出可注入的位置)。
CLI

rqalpha run 常用命令行参数

下表为官方文档列出的常用项,完整列表以 rqalpha run -h 为准。

缩写全称作用
-d--data-bundle-path数据包路径(与下载时指定的路径保持一致)
-f--strategy-file策略文件路径
-s / -e--start-date / --end-date回测起止日期(实盘时忽略结束日期)
-a--account账户类型与起始资金,可传多次(股票+期货混合)
-fq--frequency频率 1d / 1m(分钟级需自备数据源)
-rt--run-typeb 回测 / p 模拟交易 / r 实盘交易
-mm--margin-multiplier保证金乘数(期货场景常用)
-l--log-levelverbose / info / warning / error,批量回测时常用 error 降噪
-mc--mod-config设置 Mod 配置项,可传多个
--extra-vars传变量到 context,参数调优的关键(见参数调优页)
Mod options

系统 Mod 带来的扩展参数

开启对应 Mod 后即可使用;需要 -mc 传的项也在其中。

参数所属 Mod作用
-bm / --benchmarksys_analyser基准指数;不设置则没有基准参照
-o / --output-filesys_analyser把回测数据输出到指定文件(常用 .pkl)
-p / --plot--no-plot--plot-savesys_analyser回测结束后画收益曲线;--plot-save 可保存到文件(无图形界面环境适用)
--progress / --no-progresssys_progress命令行显示回测进度条
--short-stock / --no-short-stocksys_accounts是否允许股票卖空
--signalsys_simulation信号模式:不撮合直接成交(用于只看信号)
-sp / --slippage-cm / --commission-multipliersys_simulation滑点与手续费乘数,直接影响回测真实性
-me / --match-enginesys_simulation撮合引擎:current_bar(当前 Bar 收盘价)/ next_bar(下一 Bar 开盘价)
-r / --ridsys_simulation指定回测 ID(rid),用于区分多次回测结果
-mc sys_accounts.auto_switch_order_value Truesys_accounts资金不足时自动使用全部剩余资金下单(官方示例)
撮合引擎怎么选:文档给出的两种引擎里,current_bar 用当前 Bar 收盘价撮合(信号与成交同一根 Bar,偏乐观),next_bar 用下一根 Bar 开盘价撮合(更接近「收盘后决策、次日开盘执行」的真实流程)。切换后收益与回撤通常会有明显差异,务必在报告里写明用哪种。
Troubleshooting

运行排查表

以下都是「配置看似写了、行为却不对」的典型情形。

现象原因处理
命令行参数没生效策略文件里也写了配置(策略内优先级最高),或当前目录存在 config.yml按优先级表定位;先临时移走 config.yml 验证
换了目录跑,读不到数据bundle 路径与运行路径不一致;配置文件在新目录不存在运行时显式传 -d,或在当前目录放 config.yml
没有收益曲线图未加 plot 参数,或缺少图形环境 / matplotlib 后端问题-p;服务器环境用 --plot-save 存图;按安装页 FAQ 配 TkAgg
批量跑时日志刷屏默认日志级别冗余批量任务统一设 log_level: error(官方调参示例就这写法)
结果文件互相覆盖多次回测输出到同一文件名输出文件名带参数(官方示例 results/out-{short}-{long}.pkl),或用 --rid 区分
模拟/实盘启动报错缺少对应数据源与账户实现,或未开启 persist先确认 -rt p/r 的前置条件(数据源、账户);需要断点续跑时再开 persist
FAQ

常见问题

一次回测的最小命令是什么?

官方「10 分钟教程」给的形状是:rqalpha run -f 策略.py -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG,需要看曲线再加 --plot,需要存结果再加 -o result.pkl

配置写在策略里更方便,为什么官方不建议?

官方文档把 __config__ 定位为「自动化测试中给每个策略配置参数」的手段,并明确不建议在策略开发与运行中使用——因为它会覆盖命令行,导致参数不可见、批量调优失效。

run_file 和命令行方式有什么区别?

run_file 是把 RQAlpha 当作库调用:你在自己的 Python 程序里传策略路径与 config 字典,便于和数据处理、并行框架结合;命令行方式适合快速验证与脚本化批处理。两者最终都走同一套引擎。

可以一次跑多个账户吗?

可以。官方参数说明给了股票 + 期货混合策略的写法:--account stock 10000 --account future 20000;配置文件中对应 base.accountsstock / future 两项。

模拟交易与实盘交易怎么开始?

参数上是 -rt p(模拟)与 -rt r(实盘),并支持 pause/resume 持久化(persist)。但官方仓库本身不提供券商通道,实盘接入需要自行扩展或使用生态方案,务必先做小规模验证。

这些参数能保证回测贴近实盘吗?

不能保证。滑点、手续费乘数、撮合引擎、复权口径都会改变结果;把参数写清楚、把假设说明白,比追求「一个漂亮数字」更重要。本站不提供任何收益承诺。

接下来写策略

约定函数、数据查询与下单接口构成策略的主体;看懂这四类函数,就能读懂官方示例策略。