YouthQuant-AI · 期权异常流量化交易系统

新成员上手报告:一个关于信号、右尾、信任的故事

这不是一份目录,而是一个故事——我们在赌什么、为什么这套策略注定会回撤却依然值钱、我们怎么一个一个把因子筛出来(又拒绝了大多数)、回测版本怎么一步步逼出来、以及最关键的:实盘怎么和回测逐笔对齐,从而把投资人的钱(和信任)一笔笔换进来。读完它,你应该不只是"知道有哪些模块",而是"理解我们为什么这样做"。

仓库 github:xulangping/youthquant-ai git 起点 2025-11-25 commit 789(main 146) PR #1–#133 生成 2026-06-22

00怎么读这份报告

两个贯穿全文的标签 事实 来自 git / 代码 / 数据文件 / 对账产物,可逐条复核。  经验 是我们对事实的归纳、推断与"下次怎么做"——是故事的"为什么",不是原始记录。

事实 git 可审计历史第一个 commit 是 2025-11-25 7dacc62 “Initial commit from existing project”——「from existing project」说明此前已有一套在跑的项目(最早的 V1 监控思路)。所以:git 前的 V1(2025 秋)只能推断(凡涉及我都标「git 前/推断」);2025-11-25 起的一切可逐条核对

Part One

策略的故事:我们到底在赌什么

先讲清楚这套策略的"世界观"。不理解这三节,后面的因子、回测、对账都只是技术细节。

01我们在赌什么

每个交易日,期权市场会成交数十万笔单子。其中绝大多数是噪音。但偶尔,某家机构会突然在某只股票上砸下几十万美元、主动买入(ASK)看涨(call)期权——不是慢慢挂单等成交,而是直接吃掉卖方报价。这种行为往往发生在股价大涨之前。

这不是内幕,是信息不对称投下的影子:有人比市场先一步形成了高确信度的方向判断,并用真金白银的期权杠杆下注。UnusualWhales 把这些"异常大单流"实时抓出来卖给我们。我们赌的,就是系统性地把这种"机构主动建仓的影子"捞出来,在它指向的正股上跟一手。

用期权大单的方向信息,做正股的短线动量——不交易期权本身(太贵、流动性差、theta 每天吃肉),而是在正股 / ADR / ETF 上做多,固定持有约 2 个自然日,−15% 止损。

经验 · 为什么是这个切面 原始数据是 call+put、ASK+BID 的全集(294,022 行,见 §04)。我们只取 ASK + call 这一刀——主动买入看涨 = 最干净的看多方向信号。不交易期权而交易正股,是因为正股流动性好、可大额、可复现回测;期权的隐含波动率/时间价值会把"方向对了但赚不到钱"的情况放大。这一刀切下去,剩下的全部工程都是在回答一个问题:这么多 ASK+call 大单,哪些值得跟?(答案就是评分卡 + 因子,见 Part 三。)

02右尾驱动:这个策略的灵魂

如果你只记住这份报告的一件事,记住这个。事实 3 年回测 1,477 笔交易的盈亏分布:

前 5% 交易(73 笔)累计盈利
110%
= $48.25M,超过全部总盈利
其余 95% 交易(1,404 笔)
−$4.7M
加起来是净亏的
最大单笔
+136%
胜率 56% · 平均赢家 +5.27% / 输家 −3.85%
我们的钱,几乎全部来自极少数大赢家。剩下 95% 的交易合起来是亏的。

经验 · 这一个事实解释了策略的一切

所以——回撤是数学,不是事故一段时间没有大赢家 + 几笔 −15% 止损叠加 = 账面必然回撤。这是右尾分布的数学结构决定的,不是"实盘出 bug 了"。这也是我们给投资人解释回撤时的第一句话。

03与市场解耦:为什么这是"真 alpha"而不是杠杆

事实 3 年回测,策略与 SPY 的日收益相关性 0.092、市场 Beta 0.17、R² <1%

市场只能解释策略不到 1% 的波动。这不是 bug,是我们的目标:做 SPY 的差异化 alpha,而不是 SPY 的杠杆代理。
Part Two

信号从哪来:数据地基

策略的世界观要落到一份真实的数据上。这是整套系统最关键的东西——一切从这份 CSV 长出来。

04数据地基:Strategy_bigopen_10plus.csv

事实 主信号源是单个 CSV:future_v_0_1/database/Strategy_bigopen_10plus.csv(≈91 MB)。「10plus」= 开仓权利金 ≥ $10,000 的期权大单source_bucket10_20=\$10–20K、20plus=>\$20K)。它不是 UW_Flow_Dumps_..._chunks/ 那批 14 天 dump 分片(那是给 flow 类因子用的另一份,~757 万行)。

