tick-stock-panel模拟盘实战:虚拟账户账务模型、撮合规则与策略实盘前验证
【免费下载链接】tick-stock-panelTSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源项目地址: https://gitcode.com/GitHub_Trending/ti/tick-stock-panel
tick-stock-panel(TSP)是一个自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台。其中的**模拟盘(虚拟账户)**模块用虚拟资金 + 真实行情价格做模拟撮合,帮你回答实盘前最关键的那个问题:「我现在敢不敢按这个信号操作?」本文带你完整拆解它的账务模型、撮合规则,以及如何用模拟盘做策略实盘前的最后验证。
为什么回测之后还需要模拟盘?
很多新手以为回测赚钱就能直接实盘,但回测是重放历史,而模拟盘是实时向前:
| 维度 | 回测 | 模拟盘 |
|---|---|---|
| 时间方向 | 重放历史 K 线 | 实时跟随真实行情 |
| 未来函数 | 存在设计风险 | 天然不存在 |
| 验证对象 | 策略逻辑对不对 | 你这个人按不按得动 |
| 产出 | 历史统计指标 | 每日虚拟净值曲线 |
模拟盘与回测互补:先用回测筛掉明显不行的策略,再用模拟盘跑一段时间,确认信号触发的节奏、滑点、心态都符合预期,再考虑实盘。
虚拟账户账务模型:成交台账是唯一事实源
模拟盘的账务设计镜像了财务报表口径,核心原则只有一条:成交台账(fills.jsonl)是唯一事实源,持仓、现金、净值全部可以由台账重放推导;任何修复动作都以「追加记录」表达,绝不允许直接改持仓文件。
六个核心概念一张表看懂:
| 概念 | 说明 |
|---|---|
| 账户 Account | 初始虚拟资金 + 费用参数 + 状态(active/frozen) |
| 订单 Order | 买/卖意向,支持手动下单与规则自动触发 |
| 成交 Fill | 订单的实际成交,append-only 台账,每行一笔 |
| 持仓 Position | 由台账推导物化(均价、可卖数量),可随时重建 |
| 净值 NAV | 现金 + Σ(数量 × 市价),收盘定版、盘中估算 |
| 回合 Round-trip | FIFO 配对的开→平周期,用于胜率/盈亏比统计 |
数据存储目录结构清晰、独立可删:
data/paper/accounts/{account_id}/ account.json # 账户与费用参数 orders/order_*.json # 订单(pending / filled / cancelled / expired) fills.jsonl # 成交台账(append-only) positions.json # 物化持仓(可由台账重建) nav/daily.jsonl # 每交易日定版净值 + 沪深300基准 auto_rules/*.json # 自动跟单规则关键口径都写在域模块头部注释里,价格一律使用不复权 raw 价(与真实交易一致)。费用参数与回测引擎 engine.py同名同默认值,一份心智两边通用:
- 佣金
commission_pct:双边万 2.5,最低 5 元 - 印花税
stamp_tax_pct:仅卖出,千 1 - 滑点
slippage_bps:默认 5,买入向上滑、卖出向下滑(始终朝不利方向)
实现见 paper.py 的默认常量与 apply_slippage 滑点函数。
完整撮合规则清单:这些细节决定了模拟盘可信度
模拟盘的可信度来自撮合规则的严谨程度。TSP 把 A 股交易中容易踩坑的规则全部建模,且每条都有测试覆盖:
订单类型与时点
| 订单类型 | 撮合口径 |
|---|---|
| 即时市价单 | 盘中由行情轮询钩子按最新快照价 + 滑点成交;非交易时段下单自动转次日开盘单 |
| 次日开盘单 | 次一交易日raw_open成交 + 滑点 |
| 当日收盘单 | 盘后管道按raw_close成交 |
必须知道的 A 股规则建模
- T+1:当日买入份额次日方可卖出,日终结算时解锁可卖数量
- 百股取整:买入数量必须是 100 股整数倍;资金不足按可用现金向下取整到百股,不足一手直接拒单
- 涨跌停:触及涨停价的买单 / 跌停价的卖单默认拒单并留痕(expired);账户开启「排队」选项后转为次日重试,连续顺延超过 3 个交易日自动过期
- 停牌 / 缺行情:无法取价就不成交,按顺延规则处理——绝不臆造成交价(金融数据错误原则)
- 除权:日终结算检测除权因子,持仓数量乘因子、成本除因子,并记一条
corp_action台账,保证净值曲线连续 - 撤单:仅 pending 状态可撤;已成交不可逆,只能反向平仓
- 风控:持仓标的数上限 50 只防误操作,不提供杠杆;账户冻结后拒绝新订单
盘后结算挂在每日管道中(daily_pipeline.py 的paper_settle阶段),具备幂等性——重跑同一交易日不会重复成交,非交易日不撮合不结算。撮合口径的逐条测试在 test_paper_trading.py 中,包括佣金最低 5 元、印花税仅卖出、滑点方向不利、分板块涨跌停幅度(主板 10% / 创业板·科创板 20% / 北交所 30%)等。
自动跟单:让策略替你下单
手动跟单只是起点。TSP 的 paper_auto.py 提供自动跟单规则(V2),把「信号 → 订单」链路自动化:
- 跟谁:指定某个策略 ID 或某个监控/信号规则 ID
- 仓位:固定金额,或账户权益的百分比(
pct_equity,上限 100%) - 订单类型:即时 / 次日开盘 / 当日收盘
- 冷却去重:同规则同标的最近一次自动下单后 N 个交易日内不再触发(默认 5 日)
触发链路复用监控中心既有事件通道:行情钩子产出规则事件 → 自动生成订单 → 所有校验(账户冻结 / 资金 / T+1 / 涨跌停)与手动下单完全一致。成交事件还会走监控中心既有的 SSE、语音播报、飞书推送通道,前端无需新管道,你的手机能像收到真实成交提醒一样收到模拟盘成交。
统计口径与回测对齐:实盘前的最终验证
模拟盘跑起来后,真正有价值的是它的统计页签——口径与回测报告完全一致,降低理解成本:
- 回合配对:FIFO;胜率 = 盈利回合数 / 总回合
- 盈亏比:平均盈利 / 平均亏损
- 最大回撤:基于收盘定版净值序列
- 基准对比:沪深300(000300.SH)同期归一化,前端净值曲线双轴对比
推荐的实盘前验证流程:
- 回测通过(总收益、夏普、最大回撤达标)
- 开一个模拟账户,手动或自动跟单信号跑 1~3 个月
- 对比模拟盘实际净值曲线与回测预期:滑点、顺延拒单、T+1 限制带来的偏差有多大
- 检查回合明细:信号触发节奏是否符合预期,有无频繁打脸
- 偏差在可接受范围内 → 小规模实盘
快速上手
整个模块开箱即用,前端入口在 Paper.tsx(侧边栏「模拟盘」),API 薄壳见 api/paper.py。上手路径:
- 初始化向导创建账户:填初始资金,费用参数保持默认即可
- 在下单面板输入代码 + 数量/金额,选择订单类型
- 下单面板同时嵌在个股分析页与自选行内的「虚拟买入」按钮
- 盘后自动结算,次日即可看到定版净值与回合统计
延伸阅读:完整设计方案见 docs/paper-trading-plan.md,涵盖目标与非目标、API 契约、测试矩阵与分期规划;多账户数据隔离、旧数据自动迁移等细节在 paper.py 模块注释中。
模拟盘不接券商、不做实盘下单、不提供任何资金通道——这正是它值得信任的原因:它只回答一个问题,而这个问题值得在动真钱之前认真回答。
【免费下载链接】tick-stock-panelTSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源项目地址: https://gitcode.com/GitHub_Trending/ti/tick-stock-panel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考