PanWatch 模拟盘引擎原理:按策略信号自动建仓平仓,虚拟账户真实验证
【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK & US markets, powered by TradingAgents. Portfolio insights, real-time alerts & automated reports.|盯盘侠:覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatch
PanWatch 是一款覆盖 A 股、港股、美股的 AI 盯盘工具,其中的模拟盘(Paper Trading)引擎是它的"实战验证场":引擎每 60 秒扫描一次策略信号,自动按信号强度决定买多少、何时卖,用 100 万虚拟资金跑出一套可审计的完整交易记录——不花一分钱,却真实验证你的策略。
一、整体架构:四个文件,一条闭环
模拟盘模块结构非常清晰,全部位于 src/modules/paper_trading/ 目录下:
| 文件 | 职责 |
|---|---|
| paper_trading_engine.py | 核心引擎:建仓、平仓、账户资金核算 |
| paper_trading_scheduler.py | 调度器:60 秒扫描 + 盘前计划 + 日终摘要 |
| paper_trading_notifier.py | 跟单通知:实时推送、盘前计划、日终摘要 |
| api/paper_trading.py | REST API:账户、持仓、交易记录、手动操作 |
它的工作闭环是:
- 信号层:strategy_engine.py 每日对股票池打分,产出
StrategySignalRun信号(含评分、入场区间、止损止盈价、建议持有天数); - 执行层:引擎读到
buy/add信号后自动建仓,之后逐笔盯盘; - 记录层:每笔持仓(
PaperTradingPosition)与成交(PaperTradingTrade)落库,字段定义见 models.py,可完整复盘; - 通知层:建仓/平仓实时推送,每天 09:00 发盘前计划、15:30 发日终摘要。
二、建仓:信号强度决定仓位大小
引擎的建仓逻辑(_check_entries)可以概括为四步:
- 选信号:查询状态为
active、动作为buy/add且带有入场区间的信号,按rank_score降序取前 50 条,同一只股票只保留评分最高的一条,已有持仓的股票直接跳过; - 算仓位:按信号强度分四档分配该市场预算——评分 ≥85 投 25%,≥75 投 18%,≥65 投 12%,其余投 8%(
_position_weight); - 取整手:A 股按一手 100 股向下取整,并逐手扣减,直到含买入费用后仍在可用现金内,买不起最小一手就放弃;
- 定止损:优先沿用信号自带的止损/止盈比例并映射到实际入场价,缺失时兜底为-8% 止损 / +15% 止盈。
分市场资金池:三个市场独立记账
账户默认初始资金 100 万,按A 股 50% / 港股 30% / 美股 20%切分(可在界面调整,比例合计不超过 100%)。每个市场的可用现金是独立的:
市场可用现金 = 总资金 × 分配比例 + 该市场已实现盈亏 − 该市场持仓成本
比例设为 0 的市场会被完全排除,信号再强也不投入。这个"子池"设计保证了不同市场的盈亏互不干扰,界面上也能按市场分别查看收益曲线与最大回撤。
真实感的关键:与回测共用的成本模型
模拟盘不是"理想成交",它和回测共用同一个 A 股成本模型 cost_model.py:
- 佣金:双边万 2.5,单笔最低 5 元
- 印花税:卖出单边万 5
- 过户费:双边十万分之 1
- 滑点:默认 5 个基点,买入价上浮、卖出价下压
也就是说,每一笔盈亏都是扣完全部费用后的净值,与真实交易的资金流向完全一致(买入扣现金、卖出回收现金),这就是"虚拟账户真实验证"的含义。
三、平仓:五条离场规则,优先级从高到低
平仓检查(_check_exits)在每轮扫描中依次判断,命中任意一条即以当前市价成交:
| 优先级 | 离场规则 | 触发条件 |
|---|---|---|
| 1 | 固定止损stop_loss | 现价 ≤ 止损价 |
| 2 | 目标止盈target_price | 现价 ≥ 止盈价 |
| 3 | 移动止损trailing_stop | 浮盈 ≥5% 后,从持仓最高价回撤超 10% |
| 4 | 信号反转signal_reversal | 该股票出现新的sell/reduce活跃信号 |
| 5 | 时间止损time_stop | 持有超过信号建议天数(默认 20 天)仍未触发其他规则 |
第 3 条是最值得玩味的设计:小赚的票先不动,一旦冲高回落超 10% 就锁住利润离场,避免"坐过山车"。而移动止损只跟踪持仓期最高价(highest_price),不会因为盘中抖动误判。
四、调度与通知:像真人交易员一样工作
调度器 paper_trading_scheduler.py 做了两件贴心事:
- 智能扫描:每 60 秒一轮,带 20 秒随机抖动错峰(避免与价格提醒同时写库);A/港/美任一市场在交易时段才扫描,全休市时自动跳过,不空转;
- 定时报告:交易日 09:00 推送盘前计划(当日候选股、入场区间、评分、策略名),15:30 推送日终摘要(总资产、当日平仓盈亏、持仓浮盈、可用资金)。
通知内容会展示盈亏比、策略名称、评分等完整上下文,支持中英文,并可指定推送渠道、发测试通知验证配置(pt_notify_*配置项)。
五、手动操作与数据接口
除了全自动,引擎也留足人工干预空间,对应 API 见 api/paper_trading.py:
- 立即扫描
POST /scan:不用等 60 秒,手动触发一轮建仓+平仓检查 - 手动平仓
POST /positions/{id}/close:按最新市价成交某笔持仓 - 账户开关/重置:一键暂停扫描或清空数据重新开始
- 绩效看板:账户汇总、收益曲线、按策略聚合的胜率与平均持有天数(
GET /metrics)
每一笔成交都带exit_reason标签,事后可以统计"哪种离场方式最赚钱"。相关行为由 tests/test_paper_trading_position.py、tests/test_paper_trading_allocation.py、tests/test_paper_trading_notify.py 等测试用例保障。
六、总结
PanWatch 的模拟盘引擎把"验证一个策略到底赚不赚钱"拆成了可执行的闭环:信号层负责选什么,引擎层负责买多少、何时卖,成本模型负责真实感,调度通知层负责不缺席。它不追求模拟撮合的每一毫秒,而是用 60 秒级轮询 + 完整费用核算 + 五条离场纪律,让你在真金白银之前,先看到一套策略在三个市场里的真实表现——胜率、回撤、每笔离场原因,全部有据可查。
【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK & US markets, powered by TradingAgents. Portfolio insights, real-time alerts & automated reports.|盯盘侠:覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考