新成员上手报告:一个关于信号、右尾、信任的故事
这不是一份目录,而是一个故事——我们在赌什么、为什么这套策略注定会回撤却依然值钱、我们怎么一个一个把因子筛出来(又拒绝了大多数)、回测版本怎么一步步逼出来、以及最关键的:实盘怎么和回测逐笔对齐,从而把投资人的钱(和信任)一笔笔换进来。读完它,你应该不只是"知道有哪些模块",而是"理解我们为什么这样做"。
00怎么读这份报告
事实 git 可审计历史第一个 commit 是 2025-11-25 7dacc62 “Initial commit from existing project”——「from existing project」说明此前已有一套在跑的项目(最早的 V1 监控思路)。所以:git 前的 V1(2025 秋)只能推断(凡涉及我都标「git 前/推断」);2025-11-25 起的一切可逐条核对。
策略的故事:我们到底在赌什么
01我们在赌什么
每个交易日,期权市场会成交数十万笔单子。其中绝大多数是噪音。但偶尔,某家机构会突然在某只股票上砸下几十万美元、主动买入(ASK)看涨(call)期权——不是慢慢挂单等成交,而是直接吃掉卖方报价。这种行为往往发生在股价大涨之前。
这不是内幕,是信息不对称投下的影子:有人比市场先一步形成了高确信度的方向判断,并用真金白银的期权杠杆下注。UnusualWhales 把这些"异常大单流"实时抓出来卖给我们。我们赌的,就是系统性地把这种"机构主动建仓的影子"捞出来,在它指向的正股上跟一手。
经验 · 为什么是这个切面 原始数据是 call+put、ASK+BID 的全集(294,022 行,见 §04)。我们只取 ASK + call 这一刀——主动买入看涨 = 最干净的看多方向信号。不交易期权而交易正股,是因为正股流动性好、可大额、可复现回测;期权的隐含波动率/时间价值会把"方向对了但赚不到钱"的情况放大。这一刀切下去,剩下的全部工程都是在回答一个问题:这么多 ASK+call 大单,哪些值得跟?(答案就是评分卡 + 因子,见 Part 三。)
02右尾驱动:这个策略的灵魂
如果你只记住这份报告的一件事,记住这个。事实 3 年回测 1,477 笔交易的盈亏分布:
经验 · 这一个事实解释了策略的一切:
- 连续 −15% 止损不是策略坏了,是策略的代价。你想要那个 +136% 的赢家,就必须忍受它来临之前的一串止损。事实 2026-05 的某一周,上周的大赢家 HIMX 没有再出现,账户就眼看着 −8%;然后 5/22 一个 CMPS +13.5%,单票一天就把一周的回撤修回来。
- 为什么严格 −15% 止损、为什么单票仓位上限 15%、为什么同日同票去重、为什么分散持仓——全都是为了"活到大赢家出现":控制每一笔输家的尾部,保证组合不会在大赢家来临前先被一两笔单子打残。
- 我们不靠"高胜率小赢",靠"右尾大赢家 + 复利"。这意味着评估这个策略不能看胜率、不能看某一周——要看它有没有持续捕捉右尾的能力。
03与市场解耦:为什么这是"真 alpha"而不是杠杆
事实 3 年回测,策略与 SPY 的日收益相关性 0.092、市场 Beta 0.17、R² <1%。
- 经验 · 一枚硬币的两面 想要"和大盘不相关",就必须接受时点错配:SPY 涨的时候我们可能在跌(像 5 月那周),SPY 跌的时候我们可能不跌。要分散价值,就得接受这种错配——不能既要解耦、又要"大盘涨我也涨"。
- 事实 这种周/月级别的脱钩,3 年回测里出现过 10 次("SPY 三天≥−1%,策略三天≤−4%"),每 3–6 个月一次;最极端的是 2025-04-09 关税反弹日:SPY +8.58%,策略 −6.28%。脱钩是策略 DNA。
- 事实 年度最大回撤:2023 −5.9% / 2024 −7.6% / 2025 −10.4% / 2026 −7.2%。任何一周 −8% 都落在历史正常区间内。
信号从哪来:数据地基
04数据地基:Strategy_bigopen_10plus.csv
事实 主信号源是单个 CSV:future_v_0_1/database/Strategy_bigopen_10plus.csv(≈91 MB)。「10plus」= 开仓权利金 ≥ $10,000 的期权大单(source_bucket 分 10_20=\$10–20K、20plus=>\$20K)。它不是 UW_Flow_Dumps_..._chunks/ 那批 14 天 dump 分片(那是给 flow 类因子用的另一份,~757 万行)。
| 维度 | 真实分布 | 含义 |
|---|---|---|
| 权利金档 | 20plus 173,281 · 10_20 120,741 | 大单为主(>$20K 占 59%) |
| 类型 / 方向 | call 151,848 / put 142,174 · ASK 145,941 / BID 148,081 | 原始是全集;策略只取 ASK+call |
| 情绪 tags | BULLISH 147,353 · BEARISH 146,669 | 几乎对半(含 🐂/🐻 + 🛍️ASK/🦴BID) |
| 按年 | 2023:32,608 · 2024:81,896 · 2025:110,767 · 2026:68,751 | 2025 信号最密(牛市) |
date+time 无时区列),全链路要 tz_localize('Asia/Shanghai')→tz_convert('America/New_York') 才能和美东盘口对齐——错了就前瞻/错位 4–5 小时。② dte 是下载当日算的,使用必须用 expiry−entry_date 重算。05从一条异常流,到一笔真实交易
这是把"世界观"变成"可执行"的完整链路——也是后面所有版本演进围绕的主轴:
经验 这条链路里,第 ③ 步(底表 base_xy)和第 ④ 步(因子打分)是研究与实盘共用的核心:回测和实盘用同一份因子定义,所以"回测好"才可能"实盘一致"。这正是后面"实盘=回测"(Part 五)能成立的工程前提。
我们怎么筛因子(这是真功夫)
06因子筛选:四阶段漏斗
事实 标准流程固化在 skill /explore-factor 里,每个候选因子都要闯四关,任一关不过即停。判官是「8 核生产基线」(CAGR 105.35% / MaxDD 13.65% / Calmar 7.72 / 1,432 笔,asof0427、1x、窗口必须 2023-04-20→2026-04-27)。
y_2d。过关线:ANOVA p<0.05;最优桶超额收益 >+0.2%;与已有因子(nbp3d/ret_5d/score_raw/stock_price)相关性 |r|<0.4(正交);+1 触发率落在 8%–18%(太稠密=没区分度,太稀疏=没样本)。claude_explore/factors_zlj/ + factor_registry_zlj.py 迭代(主干零污染),但结构必须照抄主干 FactorBase/codex spec builder——这样 Phase 4 通过后整段 PR 迁入主干不用重写,实盘和回测的因子定义不会漂移。这是"实盘=回测"的纪律延伸到研究阶段。07最深的一课:什么是"假的 +pp"
一个因子在回测里让 CAGR +10pp,可能完全是假的。我们被骗过很多次,最后总结出三种"假法"——这是团队最值钱的认知之一:
| 假法 | 表现 | 怎么抓出来 |
|---|---|---|
| ① 收益集中 | +pp 全靠一两笔(top-1 占 64% added PnL),拿掉就崩 | Phase 4 #1 集中度检查(top-5<80%) |
| ② sizing 杠杆假 alpha | 因子没选出新信号,只是把已有高分仓位放大了——是杠杆,不是 alpha | Phase 4 #8 拆 added / boosted / same(added 必须>60%) |
| ③ 数据 bug | 底层 builder 有 bug,"+pp"是数据假象 | codex global-dedup builder(见 §13) |
事实 历史上几乎所有"+pp"因子的真 promote ratio 都不达标——直到 uw_flow_codex_combo_070 第一个拿到 1.19×(+10.89pp / DD −1.01pp / Calmar 9.20,且 Phase 4 关键项全绿)。经验 这条判据的哲学:真因子是"选出了过去会被漏掉的好信号",假因子是"把已有的票换了个理由放大"。
08因子坟场:我们拒绝了什么(以及对抗式验证)
经验 一个团队的成熟度,看它敢不敢枪毙自己做出来的"好结果"。这些否定性结论全部归档在 claude_explore/,避免后人重复踩坑:
| 被枪毙的因子/方向 | 当初多诱人 | 真相 |
|---|---|---|
count_14d_zero | 回测 +pp 漂亮 | FSLY 一个离群点暴露它是假因子,靠单票撑起 |
current_call_low_oi | 加 score_raw==5 条件 +7.34pp | 去掉条件改成纯 +1 因子后 −10.49pp 比基线还差——它是 admission rule,不是因子(alpha 全在边界),应放组合准入层 |
| 整个 V8 探索(83 组矩阵) | 一堆 +pp | 底层 (file_ticker,file_date) 分组 builder 有 dump 窗口 bug → "+pp"几乎都是数据 bug 制造的人工产物。F2 复测后从 +8.63pp 缩到 +2.18pp |
| F2(opening ask spread)全阈值 | +1~3pp | 边际,且 DD 全部变差 ~1pp → 不推荐 |
- dvol 第 10 因子:8 维度 workflow 裁决(real-alpha/plateau/look-ahead/orthogonality/...),结论 SHIP WITH CAVEATS 信心 ~0.80(方向高、绝对幅度低;且发现它删的正是 SPY guard 该拦的低量能信号,收益与 guard 多坏成正比)。
- exit 方式 sweep(35+ 变体):7 个 agent 对抗验证,抓出一个差点漏掉的 look-ahead——gate 必须 on
ex_2td<entry,否则偷看未实现价格。修正后 walk-forward day2-gate 真改进(Calmar 7.63→~10)。
codex_explore/ · minimax_explore/ · claude_explore/ 三个 AI 探索工作区——多智能体是我们的研究方法论,不是噱头。09当前因子清单(评分卡的零件)
事实 全部注册在 factor_registry.py(python3 factor_registry.py list 可看)。每个因子产出整数分项,求和 = score_raw,门槛 min_score=6。生产线从 6 核 → 8 核(8f) → 9 核(9f) → 10 核逐步长出来:
| 因子 | 含义 / 方向 | 属于 |
|---|---|---|
| iv / stock_price / otm / asset_type / rule_hit / time_slot | V7 沿用的可解释核心 6 因子(IV/价格/虚值度/资产类型/规则命中/信号时段) | 核心 6 |
| nbp3d_low | 3 日净买压低分位 → +1(contrarian 抄底;训练只用 STOCK/ADR 防 ETF 外溢) | 第 7(8f) |
| ret_5d_roll_deep | 5 日收益深度回撤(阈值只从 [5,10,15,20,25] 分位选,窄尾防过拟合) | 第 8(8f) |
| rv3d_band_15_30 | 3 日已实现波动率落 [1.5,3.0]×阈值 → +1(双峰:太低噪声、太高反指) | 第 9(v9_2) |
| dvol_10d_low_pen | 10 日 dvol 低 → 惩罚(gating,删低量能负 EV 单) | 第 10(main) |
--start-date 2023-04-20(默认 0310 会凭空少 4–7pp);④ 新因子直接用 V9.1 框架写,别写一次性脚本。回测版本演进史:每一版都在解上一版的痛
10从监控,到评分卡,到可复现流水线
ai_store 的 LLM 动态止盈止损是后来 AI Store 通知链路的源头。经验 · 一句话总线 重心从"找 alpha"逐步转向"让 alpha 可复现、可上线、可对账、可运营、可扩容"。越往后,工程难度不在因子本身,而在"让回测的好,真的变成实盘的好"。
实盘 = 回测:信任的根基
11逐笔对账:实盘没有"漏血"
事实 5/1 上线后,把回测 capital 重置到实盘 4/30 净值、同 V9.1 算法、同窗口、同 daily mark-to-market,两条 NAV 曲线几乎完全重合:
| 节点 | 实盘 4001 | 回测(daily MTM) | 差距 |
|---|---|---|---|
| 5/6 高点 | $988,828 | $987,131 | +0.18pp |
| 5/19 谷底 | $888,690 | $860,877 | 回测更深 −2.66pp |
| 峰→谷回撤 | −10.13% | −12.79% | 同量级(回测预测更深) |
| 4 笔 −15% 止损 | −14.99~−15.50% | −15.09% ×4 | 精确匹配 |
- 事实 入场一致率 ~80–85%(BOTH / LIVE_ONLY / BT_ONLY 三分类对账);CTRI/MEI/TNDM/WRBY 四笔 −15% 止损价位实盘≈回测,差<0.3pp。
- 经验 · 这就是信任的工程 没有"实盘开垃圾票、回测会拒收"的 admission bug,也没有"实盘止损打脸"。每周/每节点出一份逐笔对账报告(
investor_5_22_explain_zlj//investor_0529_update_zlj/),就是把"相信我"变成"你自己看数据"。这是入金(Part 六)能持续进来的根本原因。
12−8% 回撤是 DNA,不是 bug(怎么对投资人讲)
5/14 峰 → 5/19 谷(4 个交易日)策略 −8.2%,SPY 仅 −1.93%——跌幅是大盘 4 倍。表面看像"出事了"。事实 真相:3 个交易日内打掉 3 笔 −15% 止损(MEI/TNDM/WRBY)+ 一批小亏,复利账面 −8%。而这种模式3 年回测出现过 10 次,且当周回测预测的回撤比实盘还要深。
经验 · 给投资人的六句话(直接取自解释报告,是可复用的话术):① 执行 0 误差;② 本周 −8% 是策略特征,历史 10+ 次;③ 弱相关是 feature 不是 bug(Beta 0.17);④ 右尾驱动 = 必然有连续小亏段(前 5% 贡献 110% 总盈利);⑤ 反弹已启动(CMPS +13.5% 单票把组合从 −3.6% 拉回 −1.0%);⑥ 长期画面:3 年年化 ~110%、最大回撤 12.4%,本次在正常区间。
13对齐的敌人:复现陷阱 + 漏单 bug
经验 "回测好≠实盘一致"的差异来源被逐个定位、归档。新人对账时先扣这些已知项,再谈策略:
| 差异来源 | 本质 | 纪律 |
|---|---|---|
| 回测不可复现 事实 | 同一张钉死的 signal_table,一次 121%/12%DD,几小时后 138%/19.6%。两因:① SPY 护卫 fail-open(API key 缺就静默关护卫,12%→19.6% DD);② ret_5d 的 daily_bars 缓存被反复写污染。 | 只信同会话 delta;fast-path 钉死 9f 表只改新因子列。 |
| partial-fill 漏单 事实 | ib_bigopen_v9_1_store.py:2341 Cancelled 分支:limit 单重试到上限后只记已成交量,没 fallback 市价单补足。pos_ratio<0.3 的票几乎都是漏单。 | NAV 差距里"sizing 差异"主因是它,不是算法设计。这次(5/1–5/22)漏单碰巧打在大亏票上净帮 +$15.5k,但下次命中 +30% 大赢家就会显著少赚——是 bug,要修。 |
| 评分分阶段灰度 事实 | 4 月实盘评分按 6→7→8 因子分 5 阶段上线(含 shadow 影子阶段)。 | 对账 4 月必须按阶段切对应信号表,否则前 3 周全是假差异。 |
| 两个数据 bug 事实 | pandas 3.0.1 us/ns 精度(stage1_build.py:872,asof≥5/19 build 全废);UW (ft,fd) 分组窗口 bug(V8 探索全废)。 | 用 _zlj patch 版;新 UW builder 用 codex global-dedup。 |
uw_sparse_ask_dominance_14d/uw_floor50_dom_bid_14d)从 4/20 起全程 fail-open=0(表名拼错 _zljtest 后缀 + cache 没更新)。看到 score=0 别当真实 0,它会让边缘 5–7 分票被误跳。入金 = 投资人信任曲线
accounting/ 与 daily_nav 为准。14从 3 个朋友的 3 万港币,到 130 万美元
事实 资金时间线(accounting/transactions.csv)讲的是一条信任如何建立、加码、又被理性管理的曲线:
15账户即部署单元:清单 / 收益 / 入金出金
bigopen_v4_store)。| port | IB 登录名 | 内部代号 | strategy(实跑) | 币种 | 备注 |
|---|---|---|---|---|---|
| 4001 | merton1994 | WK | bigopen_v9 | HKD | 主基金 |
| 4011 | zjj | zgl | bigopen_v9 | USD | --no-feishu-alert(赠股噪音) |
| 4021 | chenyingwenkai | WKLP | bigopen_v9→v9_1 | USD | --force-guard 半仓(要取钱) |
| 4031 | langpingxu | langping | bigopen_v9_1(10 因子) | HKD | 6/1 起停跑 |
| 4041 | wenjing1228 | WJ | ai_option_store | USD | 测试账户 |
| 4061 | lrh→ustcian2026 | LRH/兰容亨 | bigopen_v9 | USD→HKD | 4/24 兰/徐各入 $35k |
| 4081 | bigopen_v4_jx | jx→金洲 JZ_FUND | — | USD | 已下线/改名(PR #133) |
入金 / 出金 / 净投入(accounting 口径,2/1–4/25) · 收益(5/1 NAV 法)
| 账户 | 入金 | 出金 | 净投入 | 5/1 终值 | NAV | 期间涨跌 |
|---|---|---|---|---|---|---|
| WK | 800,000 | 0 | 800,000 | 940,585 | 1.18775 | +18.78% |
| WKLP | 393,067 | 0 | 393,067 | 213,103 | 0.89826 | −10.17% |
| LRH | 95,593 | 0 | 95,593 | 70,960 | 0.75360 | −24.64% |
| WJ | 10,789 | 0 | 10,789 | 7,911 | — | −3.74% |
| ZLJ | 44,526 | 41,972 | 2,554 | 0 | — | 已清空 |
| 合计 | 1,343,975 | 41,972 | 1,302,003 | 1,232,559 |
经验 任何跨入金/出金/划转的区间,必须以"划转完成后"为基准重定基再算收益。
three_accounts_report_zlj 就是统一从划转后的 6/2 起算——结论:6/2–6/18 三账户均小亏(动量股回调),merton −5.85% / ustc −3.59% / chenying −8.63%(chenying 因多日现金为负、杠杆更高跌最多)。--force-guard 半仓 · 下线/改名走 PR + 5/1 做了完整清算复核(应收应付全部归零)。参考与证据
16实盘系统 / Signal Store / 通知 / 安全(速查)
事实 · 数据链路 UW API → Signal Store 采集(每分钟) → RDS PostgreSQL → FastAPI(:8000) → run_strategy.py → IB。DB 关键表:custom_alert_signals(BigOpen 当前用) / positions / trades(flow_id 可溯源)/ daily_nav(收益权威口径)/ strategy_signal_scores。
| 通知通道 | 用途 / 演进 |
|---|---|
| 飞书 | 因子 daily_run 成功/失败 + 开盘 10 分钟无信号预警 + ai_store LLM 群;可按账户 --no-feishu-alert |
| Telegram | PUT 监控 + EOD 综合分析;6/1 起邮件停发迁 TG |
| Make.com webhook | EOD 转发 + LLM 英文 markdown 摘要(限字 + web search) |
ae3820f 发现)。用户已决定:不轮换、不 scrub,接受现状(私有库+内部 DB)→ 不必再提醒。经验:新代码一律从 .env 读凭据,绝不新增硬编码;任何对外产物不含密钥。17探索分支与多智能体(没全进 main 的经验)
| 分支 | 负责人(推断) | 领先/落后 | 主题 | 进 main |
|---|---|---|---|---|
| dev_langping | Langping | 0/9 | 主开发分支,绝大多数 PR 来源 | 已并 |
| dev_zlj | ZLJ | 51/28 | claude_explore 全部探索(因子/对账/投资人报告/容量/overlay) | 部分 |
| dev_v9_lrh | Ian Lan | 3/1 | V9 离线打分 pipeline、rv3d、dvol、ret_5d fail-loud | 主要已并 |
| dev_lrh | Ian Lan | 2/430 | 老分支:fixed-time exit + daily bar API | 历史 |
| codex/minimax-prior-flow-shadow | Codex | 38/59 | minimax 探索 + 实盘 log prior-day flow shadow | 未并 |
| codex/uw-flow-b-floor-factors | Codex | 35/75 | prior-day UW flow 因子(sparse_ask/floor50 来源) | 部分 |
| codex/uw-quiet-option-spike · factor-explore-curated | Codex | 1/28·1/41 | quiet option spike / 因子 curate 笔记 | 未并 |
| codex-worktree | Codex | 13/41 | MegaConsensus public CSV audit | 未并 |
| option_dev_zlj | ZLJ | 14/91 | 期权策略复现包;含"Calmar 13+ 是回测幻觉"sanity cap 修正 | 独立 |
| feat/dvol-10d-low-pen | Ian Lan | 1/1 | dvol 第 10 因子 | 已并 |
事实 claude_explore 重点产物:uw_flow_explore/(因子探索总文档)· capacity_analysis_zlj/(V9 容量 ~$30M,催生 V10)· index_overlay_zlj/("闲置资金配低相关底仓"研究,结论"平均闲置 55% 是均值骗局、可靠闲置≈0")· investor_5_22/0529_zlj/(投资人对账)· exit_sweep_zlj/ · dvol_verify_zlj/ · monday_exit_analysis_zlj/ · strategy_pitch_zlj/。
18经验总结
A证据附录
A.1 PR Ledger(merge commit 重建,#1–#133)
事实 gh 不可用,PR 从 merge commit 重建;绝大多数来自 dev_langping。缺号为未走 first-parent 或关闭未合并。
| 日期段 | PR | 来源 / 主题 |
|---|---|---|
| 2025-11-25 | #1 | Initial commit from existing project |
| 2025-12 | #2–#11 | earnings / RealtimeMonitor / Signal Store 雏形(含 zlj-server #8) |
| 2026-01~02 | #12–#26 | IB 实盘策略 + 采集 |
| 2026-03 | #27–#50 | BigOpen V4→V7 评分卡 |
| 2026-04 | #51–#104 | V9 流水线 + NBP3D/RET5D;含 count-f2(#52,53)/uw-flow-3(#58)/ret5d-fix(#87) |
| 2026-05 | #105–#127 | UW flow 因子 + 在线打分 API + asof;count-14d(#105)、dev_v9_lrh(#126) |
| 2026-05~06 | #129–#133 | CALL/PUT 统一监控 + rv3d;4081→金洲(#133) |
A.2 main first-parent 关键 commit(节选)
A.3 文件改动热点(全分支累计 top)
A.4 已知局限
- 事实 git 前 V1(2025 秋)只能推断,无 commit 可核。
- 事实 PR ledger 由 merge commit 重建,关闭未合并的 PR/评审/描述不可见。
- 事实 账户收益/入金出金来自
accounting/(多处标"待确认",如 12/15 首笔汇率反推 6.52 异常)+daily_nav,非审计报表。 - 事实 回测绝对数字受复现陷阱影响可能漂移;本报告引用"已与同事对齐"的同会话口径。
- 经验 标「经验」者为归纳推断,可能随 regime/代码演进失效——引用前回到对应 commit/文件核对。
A.5 新人"先读 + 先跑"清单
- 读:本报告 →
BIGOPEN_V9_USAGE.md→STRATEGY_BIGOPEN_V7.md→ 给投资人的investor_5_22_explain_zlj/INVESTOR_EXPLAIN.md(感受"实盘=回测"的故事) - 读:
factor_registry.py+ skill/explore-factor(因子方法论)+uw_flow_explore/总文档(含因子坟场) - 读:
accounting/README.md+summary.md(资金会计模型) - 跑:Stage1-1 fetch → 1-2 build → build_factors → run_backtest(
--start-date 2023-04-20),亲手复现 8 核 ≈ 105%