RQAlpha 项目研究站 · 运行策略

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 文档整理的四种配置入口示意;非官方流程图。

Version check

本页依据的版本、来源与实测状态

  • 依据版本release/6.3.0(2026-07-23 发布);仓库默认分支为 master
  • Python 要求requires-python >=3.8(分类器覆盖 3.8–3.14)
  • 本页官方来源docs/source/intro/run_algorithm.rst、rqalpha/config.yml、mod_config.yml
  • 证据等级官方文档与仓库文件(①②级)+ 本机实测(③级,限安装与运行链路)
  • 实测状态安装链路已实测;本页参数与优先级来自官方文档原文核验
  • 旧版本写法4.x 起 --matching-type / --signal / --slippage 已迁入 sys_simulation Mod;--strategy-type 已废弃
Ways

五种运行方式对照

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

方式写法适合场景注意点
命令行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

参数优先级:为什么我设置的参数不生效?

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

层级(高 → 低)来源什么时候会「被覆盖」
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 官方文档列出的常用项,完整列表以 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 带来的扩展参数

在 RQAlpha 里开启对应 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

运行排查表

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

现象原因处理
命令行参数没生效策略文件里也写了配置(策略内优先级最高),或当前目录存在 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
Run

一次完整回测怎么跑:命令、预期输出与落盘

官方「10 分钟教程」把回测要素收敛成六项;下面是 RQAlpha 的最小可用链路——先跑起来,再加画图,最后把结果落盘归档。

回测要素参数写法不写会怎样注意点
数据源路径-d / --data-bundle-path,或配置文件里的 base.data_bundle_path按默认位置找数据包,找不到就读不到数据下载数据包时改过路径的,运行时必须传同一个路径
策略文件路径-f / --strategy-file,或 base.strategy_file没有策略可执行,命令直接报错退出用代码方式启动时,改为传策略路径或策略源码
回测起始日期-s / --start-date取配置文件里的 base.start_date 默认值日期格式 YYYY-MM-DD
回测结束日期-e / --end-date取 base.end_date 默认值实盘(-rt r)会忽略结束日期
起始资金与账户类型-a / --account stock 100000,可传多次该账户没有可用资金,下单会被拒股票期货混合就传两次:--account stock 10000 --account future 20000
基准 Benchmark-bm / --benchmark官方说明:不设置则没有基准参照缺基准时,相对收益类指标没有对照物

从空目录到一份可分析的结果

1. rqalpha generate-config —— 生成配置模板(预期输出:当前目录出现 config.yml,含全部默认值与注释,但不含 Mod 段);
2. rqalpha run -f ./rqalpha/examples/buy_and_hold.py -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG —— 官方教程的最小命令(预期输出:命令行打印回测日志,结束时给出 summary 段的风险收益指标);
3. 在第 2 步命令后追加 --plot —— 回看收益曲线(预期输出:回测结束后弹出图形窗口;无图形界面的服务器改用 --plot-save 收益.png);
4. 再追加 -o result.pkl —— 把结果落盘归档(预期输出:当前目录生成 result.pkl);
5. python -c "import pandas as pd; d = pd.read_pickle('result.pkl'); print(list(d.keys()))" —— 读回来做后续分析(预期输出:total_portfolios、summary、benchmark_portfolios、benchmark_positions、stock_positions、trades、stock_portfolios 七个键);
6. rqalpha plot result.pkl —— 直接对已落盘的结果重新画图,不必重跑回测(该子命令由 sys_analyser 提供)。

把口径和数字一起记下来:同一份 RQAlpha 策略,换撮合引擎(-me current_bar / next_bar)、滑点(-sp)或手续费乘数(-cm)就可能得出不同结论;实验记录里写清这三项,比只写一个收益数字更有用。
Entries

同一件事,八种入口分别怎么写?

官方 run_algorithm 文档给出五种运行方式,再加上显式指定配置文件路径与 IDE 调试,日常落到操作上一共八种写法;它们最终都调用 RQAlpha 同一套引擎。