信号总行数
294,022
每行 = 一笔期权大单异常流
时间覆盖
2023-03-10 → 2026-05-30
回测正式起点固定 2023-04-20
不同标的
3,125
SPXW/SPY/QQQ/MSTR/NVDA…
列数
37
价格/希腊字母/IV/OTM/tags/来源
维度真实分布含义
权利金档20plus 173,281 · 10_20 120,741大单为主(>$20K 占 59%)
类型 / 方向call 151,848 / put 142,174 · ASK 145,941 / BID 148,081原始是全集;策略只取 ASK+call
情绪 tagsBULLISH 147,353 · BEARISH 146,669几乎对半(含 🐂/🐻 + 🛍️ASK/🦴BID)
按年2023:32,608 · 2024:81,896 · 2025:110,767 · 2026:68,7512025 信号最密(牛市)
事实 · 两个最容易毁掉结果的字段① 时间是北京时间date+time 无时区列),全链路要 tz_localize('Asia/Shanghai')→tz_convert('America/New_York') 才能和美东盘口对齐——错了就前瞻/错位 4–5 小时。dte 是下载当日算的,使用必须用 expiry−entry_date 重算。

05从一条异常流,到一笔真实交易

这是把"世界观"变成"可执行"的完整链路——也是后面所有版本演进围绕的主轴:

① 原始大单(ASK+call) → ② 资产类型标准化(正股/ADR/ETF,剔除 INDEX) → ③ 分钟线对齐算 entry/exit + y_2d(底表 base_xy)
→ ④ 多因子评分卡 score_raw → ⑤ OTM 5%–50% 硬准入 + min_score≥6 → ⑥ 组合引擎(真实杠杆 + SPY 护卫 + 去重 + 仓位上限)
→ ⑦ IB 下单(正股做多,−15% 止损,~2 自然日持有) → ⑧ 持仓/成交/净值落库(RDS) → 对账

经验 这条链路里,第 ③ 步(底表 base_xy)和第 ④ 步(因子打分)是研究与实盘共用的核心:回测和实盘用同一份因子定义,所以"回测好"才可能"实盘一致"。这正是后面"实盘=回测"(Part 五)能成立的工程前提。

Part Three

我们怎么筛因子(这是真功夫)

"哪些大单值得跟" = 因子的工作。但找一个真因子极难——大多数候选都是假的。这一部分讲我们的方法论,和那些被我们亲手枪毙的因子。

06因子筛选:四阶段漏斗

事实 标准流程固化在 skill /explore-factor 里,每个候选因子都要闯四关,任一关不过即停。判官是「8 核生产基线」(CAGR 105.35% / MaxDD 13.65% / Calmar 7.72 / 1,432 笔,asof0427、1x、窗口必须 2023-04-20→2026-04-27)。

Phase 1
单因子分层检验。把因子值分桶,看每桶的 y_2d。过关线:ANOVA p<0.05;最优桶超额收益 >+0.2%;与已有因子(nbp3d/ret_5d/score_raw/stock_price)相关性 |r|<0.4(正交);+1 触发率落在 8%–18%(太稠密=没区分度,太稀疏=没样本)。
Phase 2
信号层对比。加入因子后,它能不能把 score≥6/7 的边缘信号"提拔"出真正值得交易的票?
Phase 3
8 核组合回测(关键判官)。vs 基线 105.35%,达标线:CAGR ≥+3pp、MaxDD ≤+1pp、Sharpe≥5.5、Calmar≥6.5,且 2026 不退化。注意 base8 污染陷阱:含 rolling 因子 build 会因 warmup drop 把基线从 1432 行缩到 1238、CAGR 掉到 94.6——测静态因子要单独干净 build。
Phase 4
8–9 维度严格审视(防过拟合 / 防伪装)。≥7 项绿 + 关键项全绿才算"健康因子":PnL 集中度(top-5<80%)、中位回报、真 promote ratio≥0.9、季度稳定性>70%、2026 trade-level、阈值平台、触发率、sizing 杠杆贡献(added>60%)、扩量分布。
经验 · 为什么探索都在 claude_explore/ 里、且"与 main 100% 同构"新因子先在 claude_explore/factors_zlj/ + factor_registry_zlj.py 迭代(主干零污染),但结构必须照抄主干 FactorBase/codex spec builder——这样 Phase 4 通过后整段 PR 迁入主干不用重写,实盘和回测的因子定义不会漂移。这是"实盘=回测"的纪律延伸到研究阶段。

07因子合格性检验:一套完整的"电池"

这是团队最值钱的方法论,也是新人最该吃透、能直接上手照做的部分。事实 它固化在 skill /explore-factor,并在 LRH(兰容亨 / Ian Lan)的每一份因子 PR 报告里逐项实操——reports/nbp3d_factor_exploration.mdret_5d_rolling_factor_exploration.mduw_directional_factor_unified_evaluation.md 都是活模板。核心只有一个问题:这个 +pp 是真 alpha,还是过拟合 / 伪装 / 单年异象? §06 是流程,下面 9 关是判据电池——任一关塌了就毙。

