# C2-B-confirm2-v1：给定机制练习，不是完整独立研究

全部数字为合成，作者已见全部结果。真实SPY2007—2024价格、公司行动、日历与许可未取得；真实R4受阻，T09前瞻未开始，RISK/RUN独立。本包不能证明Alpha或真实实施准备。

## 文件与无代码练习

- [spec.json](spec.json)：唯一B变体，只把入场改为相邻两个有效月末确认；A规格不改。
- [monthly.csv](input/monthly.csv)：M01—M09都是100，M10—M16依次110/120/90/100/120/130/100；十有效值均线包含当前月。无分配拆股，指数=收盘价是给定条件，不是用指数当原始成交价。
- [days.csv](input/days.csv)：完整合成FIRST/LAST交易日开收盘、公司行动。符号月份不是真实交易日历，教学本地时钟America/New_York。先信号后下一正常开盘；额外延迟是再等一个有效交易日。
- [预判检查点](expected/precheck.csv)、A/B信号表和十二份账本在expected/，先自己填写再打开答案；作者已见情况下称回顾核对，不冒称盲测。
- [summary.csv](expected/summary.csv)：A/B/BH在零/5+5/15+15基点及额外延迟情景下各自完整结果，不把赢家追认为预登记方案。
- [failure-log.json](failure-log.json)：实际缺输入失败与恢复默认路径记录；标准库作者脚本，不是读者工具验收。

用普通表格导入输入，先手填M10十值之和1010/10=101，M11为103。B在M10不买，M11第二次确认才产生持有目标，最早M12-FIRST成交。基础买价120×1.0005=120.06，含佣金上限10000/(120.06×1.0005)，向下到百万分一份得到83.250062；支出9999.99994494186，现金.00005505814。M13卖价90×.9995=89.955，卖出佣金3.744379663605，现金7485.015002604535。

每行保存信号/目标/成交/费用/现金/股数/收盘权益。检查公式现金变化后再估值，不要从已扣费权益再扣同笔费。到M15确认后M16再买57.519504，M17退出，基础B最终5746.199965288255。输入/规则/预期/你的实际输出分别保存，不把预期CSV当自己运行结果。

[作者audit.py](audit.py)只用于作者复算。默认核冻结答案，不重写文件；需Python，但读者不必走此路径。`--write-expected`仅用于有意构造答案，不应为掩盖失败覆盖。CSV可直接编辑，尚未交付无需改源码的独立执行工作簿，也未测读者软件，故完整独立实现R4仍受阻。

[版本清单](manifest.json)采用`SHA256-UTF8-LF`：按UTF-8读取文本、将CRLF统一为LF后计算摘要，不是直接散列原始字节。提交前应按此口径核对文件身份，再进行账本检查；换行变化不应冒充数值变化，修改数据或规则则须另存版本并更新清单。摘要相同不能证明真实数据合法或策略有效。

## 真实取材入口与权限边界

2026-10-29实际打开[发行人SPY页面](https://www.ssga.com/us/en/individual/etfs/state-street-spdr-sp-500-etf-trust-spy)，读到Ticker SPY、交易货币USD、ISIN US78462F1030、NYSE ARCA，及Fund Market Price对Closing Price的定义。仅支持身份与字段定位，不是2007—2024完整OHLC/分配/拆股/日历包。

页面有历史分配与基金资料入口，本次进一步click未成功解析，不能写已下载。公开访问不自动赋予历史数据再分发许可；实际数据来源要另存条款、可用字段、取得时间与修订范围，不能复制未许可商业历史序列。真实读者须自行取得合法全包并用所选工具记录导入/运行/导出，作者不得临时改源码代跑冒充独立完成。

身份页NAV不是市场开盘价，网页Closing Price不能替代所有历史开收盘，现成总回报信号不能再当股价加分红。资料缺时停在缺口记录，别把本包合成数拼成真实历史。

## 边界与读者交接

脚本实际核四边界：九点不发目标；当前M11指数缺失时A保留已持股、B仍现金；十值全相等为现金；M12开盘缺失先不成交、后至下一给定有效开盘处理。新月末先令旧模拟目标过期，券商订单撤销另需真实回执。

真实任务的交接包还需原始许可资料、身份/时区/单位/公司行动处理、冻结版本、工具设置与版本、完整流水、基准、失败/全部尝试、成本和延迟结果、独立重跑步骤。缺一项要写影响及受阻范围。因子路线另需G87/C9/T17，不拿本包代替股票横截面研究。资金与运行门不在本包授予。

## 2026-10-29输入守卫补充

本固定机制包只接受按月唯一、递增且连续的monthly行；每个需要决策的LAST须有对应行，M17仅作收尾执行与估值。整行缺失、重复或乱序直接失败，不把M10与M12拼成相邻确认。信号值缺失应保留该月行、total_return_index留空，继续按原规则清确认计数、不发新目标、保留实际持仓；这与删除整行不同。

这里只支持days.normal_session=1、distribution=0、split_factor=1，以及monthly.cash_distribution=0、split_factor=1；非这些值或字段缺失/无效时入口拒绝，不声称已经实现真实分红拆股或休市处理。未来扩展应另立实现与验证，不能删掉标记让旧结果继续通过。

[标准库回归](test_boundaries.py)覆盖两项缺口及原账本对照，作者命令：

```text
python -B docs/education/investment-research-book/articles/cases/c2-b/test_boundaries.py
python -X utf8 -B docs/education/investment-research-book/articles/cases/c2-b/audit.py
```

不得使用--write-expected掩盖失败；本次修复不改input/expected文件。九点测试夹具使用M02—M10连续九点，仍检查历史不足十点不发目标，不用缺整行夹具混测该条件。清单继续采用SHA256-UTF8-LF文本读入统一换行后校验，清单自身不自哈希。