入口同一件事怎么写(buy_and_hold.py,2016-06-01 → 2016-12-01,股票账户 10 万,基准 000300.XSHG)适合场景注意点
命令行rqalpha run -f ./buy_and_hold.py -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG快速试跑、脚本化批处理并非所有参数都有命令行选项,特殊的用 -mc 或配置文件补
当前目录 config.yml写 base.strategy_file / start_date / end_date / accounts.stock / benchmark,再加 extra.log_level 与 mod.sys_analyser.plot固定参数长期复用运行时自动读当前目录的 config.yml / config.json;模板不含 Mod 段
--config 指定路径rqalpha run --config /path/to/研究.yml研究 / 模拟 / 实盘各存一份配置与「当前目录自动读取」同时存在时,用显式传入的那份
策略内 __config__策略文件里写 __config__ 字典(base / extra / mod 三段)自动化测试里给单个策略固定参数官方明确不建议在策略开发与日常运行中使用;它会覆盖命令行
run_filefrom rqalpha import run_file;run_file("./buy_and_hold.py", config)在自己的脚本或 Notebook 里驱动回测,便于与数据处理、并行框架结合代码传入的 config 优先级更高,但 RQAlpha 仍会先读当前目录的 config.yml
run_codefrom rqalpha import run_code;run_code(code_string, config)策略源码由程序生成或参数化拼装策略以字符串传入,报错定位不如文件方式直观
run_funcrun_func(init=init, before_trading=before_trading, handle_bar=handle_bar, config=config);函数名符合 API 规范时可直接 run_func(**globals())函数已定义在当前环境(如 Notebook 交互式研究)传的是函数对象,改函数名要同步改参数
PyCharm 运行 / 调试Run/Debug Configurations 的 Script 指向 conda 环境里的 rqalpha 入口,Script parameters 填 run -f rqalpha-strategy/test.py -d /Users/you/.rqalpha/bundle -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG断点调试策略、观察每一步变量Windows 没有 bin 目录,解释器要指向 envs\rqalpha\Scripts\python.exe;Python 3.5+ 的入口文件是 Scripts\rqalpha-script.py;先在策略里 from rqalpha.api import * 才有自动补全
三个容易忽略的入口细节:① 即使以代码方式启动,RQAlpha 也会寻找执行目录下的 config.yml / config.json 并加载,只是代码传入的 config 优先级更高;② --resume 只在模拟交易与实盘交易(-rt p / -rt r)下有意义,用于暂停后恢复;③ --enable-profiler 可启动策略逐行性能分析,回测结束会打印每行耗时,适合定位慢在哪一步。
Defaults

配置文件里那些「看着无害」的默认值

用 rqalpha generate-config 生成模板后,多数人只改日期与账户资金。下面这些默认值同样会改变结论,而且改动它们不需要写任何策略代码。

配置项默认值会怎样影响结果注意点
base.end_date2050-01-01忘了改就把回测跑到未来,而数据只到下载日每次显式传 -s/-e,或在策略里写死
base.run_typeb(回测)想跑模拟或实盘要显式改为 p/r结果文件里 run_type 字段会回显实际运行类型
base.frequency1d改成 1m 前必须先有分钟数据开源版本不提供分钟级数据源
base.marketCN开启 HK 后无法交易 A 股任何标的两个市场不能同时交易
base.round_pricefalse限价单价格可能不是最小变动单位的整数倍实盘对齐时建议开;对应的命令行选项为 --round-price
base.auto_update_bundlefalse回测中缺盘前竞价成交量/期货历史参数时不会自动补开它会在回测过程中联网下载数据
base.partial_fill_on_insufficient_cashfalse资金不足时直接放弃下单,而不是尽量成交想模拟算法母单执行过程时再打开
base.capital_gain_tax_rate0默认不计这块费;官方写明后续版本将改为 0.0318跨版本比收益前先确认它
base.futures_time_series_trading_parametersfalse期货回测是否使用历史交易参数只影响期货账户
extra.log_levelinfo排查参数不生效时看不出细节排查阶段用 verbose,跑批量回测时再降回 error
参数不生效时的顺序:先确认你改的是哪一层(策略内 __config__ > 命令行/函数传参 > 用户配置文件 > 系统默认配置文件),再用 rqalpha run --help 核对当前版本里这个选项是否还存在——4.x 起有相当一批参数被移进了 Mod 命名空间。
Measured

当前版本的参数面与文档写法有哪些差异?

本站 2026-10-10 在安装实例上执行 rqalpha run --help,逐项比对了官方文档仓里的写法。下表左边是文档里的写法,右边是当前版本的实际情况——照抄文档容易在这几处卡住。

文档里的写法当前版本实测会怎样表现出来怎么处理
-me / --match-engine(文档「系统内置 Mod Option 扩展」一节)实际选项是 -mt / --matching-type,取值 current_bar | next_bar | last | best_own | best_counterparty | vwap | counterparty_offer照文档写会直接报「No such option」并打印帮助信息一切参数以 rqalpha run --help 为准
--no-plot当前只有 --plot 开关,没有反向开关同样报「No such option」不加该参数;绘图相关选项见帮助信息的绘图分组
-cm / --commission-multiplier仍可用,但已标注 [deprecated];推荐 -scm / --stock-commission-multiplier现在能跑通,升级后有被移除的风险新脚本直接用推荐参数,旧脚本留一次迁移
-smc / --stock-min-commission已标注 [deprecated];推荐 -cnsmc / --cn-stock-min-commission同上同上
--resume在帮助信息里标记为 [DEPRECATED]不会有硬报错,但已不推荐使用改用配置文件或函数传参方式控制
文档未列出的当前可用项--stock-t1/--no-stock-t1、--dividend-reinvestment、--cash-return-by-stock-delisted、--cash-validation/--no-cash-validation、--inactive-limit、--slippage-model、--pit-tax、--management-fee不知道有这些开关时,会用绕路的方式实现同一件事把帮助信息当成版本说明书,升级后看一遍
三个「口径类」开关值得单独记:--stock-t1 决定 T+1 是否建模、--cash-validation 决定资金校验是否参与拒单、--inactive-limit 决定成交量为 0 时是否限制交易。它们的默认值不一定符合你的假设,而关闭校验类开关会让回测结果更乐观。
FAQ

常见问题

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

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

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

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

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

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

可以一次跑多个账户吗?

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

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

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

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

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

接下来写策略

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