关 1
经济直觉先行。能不能用一句话说清"它为什么能预测收益"?说不清 = data mining,停。真实例:nbp3d_low = "前几天冷门、没人抢的合约,出大单更纯净";ret_5d_low = "急跌抄底";bear_A_tk = "全 ticker 看跌氛围 → 反转入场"。
关 2
方向 + 打分模式都要试,按"四年全改善 + 不误杀"选。真实例:nbp3d 选 low(4 年 Calmar 全升)弃 high(2024 MDD 恶化近 4pp);选 binaryternary——ternary 在 2024 主动踢掉 12 笔胜率 58% 的信号(误杀),binary 不扣分(2024 收益 44.7% vs 35.1%)。
关 3
先确认数据没 bug——算错的因子会凭空造 alpha。真实例:nbp3d 早期按 (ticker, 日) 聚合没分 expiry → ratio 失真,修成合约级聚合;UW flow 的 (ft,fd) 分组 dump 窗口 bug 让整轮 V8(83 组)的 +pp 作废 → 新 builder 必须 codex global-dedup。
关 4
训练池 = 可交易池。滚动阈值只用 STOCK/ADR 训练,不混 ETF——ETF 有日内到期、流量结构不同,混进去会把"低分位"边界往 0 压、污染阈值("分析池与训练池不对齐 = 用的不是同一分布的分位数")。nbp3d / ret_5d 都加了 training_asset_types=(STOCK,ADR)
关 5 ★
搜索空间要窄;看 percentile,不看 ratio。自适应阈值候选越多越易过拟合。最经典的 ret_5d Deep vs Wide:Wide(p10–90) 让算法乱挑 → 阈值 median 漂到 −1%,"急跌抄底"退化成"任何下跌都 +1",2023–24 实际选 p90 ≈ "恒 +1"蹭牛市 beta;Deep(p5–25) 强制留在深跌区,语义恒定。诊断铁律:看每天选中的 percentile 分布——Deep std=7(87.9% 相邻日持平),Wide std=36(U 型双峰、70% 挤在两端、大跳频率 3.5×)。这是最干净的过拟合物证。
关 6
增量归因:是"捞回新好信号"还是"放大老仓位"?把 +PnL 拆成 新增 / 被挤掉 / 仓位放大。真实例:nbp3d binary +$303 万 = 新增 82 笔(捞回原本差 1 分的)+$222 万 + 挤掉 21 笔 −$71 万 + 仓位放大 +$152 万。若 +pp 主要来自"仓位放大"或集中在 top-1 笔(拿掉就崩)→ 是 sizing 杠杆假 alpha,不算因子。
关 7 ★
稳健性电池:drop-2025 / trim-5 winners / 分年 / t-stat。alpha 不能靠单年或单票。真实例(uw_directional 统一评估):sparse-bear 全样本 +0.289 / t=2.80 看着强,剔除 2025 后塌到 +0.058 / t=1.01 失去显著性 = 2025 异象;而 bear_A_tk +0.117 剔除 2025 反而升到 +0.152、trim-5 后 t=3.91,所有测试都过才是真因子。
关 8
简单优于复杂;绝不"按分桶加分"。每加一个约束 / 分桶都在扩大搜索空间、让噪声像信号。真实例:sparse[1,2] + max_share≥0.70 约束没带来真 alpha、反增 2025 依赖 → 判定"约束本身就是过拟合产物";"按 score=5 / ≥6 桶分别加分"的建议被撤回(那是 admission rule 不是因子,见 §08)。
关 9
主动证伪自己("打脸"文化)。做出好结果后,第一件事是攻击它。真实例:nbp3d 的 lag_1week "+6pp 年化"经分解发现 57% 来自单笔 SMCI +$179k 的边界运气,且 2026 三版完全一致 → 推翻"降噪"假说、恢复 no_lag。经验沉淀:"分年均值的改善可能来自单笔暴击;评估 A/B 必须拆解 仓位复利 × 独有交易 × 对手独有交易"。
最后一道闸 + 给新人的接入方式通过上面电池后,再跑 Phase 4 的 8–9 维度健康度(PnL 集中度 top-5<80%、季度净正>70%、sizing added>60%…)+ 对抗式多智能体证伪,产出 ship-with-caveats + 信心分数(如 dvol 0.80),而不是"能涨就上"。经验 · 真 promote ratio(最关键一条):因子新提拔的信号(5→6 分)必须和原本就 6 分的一样好(ratio ≥ 0.9)。历史上几乎所有"+pp"都不达标,直到 uw_flow_codex_combo_070 第一个拿到 1.19×。
新人直接接入:拿一个候选因子,跑 /explore-factor,对照上面 9 关逐项过——这就是我们筛因子的全部标准。

08因子坟场:我们拒绝了什么、为什么

经验 一个团队的成熟度,看它敢不敢枪毙自己做出来的"好结果"。这些否定性结论全部归档在 reports/claude_explore/,避免后人重复踩坑。每一个都是被上面某一关拦下的——看"哪一关塌了"比看结论更有用

