RQAlpha 项目研究站 · 运行策略
RQAlpha 怎么运行策略:五种方式与参数优先级
官方把「参数配置」从策略代码里剥离出来:同一份策略代码,换启动参数就能变成不同的研究、风控与调优任务。可以走命令行、config.yml、策略内的 __config__,也可以在自己的 Python 程序里用 run_file / run_code / run_func 直接调用——但必须理解优先级,否则会出现「设置了却不生效」。
rqalpha run …
config.yml
__config__
run_file/code/func
依据官方 run_algorithm 文档整理的四种配置入口示意;非官方流程图。
五种运行方式对照
官方文档按「谁来传参数」区分这几种方式,适用场景不同。
| 方式 | 写法 | 适合场景 | 注意点 |
|---|---|---|---|
| 命令行 | rqalpha run -f 策略.py -s 起 -e 止 --account stock 100000 | 快速试跑、临时改参数、脚本化批量 | 并非所有参数都有命令行选项,特殊的用 -mc 或配置文件补 |
| 配置文件 | 当前目录放 config.yml / config.json,直接 rqalpha run | 固定参数长期复用 | 用 generate-config 生成模板;模板不含 Mod 配置项 |
策略内 __config__ | 策略文件里定义 __config__ 字典,框架自动识别 | 自动化测试中给每个策略固定参数 | 官方明确:不建议在策略开发与日常运行中使用 |
run_file | from rqalpha import run_file,传策略路径 + config 字典 | 在自己的程序 / Notebook 里驱动回测 | 代码传入的 config 优先级高于 config.yml |
run_code | 把策略源码作为字符串传入 | 策略由程序生成 / 参数化拼装 | 同样会先读当前目录的 config.yml,再被代码参数覆盖 |
run_func | 直接传 init / handle_bar 等函数对象 | 函数已定义在当前环境(如 Notebook 交互式研究) | 函数名符合 API 规范时可直接 run_func(**globals()) |
参数优先级:从上到下覆盖
官方专门用警告框强调这一点,配置不生效时先查这里。
| 层级(高 → 低) | 来源 | 什么时候会「被覆盖」 |
|---|---|---|
| 1(最高) | 策略代码中的配置 | 只要策略里写了配置,命令行的同名参数就不起作用 |
| 2 | 命令行传参,或 run_file / run_code / run_func 的函数传参 | 会被策略内配置覆盖 |
| 3 | 用户配置文件(当前目录 config.yml / config.json) | 会被上面两层覆盖;代码调用时也会先读它 |
| 4(最低) | 系统默认配置 | 所有上层的默认来源;完整默认值见 rqalpha/config.yml |
--extra-vars 留出可注入的位置)。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-type | b 回测 / p 模拟交易 / r 实盘交易 |
-mm | --margin-multiplier | 保证金乘数(期货场景常用) |
-l | --log-level | verbose / info / warning / error,批量回测时常用 error 降噪 |
-mc | --mod-config | 设置 Mod 配置项,可传多个 |
| — | --extra-vars | 传变量到 context,参数调优的关键(见参数调优页) |
系统 Mod 带来的扩展参数
开启对应 Mod 后即可使用;需要 -mc 传的项也在其中。
| 参数 | 所属 Mod | 作用 |
|---|---|---|
-bm / --benchmark | sys_analyser | 基准指数;不设置则没有基准参照 |
-o / --output-file | sys_analyser | 把回测数据输出到指定文件(常用 .pkl) |
-p / --plot、--no-plot、--plot-save | sys_analyser | 回测结束后画收益曲线;--plot-save 可保存到文件(无图形界面环境适用) |
--progress / --no-progress | sys_progress | 命令行显示回测进度条 |
--short-stock / --no-short-stock | sys_accounts | 是否允许股票卖空 |
--signal | sys_simulation | 信号模式:不撮合直接成交(用于只看信号) |
-sp / --slippage、-cm / --commission-multiplier | sys_simulation | 滑点与手续费乘数,直接影响回测真实性 |
-me / --match-engine | sys_simulation | 撮合引擎:current_bar(当前 Bar 收盘价)/ next_bar(下一 Bar 开盘价) |
-r / --rid | sys_simulation | 指定回测 ID(rid),用于区分多次回测结果 |
-mc sys_accounts.auto_switch_order_value True | sys_accounts | 资金不足时自动使用全部剩余资金下单(官方示例) |
current_bar 用当前 Bar 收盘价撮合(信号与成交同一根 Bar,偏乐观),next_bar 用下一根 Bar 开盘价撮合(更接近「收盘后决策、次日开盘执行」的真实流程)。切换后收益与回撤通常会有明显差异,务必在报告里写明用哪种。运行排查表
以下都是「配置看似写了、行为却不对」的典型情形。
| 现象 | 原因 | 处理 |
|---|---|---|
| 命令行参数没生效 | 策略文件里也写了配置(策略内优先级最高),或当前目录存在 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 |
常见问题
一次回测的最小命令是什么?
官方「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.accounts 的 stock / future 两项。
模拟交易与实盘交易怎么开始?
参数上是 -rt p(模拟)与 -rt r(实盘),并支持 pause/resume 持久化(persist)。但官方仓库本身不提供券商通道,实盘接入需要自行扩展或使用生态方案,务必先做小规模验证。
这些参数能保证回测贴近实盘吗?
不能保证。滑点、手续费乘数、撮合引擎、复权口径都会改变结果;把参数写清楚、把假设说明白,比追求「一个漂亮数字」更重要。本站不提供任何收益承诺。