☰
PanWatch 回测内核详解:如何做到无未来函数、T+1 规则与 A 股成本模型一步到位
2026/10/1 15:33:26 网站建设 项目流程

PanWatch 回测内核详解:如何做到无未来函数、T+1 规则与 A 股成本模型一步到位

【免费下载链接】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 盯盘工具,它的策略层内置了一个轻量回测内核:信号次日开盘入场(无未来函数)、A 股 T+1 当日不可卖出、印花税/佣金/过户费/滑点全套成本模型。本文用通俗语言讲清这套回测内核的设计取舍,并标注关键源码位置,帮你在评估 AI 选股信号时心里有底。

回测内核长什么样:4 个文件、零依赖

整个回测模块位于 src/modules/strategy/backtest/,只有 4 个核心文件:

文件职责
engine.py事件式回测引擎:入场、逐日平仓、净值曲线
cost_model.pyA 股交易成本模型(回测与模拟盘共用)
data_adapter.pyK 线数据适配,防未来函数的关键函数
metrics.py年化收益、最大回撤、夏普、胜率等指标

设计上一个很讨喜的取舍:纯 Python 实现,没有任何第三方依赖。K 线采集器是延迟导入的(见 data_adapter.py 的模块注释),所以回测内核和单元测试完全可以离线运行,不会被网络库拖慢。

无未来函数:信号次日开盘才入场

回测最容易翻车的点就是"用当天收盘产生的信号、按当天价格成交"——这是典型的未来函数。PanWatch 的解法很简单:

  • 信号产生日 D,引擎只认D 之后第一个交易日的 K 线,并以该日开盘价成交。核心逻辑在 engine.py 的 run_single;
  • 定位"下一交易日"靠 data_adapter.py 的 first_index_after:返回第一个日期严格大于信号日的 K 线下标,从函数命名到实现都在强调防 look-ahead。

对应测试 test_engine_entry_next_day 用合成数据验证:1 月 1 日发出信号,必须 1 月 2 日开盘价 11 元成交,而不是用信号当天数据。

T+1 规则:买入当天一股都卖不掉

A 股 T+1 意味着当天买入不能当天卖出。引擎把这条规则写死在循环起点上:

  • 逐日检查止损/止盈的循环从入场日的下一根 K 线开始(engine.py L126-L127,注释明确写着"入场日当天不可卖");
  • 同日若止损和止盈都触发,保守判定为先止损(engine.py 模块注释 L8)——宁可低估收益,不夸大结果;
  • 开盘直接跳空越过止损/止盈位时,按开盘价成交(gap 处理),避免假设能以理想价位成交;
  • 持有满最大持有交易日仍未触发,则按收盘价到期平仓。

四种离场原因stop_loss / target / expire / eod都会记录在每笔交易上,方便事后归因。

A 股成本模型:印花税、佣金、过户费、滑点一次算清

很多回测结果"回测赚钱、实盘亏钱",差的就是成本。cost_model.py 的默认参数贴近 2023 年印花税下调后的 A 股散户实际:

项目默认值说明
印花税万 5仅卖出单边收取
佣金万 2.5双边,单笔最低 5 元
过户费0.001%双边(沪深统一)
滑点5 个基点买价上滑、卖价下滑,模拟冲击成本

一个直观的自检用例见 test_round_trip_pnl_deducts_cost:同价买入同价卖出,净结果应为负——因为成本和滑点会吃掉利润。这正是成本模型正确性的"体检题"。

更妙的是复用:模拟盘模块 paper_trading_engine.py 直接共享同一个CostModel,意味着回测口径和模拟盘口径天然一致,不会出现"两个账本"。

绩效指标:回撤、夏普、胜率一站汇总

metrics.py 全是纯函数,输入净值曲线和每笔盈亏,输出一个指标字典:

  • 总收益 / 年化收益:按每年 252 个交易日折算;
  • 最大回撤:峰值到谷底的最大跌幅,衡量"最难受的时刻";
  • 夏普比率:年化、样本标准差口径;
  • 胜率 / 盈亏比 / 平均盈利与亏损:判断策略是"靠胜率"还是"靠盈亏比"。

批量回测时,引擎按平仓日排序逐笔累计已实现盈亏,生成净值曲线(run 方法)。

交叉验证:与信号后验评估同口径

光有引擎还不够,PanWatch 让回测结果可以和既有评估互相印证:

  • 策略引擎本身会对历史信号做后验评估,计算 1/3/5/10 天 horizon 的收益(evaluate_strategy_outcomes);
  • 回测内核提供 horizon_return,逐字复刻同一口径,用于交叉验证两边结果是否一致;
  • 完整测试套件 tests/test_backtest.py 全部使用合成 K 线,不触发网络,随时可跑回归。

如何获取 PanWatch 动手验证

git clone https://gitcode.com/GitHub_Trending/pa/PanWatch

克隆后运行tests/test_backtest.py,即可离线验证"无未来函数、T+1、成本扣减"三大关键行为——这也是评估任何 AI 盯盘项目回测可信度时,最值得先看的三件事。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询