被毙的因子 / 方向当初多诱人真相(哪一关塌了)
ret_5d Wide rolling (p10–90)CAGR 107% > Deep 的 101%关 5:percentile U 型双峰,2023–24 退化成"恒 +1"蹭牛市 beta——那一年它根本不是同一个因子
sparse 系列(sparse_ask / B、C 变体)+0.289 / t=2.80(最高)关 7:drop-2025 塌到 +0.058 / t=1.01,是 2025 单年异象;"加 sparse 约束"本身就是过拟合产物
expiry-match bear 全系列关 1/7:全样本已是负贡献——限定到同一合约链后 bear 不再代表"反转",沦为双向消息混杂的噪声
nbp3d lag_1week+6pp 年化关 9:57% 来自单笔 SMCI 边界运气,2026 三版完全一致 → 恢复 no_lag
count_14d_zero回测 +pp 漂亮关 6:FSLY 一个离群点撑起,拿掉就崩 = 假因子
current_call_low_oiscore_raw==5 条件下 +7.34pp关 8:去条件改纯 +1 因子后 −10.49pp 比基线还差——是 admission rule 不是因子,alpha 全在边界
整轮 V8 探索(83 组矩阵)一堆 +pp关 3:(ft,fd) 分组 dump 窗口数据 bug,+pp 是人工产物。F2 复测从 +8.63pp 缩到 +2.18pp
F2(opening ask spread)全阈值+1~3ppPhase 3 未达标:边际且 DD 全部变差 ~1pp
事实 · 对抗式多智能体验证(重要因子上线前的标配)重要因子不靠"能涨就上",而是用多智能体对抗式证伪给出"信心分数 + ship-with-caveats":
  • 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.pypython3 factor_registry.py list/show <key> 可看每个因子的打分表)。每个因子对一条信号产出一个整数分项,求和 = score_raw,门槛 min_score=6。生产线从 6 核 → 8 核(8f) → 9 核(9f) → 10 核逐步长出来。

理解评分卡的关键:它其实在回答一个问题——"一个高质量的 ASK+call 大单信号,长什么样?" 核心 6 因子刻画"信号本身的质量",后加的滚动/gating 因子补上"时机与环境"的边际。下面逐个讲"它衡量什么 + 为什么这么打分"。

核心 6 因子 — 刻画"信号本身的质量"(V7 沿用,静态打分,−2~+2)

因子打分表衡量什么 & 为什么这么打(直觉)
iv
隐含波动率%
≤25→−2
(25,50]→+1
(50,100]→+2
>100→−1
市场给这个标的定价了多大的预期波动中高 IV(50–100)最好(+2)——说明确实有大事在酝酿、机构愿意为波动付费;IV 太低(<25,没人预期会动)说明信号"师出无名",IV 太高(>100,彩票/暴雷区,往往已经异动过或太贵)都扣分。
stock_price
股价$
≤20→+2
(20,50]→+1
(50,150]→−1
(150,500]→−2
>500→0
越便宜的股票,% 涨幅空间越大,一笔大单押在它身上的信息含量也越高。低价股(≤$20)+2(右尾大赢家最可能从这里出);大盘高价股按 % 算动得少,所以扣分。这直接服务于"右尾驱动"——我们要的是能翻倍的票。
otm
虚值度%
≤2→−2
(2,5]→−1
(5,10]→0
(10,20]→+2
(20,50]→+1
>50→0
准入[5,50]
这笔期权离当前股价多远甜区是 10–20% OTM(+2):够远,是真方向性押注而不是近月对冲/做市;又不至于太远而沦为纯彩票。太近(ATM,可能只是对冲)和太远(>50%,赌博)都不给分。OTM 还兼任硬准入:只有 5–50% 的信号才进可交易池。
asset_type
资产类型
STOCK/ADR→+1
ETF_ETN→−1
单只股票的期权流带的是个股特有(idiosyncratic)信息——有人对这家公司有判断;而 ETF 上的大单多是对冲/宏观仓位,方向信号不干净。所以个股 +1、ETF −1(实盘本来也只交易 STOCK/ADR)。
rule_hit
规则命中
rule 非空→+1
rule 空→−1
UW 会给每条流打一个 rule 模式标签(它自己的形态识别)。被标了 rule = 落入某个被平台识别的已知形态,比没有任何标签的"裸流"更可能是真信号,而非随机噪音。
time_slot
信号时段(美东)
open 09:30–10:30→+1
close 15:00–16:00→+1
盘中→0
一天里开盘和收盘的流最有信息:开盘 = 对隔夜消息、新形成的高确信度的即时反应;收盘 = 机构为次日/隔夜布局。盘中(10:30–15:00)多是算法拆单和噪音,给 0。

后加的 4 个因子 — 补上"时机与环境"的边际(滚动 IC / gating)

