回测只有在遵守所模拟市场的规则时才有意义。A 股的规则很具体:当天买入的股票下一个交易日才能卖,涨跌停幅度因板块和股票状态而不同,不同交易所的交易单位也不一样。
我们开发了一个内部 Web 工具,在回测和模拟盘中执行同一套规则,让策略在测试时就面对日后同样的约束。这是供我们自己研究使用的项目,不是客户委托项目,也不构成任何投资建议。
项目概览
- 问题: 通用回测工具常常忽略 A 股交易规则,让策略看起来比实际可能达到的效果更好。
- 做法: 回测引擎和模拟账户共用一套市场规则,每条规则都用通俗的语言写进文档。
- 交付: 一个需要登录的 Web 应用,包含行情、回测、多个模拟账户、策略定时执行、风控和手机通知。
- 可核实的产出: 2026 年 10 月 26 日至 11 月 11 日共 36 次提交,代码库中有 134 个自动化测试函数。
以上是交付数据。我们不公布自己策略或交易的结果,回测结果也不代表未来表现。
本案例中的截图于 2026 年 11 月 11 日截取,来自通过 AKShare 接入真实行情的本地副本。图中的模拟账户是为截图新建的,不涉及真实资金。回测使用一个内置策略的默认参数,只用来展示界面,并不是我们在用或推荐的策略。
先定规则,再写策略
在添加策略之前,我们先写清楚模拟应如何处理每条市场规则,再逐条实现并测试:
- 次日成交: 用当天收盘价算出的信号,在下一交易日开盘价成交,避免回测用到当时不可能知道的信息。
- T+1: 当天买入的股票当天不能卖出。
- 分板块涨跌停: 主板 ±10%,ST 股 ±5%,创业板和科创板 ±20%,北交所 ±30%,新股上市初期另有例外。委托价等于涨跌停价时可能无法成交。
- 分交易所的交易单位: 主板和创业板 100 股整数倍,科创板和北交所的起点和递增单位不同。
- 费用: 有最低收费的佣金、过户费,以及仅在卖出时收取的印花税,包括 2023 年 8 月 28 日的税率调整。
- 历史状态: 数据源提供历史简称时,按当天的简称判断是否为 ST,而不是按现在的名称。
工具也会说明自身的局限。多股策略的股票池取自指数的当前成分股,过去被调出或退市的股票不在其中。这种幸存者偏差通常会让回测收益偏高,文档里明确写出了这一点。
我们做了什么
带本地缓存的行情数据
工具结合一个免费数据源和一个可选的付费数据源,并把下载过的日线缓存在本地数据库里,同样的历史数据不会重复下载。演示模式使用随机生成的数据,不联网也能体验界面。

单股、股票池和 ETF 回测
单股策略包括均线交叉、MACD、RSI、KDJ、布林带、通道突破和买入持有。股票池策略从主要指数成分股中按动量、低波动或短期反转选股。ETF 轮动策略在指数、黄金和债券类基金之间切换。
每次回测都会给出总收益、年化收益、最大回撤、夏普比率、胜率、手续费、年度收益、成交记录和期末持仓,并与基准对比。
如果第一笔成交晚于开始日期,工具会另外给出从第一笔成交起算的一组指标,避免长时间空仓在不知不觉中拉低年化数据。

一只股票上对比全部策略
后续更新增加了对比视图:针对同一只股票、同一时间段,用默认参数把所有单股策略各回测一遍,按总收益排名,并列出基准收益。点击任意一行,就能用这个策略做完整回测并调整参数。页面也注明了过去收益最高不代表以后也最高。股票现在可以按代码或名称搜索,最近搜索和上次的回测设置会在下次打开时保留。

使用实时行情的模拟账户
可以同时运行多个模拟账户。交易时段内按实时盘口撮合,支持限价单、市价单、撤单和当日有效。除权除息日会把分红送转计入持仓。
留有记录的策略托管
回测过的策略可以绑定到模拟账户。收盘后、当天数据更新完毕,工具生成调仓计划;下一交易日开盘后执行:先撤未成交委托,卖出不在目标中的股票,再买入。与目标差距较小时不调整,避免不必要的交易。
只限制买入的风控
每个账户单独设置:单笔买入上限、单只仓位上限、当日亏损达到阈值后停止买入、禁止买入 ST、个股止损,以及账户回撤达到上限后暂停托管、需要人工恢复。风控从不阻止卖出。
为截图准备模拟账户时,一笔 281,088 元的买单因超过 200,000 元的单笔上限被拒绝,提示中写明了这两个金额。这正是这条规则应有的表现。

推送到手机的通知
成交、调仓计划、计划失败、风控事件和每日收盘汇总,可以通过 Telegram 或几种微信推送服务发送。
接入券商之前,先把安全设计好
目前工具只交易模拟账户。设计上,以后接入的真实券商可以实现与模拟盘相同的接口。有一条要求已经写进设计:每一笔真实委托都必须输入交易密码确认,没有关闭这项要求的选项。
测试与维护
代码库包含针对市场规则、数据源、回测引擎、技术指标、策略、模拟盘、风控和托管的自动化测试。最近的修改体现了这些测试要防范的问题:一处修复防止多笔并发买单合计突破仓位上限;另一处让回测按每个历史交易日当时的 ST 状态处理。
这个项目说明了什么
可借鉴的经验并不限于交易。当软件模拟或自动执行一个真实业务流程时,这个流程的规则需要写清楚,在测试环境和正式环境之间共用,并用测试来检验。好的模拟工具也会说明自己在哪些地方仍做了简化。
如果你的团队依赖某个承载重要业务规则的表格或脚本,我们可以帮忙把它变成经过测试的内部工具。了解我们的原型与交付服务,或联系 Storm Nova Labs。