先说结论:我的量化交易研究平台(zdq)还没有跑出达标策略。目标是稳态年化 ≥100%、单次回撤 ≤10%,目前 317 组因子×参数组合全部阵亡。为什么还要写?因为值得展示的不是收益曲线——那是运气和行情的函数——而是研究基础设施的硬核度,和"宁可全灭也不造假"的工程纪律。全灭记录本身就是资产。
怎么实现的
全系统 Python 3.13,87 个文件 50,685 行:
- 数据层:DuckDB 做主库,统一访问层多源自动降级——本地 DuckDB 优先,挂了退 akshare,再挂退 tushare。东财接口被封、腾讯限流都踩过,降级链是实战逼出来的。
- 策略层:多因子选股 + 回测引擎,成本按真实口径扣足(佣金万 1 + 印花税千 1)。
- 研究队列:不间断跑数,因子×参数组合排队过夜批,判定完自动接续下一个,不过线就归档落盘,禁止刷回测凑结果。
- 模拟盘:四本账(ETF 轮动 vt20/vt10、沪深300 对照、黄金趋势 vt10),各 100 万虚拟资金,T+1 成交、每日结算、飞书推送。
- 开发方式:12 个专属 AI 岗位(CIO、量化架构、后端、前端、数据库运维、验收审计等)协同,我定方向和验收标准,执行全部派单。
硬核在哪
1. 数据治理是真刀真枪。 分钟数据一度膨胀到 306GB,清理 2026 年前的 44.6 亿行后压到 20GB。DuckDB 删行不缩文件,只能"建新库换旧库",为此写了带断点续传的三阶段迁移脚本。排雷速查里躺着一堆血泪:DuckDB 二级索引有四种腐蚀形态(静默漏行、结果随执行计划漂移、写路径进程崩溃……),中文列 ORDER BY 必抛 Invalid unicode——全是实锤进章程的坑。
2. 全市场复权重锚。 旧复权数据是"减法式复权",深历史有污染。我把全市场 5,933 只股票的前复权+后复权双向重锚,955,378 个持续性阶跃事件清零、0 失败;同轮根治北交所前缀 bug(新浪拼接写死 sh/sz,把北交所复权洗成原始价)。重锚之后 qfq 表才敢用于收益率计算。
3. 学术级防过拟合。 三重闸门:多重假设检验修正(过线阈值 t_crit=√(2·ln(20k)),同族已试越多门槛越高、只升不降)、walk-forward 样本外、long-only 可实现子集硬闸门——多空口径纸面 alpha 为正但 long-only 子集均值为负的,直接灭。成本扣足后还要求"毛 alpha 厚度 ≫ 零售成本×换手":有个毛超额 36bp/日的因子,算完换手年拖累 63%,证伪。
4. 失败全量归档。 217→317 组组合无一活口,每组判定明细、卡在哪道闸门、判定报告全部落盘。单因子框架 t 值天花板 ≈2.25(vs 门槛 3.4~3.9)这个结构性结论,就是全灭堆里刨出来的;hedge 族最高 cluster_t 2.803 破了单因子天花板,拿到第二轮立项资格。
实测数据 / 现场
| 指标 | 数值 |
|---|---|
| 代码规模 | 87 个 Python 文件 / 50,685 行 |
| 数据库治理 | 分钟数据清理 44.6 亿行,306GB → 20GB |
| 复权重锚 | 全市场 5,933 只,阶跃事件 955,378 → 0 |
| 研究队列 | 317 组组合,过闸 0,全灭全归档 |
| 回测成本口径 | 佣金万 1 + 印花税千 1,扣足后判定 |
| 模拟盘 | 4 账本 × 100 万虚拟资金,每日结算 + 飞书推送 |
| 当前最佳 | 黄金趋势 vt10:OOS 年化 +27.64% / 回撤 -8.34%(距目标尚远) |
这套东西能复用到哪
- 任何数据密集型系统:多源降级、断点续传、行数对账、写锁编排(宵禁窗口+锁退避)这套数据工程打法,换个领域照样成立。
- AI 多智能体团队:12 个岗位的技能分工、派单模板、文件级互斥并发规则,是可移植的组织架构模板。
- 需要"证伪纪律"的研究项目:多重检验修正 + 失败全归档,换成 A/B 测试、模型调参都适用。
- 无人值守运维闭环:每日数据同步 → 研究队列夜批 → 模拟盘结算 → 飞书推送,这套编排思路不限于量化。
现状与下一步
下一步没变:研究队列继续跑,hedge 族进了第二轮立项,直到严格回测(含成本、样本外、防过拟合)稳定达标,我才考虑实盘。在那之前,这是研究平台,不是印钞机。
风险提示:量化实盘有风险,历史回测不代表未来收益。本栏目只展示工程能力,不构成任何投资建议。