这 4 个不是静态分箱,而是按交易日滚动、用 IC(信息系数)自动找最优阈值、严格无前瞻(训练窗口 [D−7−90, D−7),留 7 天 gap 让 2 日收益完全 settle)。它们回答的不是"信号好不好",而是"现在这个时点、这个波动环境,适不适合下手"。

因子(属于)打分逻辑衡量什么 & 为什么(直觉)
nbp3d_low
第7 · 8f
ratio=(看多权利金−看空权利金)/总
看多={call吃ASK + put吃BID}
ratio 低 → +1(滚动阈值)
过去 3 天这只票的净买压"还不高"时,当前这条 ASK+call 反而是好信号。为什么?低 ratio = 最近还没被大量看多流挤过,说明我们抓到的是"第一波/早期布局",而不是追在已经拥挤的交易尾巴上。这是 contrarian / 抢早入场的逻辑(训练只用 STOCK/ADR,防 ETF 的日内到期外溢污染阈值)。
ret_5d_roll_deep
第8 · 8f
ret_5d=close[T-1]/close[T-6]−1
近 5 日跌得越深 → +1
阈值只从 [5,10,15,20,25] 深分位选
大单 + 标的刚刚深度回调 = 拉升前低吸(机构常在恐慌回调里建仓)。窄尾分位设计(只在最深的 5–25% 里找阈值)是为了避免在宽尾上搜出一个过拟合的"漂亮"圆整阈值;rolling 版还能自适应 regime,并作为老的静态 −10% 阈值的 sanity check。
rv3d_band_15_30
第9 · v9_2
rv_ratio = rv3d / 当日IC阈值
[1.5, 3.0] → +1,否则 0
3 日已实现波动率的"金发姑娘区间"。双峰诊断:rv_ratio<0.6 太死寂(没东西在动 = 噪音)、[0.6,3.0] 是好区(有健康的波动= 真有事在发生)、>3.0 太狂暴(暴雷/已经异动完,反而是反指)。band[1.5,3.0] 专抓"升温但未失控"的波动环境;walk-forward 显示最优 band 随样本单调收敛到 (1.5,3.0),不是拍脑袋。
dvol_10d_low_pen
第10 · main
gating:近 10 日期权美元成交量低 → 扣分(惩罚方向,非对称)当标的近期期权活跃度 / 美元成交量很低,这条 BigOpen 信号其实处在一个低流动性、低市场关注度的环境里——这类单子统计上负 EV 偏多。所以低 dvol 直接惩罚。对抗式验证证明它删掉的 236 笔确是真负 EV(保留组的胜率/收益显著更高),是真"删坏单"而非单纯降仓。
事实 · 这 4 个滚动/gating 因子"怎么被选出来 / 定参数的"(决策依据,详见 reports/*_exploration.md)
  • nbp3d_low:方向 low(弃 high,4 年 Calmar 全升)· binary(弃 ternary 防误杀)· tol=0 合约级精确 · 只用 STOCK/ADR 训阈值 · no_lag(lag_1week 的优势经查是单笔 SMCI 假象)
  • ret_5d_roll_deep窄尾 [5,10,15,20,25](弃宽尾 p10–90,后者退化成"恒 +1"蹭 beta)· static −10% 仅作 sanity baseline(阈值 ±5% CAGR 差 <2pp,证明不过拟合)
  • rv3d_band_15_30:walk-forward expanding window 最优 band 单调收敛到 (1.5,3.0)(train 23→1.0、+24→1.2、+25→1.5)· plateau 内 16 组合 4/4 年同向(不是单点最优)
  • dvol_10d_low_pen:gating 删掉 236 笔真负 EV 单(保留组胜率/收益显著更高)· 8 维对抗式验证 ship-with-caveats 信心 0.80
经验 · 几条做因子的铁律① 因子必须 pure,不能偷看 score_raw 或别的因子分数(否则就是 admission rule);② 看全样本 t-stat + 阈值平台 + 按年不退化,不只看 CAGR;③ 回测固定 --start-date 2023-04-20(默认 0310 会凭空少 4–7pp);④ 新因子直接用 V9.1 框架写,别写一次性脚本。
Part Four

回测版本演进史:每一版都在解上一版的痛

版本号不是线性升级,而是一连串"痛点→解法→换来什么→留下什么新痛点"。

10从监控,到评分卡,到可复现流水线

V1 · 2025 秋–12(git 前 + 首批 commit)
监控形态:bell signal + earnings
痛点:UW 异常流怎么变成"能盯、能报警"?纠结在过滤条件(vol>oi 太严会漏)。解法:放宽召回 + raw flow 二次校验(hybrid)。留下的痛:只会报警,不能筛选、不能组合、不能回测——光知道"有大单"赚不到钱。
V4/V5 · 2026-01~02
三套 IB 实盘策略:option_store / v4_store / ai_store
痛点:要真下单,不同人要不同风格。解法:同一信号源 × 三种执行(精简 CALL / 双向 / LLM 辅助)。留下的痛:没有"质量分级"和组合资金管理,当不成基金跑。ai_store 的 LLM 动态止盈止损是后来 AI Store 通知链路的源头。
V7 · 2026-03(决定性一版)
可解释评分卡 + 真实杠杆 + SPY 护卫
痛点:信号太杂,没分级、没风控。解法:7 因子整数评分卡→五档 E~A,只交易 A 档真实杠杆(只约束组合总暴露,不把单笔乘杠杆);SPY 前收比均线降杠杆(防前视);−15% 止损/2 自然日。这几条"宪法"沿用至今。留下的痛:回测每次都打 API,跨人跨机对不齐、不可复现
V9 / V9.1 · 2026-04~05(当前主干)
离线四段流水线 + 滚动 IC 因子(8 核)
痛点:不可复现。解法:Stage1-1 拉分钟线 cache → Stage1-2 强制 cache-only 纯离线 → 因子打分 → 回测。跨机 bit-exact 的唯一方式 = 共享同一份 massive_cache。在 V7 的 6 核上加 nbp3d_low + ret_5d_roll_deep = 8 核(CAGR 104%/DD 13.67%/Calmar 7.63)。留下的痛:还想要更多右尾边际。
V9.2 · 2026-05 / dvol · 2026-06
rv3d 第 9 因子 / dvol 第 10 因子
痛点:边际 alpha。解法:rv3d_band(9f → CAGR 121%/DD 12.03%/Calmar 10.06,+16.77pp);dvol gating(+14.8% Calmar,ship-with-caveats)。方法升级:从"能涨就上"变成"plateau + 按年 + 正交 + 对抗式证伪 + 信心分数"。
V10 · 并行另一条腿
largecap 月度组合(capacity-friendly)
痛点:V9 容量 ~$30M,撑不起 $100M+ AUM。解法:大盘股 long-only top-N、ADV 动态宇宙(133 名)、月度再平衡、15 因子。定位是补充而非替代 V9——面向更大资金的 capacity-friendly alpha vs SPY。

经验 · 一句话总线 重心从"找 alpha"逐步转向"让 alpha 可复现、可上线、可对账、可运营、可扩容"。越往后,工程难度不在因子本身,而在"让回测的好,真的变成实盘的好"。

Part Five

实盘 = 回测:信任的根基

这是整个项目最反直觉、也最重要的部分。投资人信的不是"我们说赚了",而是"实盘和回测逐笔对得上"。这一节是从给投资人的解释报告里来的真实故事。

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精确匹配
52 笔"实盘+回测都开"的交易,执行误差合计仅 +$69(约 0.01%)。入场价、止损触发、平仓时点,逐笔可重现。

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 因子(uw_sparse_ask_dominance_14d/uw_floor50_dom_bid_14d从 4/20 起一度 fail-open=0(表名拼错 _zljtest 后缀 + cache 未更新),现已修复并在实盘启用经验 留作教训:遇到任何因子 score=0,先分清是"真 0"还是"fail-open 0"(查表名 / cache 是否新鲜),别想当然。
Part Six

入金 = 投资人信任曲线

入金不只是数字,是一条信任曲线:每一笔钱进来,都是有人看了对账、信了这套右尾策略。
内部机密 · CONFIDENTIAL本章含真实出资人、入金出金与收益。仅限团队内部,勿外传、勿入对外材料。口径以 accounting/daily_nav 为准。

14从 3 个朋友的 3 万港币,到 130 万美元

事实 资金时间线(accounting/transactions.csv)讲的是一条信任如何建立、加码、又被理性管理的曲线:

2025-12-15
ZLJ 成立 · 自己人先用真钱验证
张力嘉 / 奶昔 / 徐阆平三个朋友,每人 1 万港币凑 3 万。信任的起点:先拿自己的钱跑。
2026-02-01
WK 主基金成立 70 万美元 · 信任的第一次飞跃
飞哥 36 万、俞嘉诚 10 万、温凯 10 万、张力嘉 14 万(含代持搞金组/温凯各 2.7 万)。外部出资人愿意把大钱交进来。
2026-02-11 → 03-14
赚钱了,就加码 · 信任随业绩升级
温凯 2/11 +10 万(NAV 已 1.088);WKLP 2/24 +13.7 万;3/14 温凯单笔最大一票:4 万 USD + 120 万港币(≈15.3 万)。
2026-04-24
新投资人按净值入场 · 信策略而非信短期业绩
兰容亨、徐阆平各 3.5 万按当时净值入场——新投资人在已有净值基础上进来(标准基金会计),是对策略本身、而非对某一段短期业绩的信任。
2026-04-27 → 06-01
理性出金 · 必须在对账里讲清楚
温凯夫人 4/27 提 120 万港币(≈15.4 万,家庭安排);merton 6/1 大额划转 −70.5 万、chenying −16.8 万。出金不必然=不信任,但每笔都要说清——否则会被误读成业绩崩盘(见 §15 的 +253% 假象)。
累计入金
$1.34M
累计出金
$42k
净投入
$1.30M
WK 到 5/1
+18.78%
经验 · 信任的三个机制① NAV 份额会计(入金按当日 NAV 折单位、只有 NAV 变动改权益)——保证新老投资人公平;② 代持是信任的法律影子(张力嘉代持搞金组/温凯、温凯代持兰容亨),不记错才不会算错权益;③ 最关键——逐笔对账报告。投资人愿意在账户正在亏时按 NAV 入金(4/24 兰/徐),靠的就是"实盘=回测"被反复证明。对账纪律 = 募资能力。

15账户即部署单元:清单 / 收益 / 入金出金

核心理念 · 账号不是凭证一个账号 = strategy + port + client_id + base_currency + 风控开关 + 对账口径 + 通知通道。理解任何一个账户要同时答这 7 个问题。注意命名漂移:IB 登录名 ≠ 内部代号 ≠ 对账账户名 ≠ strategy 标签(实盘标签至今是历史遗留的 bigopen_v4_store)。
portIB 登录名内部代号strategy(实跑)币种备注
4001merton1994WKbigopen_v9HKD主基金
4011zjjzglbigopen_v9USD--no-feishu-alert(赠股噪音)
4021chenyingwenkaiWKLPbigopen_v9→v9_1USD--force-guard 半仓(要取钱)
4031langpingxulangpingbigopen_v9_1(10 因子)HKD6/1 起停跑
4041wenjing1228WJai_option_storeUSD测试账户
4061lrh→ustcian2026LRH/兰容亨bigopen_v9USD→HKD4/24 兰/徐各入 $35k
4081bigopen_v4_jxjx→金洲 JZ_FUNDUSD已下线/改名(PR #133)

入金 / 出金 / 净投入(accounting 口径,2/1–4/25)

账户入金 USD出金 USD净投入 USD
WK(主基金)800,0000800,000
WKLP393,0670393,067
LRH95,593095,593
WJ(测试)10,789010,789
ZLJ(已清空)44,52641,9722,554
合计1,343,97541,9721,302,003

事实 账户级收益以旗舰 WK 主基金为例:成立至 5/1 NAV 1.188+18.78%,总损益 +$140,585)。其余账户受入金时点 / 跨账户划转 / 起投净值不同影响,账户级收益不可横向直接比较(口径见下方"划转污染"说明),此处不逐一列示。

经验 · 最易误读的运营陷阱:资金划转污染收益事实 实盘 4061 在 4/29→6/1 净值"+253%"——这是 4/24 入金 $70k 撑大的假象,不是收益。6/1 merton 出金 −$705k、chenying −$168k,若直接用前一日净值起算会算出 −70% 的假崩盘。
经验 任何跨入金/出金/划转的区间,必须以"划转完成后"为基准重定基再算收益,否则像 4061 那样把入金当成 +253% 业绩、或把出金当成崩盘。three_accounts_report_zlj 就是统一从划转后的 6/2 起算,剔除划转扰动后再比三账户的纯交易表现(结论:三者高度相关,同属 big-open 动量多头,差异来自杠杆/现金状态与个别独有持仓)。
经验 · 多账户运营硬核教训NAV 法 vs 1:1:1 平摊(LRH 用 NAV 法、WJ 测试账户等额平摊,同组人不同账户分账规则不同,须事先写清)· 代持要单列 · 跨账户转账双记账(ZLJ→WKLP 4 万)· 换汇 OOP 成本 retain 在份额里 · 要取钱的账户 --force-guard 半仓 · 下线/改名走 PR + 5/1 做了完整清算复核(应收应付全部归零)。
Part Seven

参考与证据

前面是故事,这里是可查的事实底座。

16实盘系统 / Signal Store / 通知 / 安全(速查)

事实 · 数据链路 UW API → Signal Store 采集(每分钟) → RDS PostgreSQL → FastAPI(:8000) → run_strategy.py → IB。DB 关键表:custom_alert_signals(BigOpen 当前用) / positions / tradesflow_id 可溯源)/ daily_nav(收益权威口径)/ strategy_signal_scores

通知通道用途 / 演进
飞书因子 daily_run 成功/失败 + 开盘 10 分钟无信号预警 + ai_store LLM 群;可按账户 --no-feishu-alert
TelegramPUT 监控 + EOD 综合分析;6/1 起邮件停发迁 TG
Make.com webhookEOD 转发 + LLM 英文 markdown 摘要(限字 + web search)
事实 · 安全状态实盘 RDS 明文密码曾被硬编码并 push 进 git 历史(ae3820f 发现)。用户已决定:不轮换、不 scrub,接受现状(私有库+内部 DB)→ 不必再提醒。经验:新代码一律从 .env 读凭据,绝不新增硬编码;任何对外产物不含密钥。

17探索分支与多智能体(没全进 main 的经验)

分支负责人(推断)领先/落后主题进 main
dev_langpingLangping0/9主开发分支,绝大多数 PR 来源已并
dev_zljZLJ51/28claude_explore 全部探索(因子/对账/投资人报告/容量/overlay)部分
dev_v9_lrhIan Lan3/1V9 离线打分 pipeline、rv3d、dvol、ret_5d fail-loud主要已并
dev_lrhIan Lan2/430老分支:fixed-time exit + daily bar API历史
codex/minimax-prior-flow-shadowCodex38/59minimax 探索 + 实盘 log prior-day flow shadow未并
codex/uw-flow-b-floor-factorsCodex35/75prior-day UW flow 因子(sparse_ask/floor50 来源)部分
codex/uw-quiet-option-spike · factor-explore-curatedCodex1/28·1/41quiet option spike / 因子 curate 笔记未并
codex-worktreeCodex13/41MegaConsensus public CSV audit未并
option_dev_zljZLJ14/91期权策略复现包;含"Calmar 13+ 是回测幻觉"sanity cap 修正独立
feat/dvol-10d-low-penIan Lan1/1dvol 第 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经验总结

策略右尾驱动 → 回撤是数学不是事故;与市场解耦是 feature(Beta 0.17);评估看右尾捕捉力,不看胜率/单周。
因子四阶段漏斗 + 真 promote ratio;警惕三种"假 +pp"(集中度/sizing 杠杆/数据 bug);敢枪毙自己的好结果;对抗式证伪给信心分数。
数据复现跨机一致只能共享同一份 cache;fetch 过 bars 必须全量重建;时区用 tz-aware;只信同会话 delta;护卫 fail-open / pandas us-ns / (ft,fd) 三个坑。
实盘运营实盘=回测靠逐笔对账(=募资能力);先扣 partial-fill/死代码/分阶段灰度再谈差异;账号是部署单元;入金出金会污染收益须 rebase;凭据走 .env。

A证据附录

A.1 PR Ledger(merge commit 重建,#1–#133)

事实 gh 不可用,PR 从 merge commit 重建;绝大多数来自 dev_langping。缺号为未走 first-parent 或关闭未合并。

日期段PR来源 / 主题
2025-11-25#1Initial commit from existing project
2025-12#2–#11earnings / RealtimeMonitor / Signal Store 雏形(含 zlj-server #8)
2026-01~02#12–#26IB 实盘策略 + 采集
2026-03#27–#50BigOpen V4→V7 评分卡
2026-04#51–#104V9 流水线 + NBP3D/RET5D;含 count-f2(#52,53)/uw-flow-3(#58)/ret5d-fix(#87)
2026-05#105–#127UW flow 因子 + 在线打分 API + asof;count-14d(#105)、dev_v9_lrh(#126)
2026-05~06#129–#133CALL/PUT 统一监控 + rv3d;4081→金洲(#133)

A.2 main first-parent 关键 commit(节选)

98a724e 2026-06-02 dvol 第10因子上线 (origin/main HEAD)
cca5d7f 2026-05-25 rv3d band[1.5,3.0] 第9因子, 4011 切 v9_2
00b4dbd 2026-05-22 put_monitor CALL flow EOD + dual webhook (本地 main)
e62ccaa 2026-04-19 nbp3d 周滚动改日滚动 + 离线 DB pipeline + 线上打分 API
50553ed 2026-03-23 V7 backtest 加 Calmar / 年度 PnL
7daf126 2026-04-27 新增 lrh(4061) 账户 · 9405237 convert_cash FX 修复 · 15f5ede del account
7325ba1 2026-06-01 邮件停发迁 TG; 4031 停跑, 4021 改跑 10 因子
7dacc62 2025-11-25 Initial commit from existing project (root)

A.3 文件改动热点(全分支累计 top)

57 ib_bigopen_v4_store.py · 52 ib_option_signal_system_ai_store.py · 49 ib_client.py · 40 ib_bigopen_v9_store.py
32 BIGOPEN_V9_USAGE.md · 31 factor_registry.py · 29 start_all.sh · 24 check_all_accounts.py · 21 fetcher_custom.py

A.4 已知局限

A.5 新人"先读 + 先跑"清单

  1. 读:本报告 → BIGOPEN_V9_USAGE.mdSTRATEGY_BIGOPEN_V7.md → 给投资人的 investor_5_22_explain_zlj/INVESTOR_EXPLAIN.md(感受"实盘=回测"的故事)
  2. 读:factor_registry.py + skill /explore-factor(因子方法论)+ uw_flow_explore/ 总文档(含因子坟场)
  3. 读:accounting/README.md + summary.md(资金会计模型)
  4. 跑:Stage1-1 fetch → 1-2 build → build_factors → run_backtest(--start-date 2023-04-20),亲手复现 8 核 ≈ 105%