学习c++的高频交易仓库
  • C++ 95.7%
  • CMake 2.5%
  • Shell 1.8%
Find a file
chenwojun 16ca701e60 完成第 3-4 期(L25-L35)+ 路径与验收口径修正
## 新增课程(11 课,每课独立可编译并实机验证)
第 3 期 · 策略、风控与回测:
- L25 市场微观结构(OFI 与未来中间价 r=+0.57)
- L26 事件驱动回测引擎(100 万 tick 指纹可复现)
- L27 滑点与队列建模(理想成交多算 60.8%、edge 符号反转)
- L28 做市与库存管理(费率盈亏平衡 -0.3049 tick/股)
- L29 策略 v2 + 过拟合演示(随机数据样本内 Sharpe 345.57 → 样本外 -641.16)
- L30 三层风控(发疯拦截 166~208ns,热路径 4.47ns)
- L31 结业项目 paper trading(双模式共用同一份策略代码)

第 4 期 · 榨干软件:
- L32 延迟剖析(自建采样剖析器;修掉火焰图反向、归因 311% 等 8 个缺陷)
- L33 消灭间接(分发 -23.1%、br x5 -> b;端到端只占 0.35%,诚实的负结果)
- L34 SIMD(NEON 5.13~6.42x + 3 条量化负结果)
- L35 结业项目 纳秒账单审计(账单闭合差 0.0%,parse 33% 是唯一有余地的一段)

## 修正
- 绝对路径 -> 相对路径(8 个文档);README 新增「路径约定」章
- 续课协议新增 7 条操作红线(subagent cwd / 默认路径验证 / build 目录隔离 等)
- L33 验收线:原「p99 下降 ≥30%」经实测证明结构上拿不到,已改写
- L35 验收口径:网卡段诚实化为「合成/引用 L16·L20」
- 文档长度规则改为按「正文行数」计

所有工程零警告,无构建产物入库。
2026-09-29 11:58:53 +08:00
code 完成第 3-4 期(L25-L35)+ 路径与验收口径修正 2026-09-29 11:58:53 +08:00
docs 完成第 3-4 期(L25-L35)+ 路径与验收口径修正 2026-09-29 11:58:53 +08:00
.gitignore 完成第 3-4 期(L25-L35)+ 路径与验收口径修正 2026-09-29 11:58:53 +08:00
README.md 完成第 3-4 期(L25-L35)+ 路径与验收口径修正 2026-09-29 11:58:53 +08:00

从零开始的交易系统 📈

一台电脑、一套 C++20 工具链,六期制课程:从造尺子开始,造出撮合引擎 → 全链路交易客户端 → 回测与风控,最后(可选)把关键路径搬进 FPGA。

🎯 课程目标:提高 C++ 水平。 交易系统是训练场,不是目的——真正的课程表见 学习目录 第 2 节 ⑧「C++ 能力主线」。 因此本课不是求职导向:第 6 期已从「简历 / 合规」改成「提炼可复用库 + 读工业级源码」。 (求职相关内容全部收在 附录 · 求职映射,不占课时,投简历前读 30 分钟即可。)

这是你的私人课程仓库

内容 位置
📖 完整学习目录(六期制 · 先读这个) docs/00-学习目录.md
📚 每课文档(按编号顺序学习) docs/L01-… ~ docs/L52-…
📎 附录(不占课时,用到再看) 零基础看懂交易所 · 求职映射 · 延迟数据表 · 协议速查 · 板子选购
🔁 续课协议(换 AI / 重装系统后读这个) docs/00b-续课协议.md
✅ 进度追踪 见目录第 12 节「进度追踪」
💻 参考代码 独立仓库 mini-trading/(本库只放文档)

📁 路径约定(重要)

本仓库可以放在任何地方——文档里所有命令都相对于仓库根目录,没有任何写死的绝对路径。

# 假设你的 shell 已经在仓库根目录
cd code/L05-bench-harness        # ✅ 相对路径
cmake -S . -B build && cmake --build build
  • 每课的参考代码在 code/L<课号>-<课名>/,文档在 docs/L<课号>-*.md
  • 把仓库 clone/移动到任意位置(~/CLionProjects、~/Obsidian、外置硬盘…)都不影响任何命令
  • 只有你的个人笔记库(从负数开始的C++生活 等)在文档里被当作背景引用,不参与任何命令

课程定位(一句话)

交易系统是训练场,不是目标。 用「低延迟交易系统」这个 C++ 世界最苛刻的场景,把你从会写 C++ 逼到能设计 C++ 系统:内存布局、对象生命周期、零成本抽象、并发内存模型、编译期计算——全部用到极限。

设计标准:面向真实行情,不做教学 demo

不做"能跑就行"的 demo,做"放到真实行情前面也不会崩"的系统。

即使不会真的部署,每个模块也要能回答"真实市场把它逼到极限时会怎样":

真实世界的考验 验收手段
行情峰值速率(开盘 / 收盘突发) 真实 ITCH 回放(Nasdaq 规范附带的样例数据),不只用合成流量
丢包 / 乱序 / 重复 / 缺口 故障注入,系统必须自愈且订单簿与参考实现一致
交易所重启 / 跨日 / 集合竞价 会话状态机演练:断连重连、序号重置、跨日重置
极端行情(LULD、闪崩、熔断) 历史极端日数据回放,检查风控与限流按预期动作
内存上限与长跑退化 连续跑 24h:RSS 平稳、延迟分布不漂移
崩溃与恢复 随机 kill -9,恢复后状态逐字段一致
时钟 TSC 漂移、跨日、时区、PTP 同步误差

🔥 重点加秤的能力(你指定的五块,深度优先):模板与编译期计算 · 生命周期与所有权 · 并发与内存模型 · 性能与内存布局 · 抽象与架构设计。

六期总览

期 主题 课程 结业项目
0 上桌前的准备(造尺子) L01–L06 一套可复现的纳秒测量工具
1 撮合引擎与订单簿 L07–L15 🎓 MiniExchange v1
2 网络、行情与网关 L16–L24 🎓 MiniTrader v1(全链路)
3 策略、风控与回测 L25–L31 🎓 回测 → paper trading
4 榨干软件 L32–L35 端到端「纳秒账单」
5 FPGA 硬件加速(后续可选硬件线) L36–L48 🎓 FPGA 行情加速卡
6 C++ 深化与生产化(选修) L49–L52 可复用库 + 工业源码分析笔记

✅ 默认走完整系统线:第 0–4 期 + 第 6 期(L01–L35 + L51–L52,约 130–180 小时)。第 5 期(FPGA)是平行的硬件能力线,以后想练再加。

每期在练哪块 C++ 能力

期 主要练到的 C++ 能力
0 值语义与类型设计 · 编译期计算 · 性能测量方法论
1 对象生命周期与所有权 · 内存布局与缓存 · 并发与内存模型 · 泛型与可测试性
2 零拷贝与 I/O 抽象 · 接口设计与解耦 · 错误处理与失败语义
3 抽象设计(同一份代码跑两种运行时)· 热路径上的约束求解
4 性能工程方法论 · 零成本抽象 · SIMD 与数据导向
5 ⚠️ 硬件能力线(Verilog / 时序);只有 L41、L36、L46 与 C++ 相关,可整体跳过
6 抽象与提炼 · API 设计 · 读工业级代码

完整版(含每块能力对应的具体课次)见 学习目录 第 2 节 ⑧。

你的起点(已读过你的笔记,照你定制)

课程不会重复你已经会的东西,而是直接做"交易场景改造":

你已经掌握 本课直接复用
无锁 SPSC / 内存序 / 缓存一致性(环形缓冲区.md、SimpleAsyncLogger) L13 入站队列、L33 生产级优化
io_uring / epoll / 零拷贝(EPOLL和IO_URING.md) L20 内核旁路对照(你已占两档)
DMA / MMU / TLB / Page Cache(概念/) L22 大页与内存、L46 PCIe DMA
perf / FlameGraph(性能分析工具链与调试.md) L32 延迟剖析(方法直接迁移)
STM32 / ESP32 / 时序 / 中断(从零开始的STM32生活) 第 5 期整期受益
V4L2→NPU 零拷贝管道(ScoreMaster) L46 主机↔FPGA DMA 管道

真正要从零学的只有三样:交易业务域、延迟工程的严苛度、数字设计(Verilog/时序/CDC)。

三条不可动摇的验收标准

  1. 正确性:参考实现对拍 + 不变量测试(只快不对 = 不过)
  2. 延迟:p50 / p99 / p99.9 直方图(平均值好看没用)
  3. 纳秒账单:每个设计决策都要能说出"花了 / 省了多少 ns"

怎么跟我配合(很重要)

  1. 先自己动手:每课先读文档、自己写代码,卡住再看参考实现。
  2. 卡住时这样问(三选一或都贴):报错全文 + 你试过什么 / perf 与基准的原始输出 / 实际现象 vs 预期现象。
  3. 做完验收:跑出文档里写的「验收现象」后告诉我,我更新进度并开下一课。
  4. 随时可调:觉得太简单直接说「加速」;想砍课、加扩展、换市场方向,直接说。

器材与环境(先别急着全买)

档位 什么时候需要 预算
0 · 你现在的 Mac(M5 + clang + cmake 已就绪) 立刻开始 ¥0
1 · 一台 Linux(你现有服务器 / RK3588 香橙派 / 云主机) 开 L04 前 ¥0–200
2 · 两台机器 + 千兆交换机(组播与丢包实验) 开 L16 前 ¥100–300
3 · 二手万兆网卡(X520/X710 + DAC) 开 L20 前 ¥200–600
4 · FPGA 入门板(高云 Tang Nano / Zynq-7020) L40 前,可先用仿真替代 ¥150–1500
5 · 真 10G(云 FPGA 实例按小时租) L48 验收 几十元/小时

⚠️ 免责:这是一门工程课,不构成任何投资建议。所有策略代码只用于仿真、回测与 testnet,不接真实资金。

技术选型(已确认)

决策点 选择
主攻市场 美股 Nasdaq ITCH / OUCH(主线协议);SBE / FIX / CTP / 加密 API 作对照
FPGA 路线(选修线) Verilog 起步(A 路线),HLS 做对照;L37–L45 全程可用纯仿真完成。它练的是硬件能力,不是 C++ 能力,可整体跳过
目标(最重要的一条) 提高 C++ 水平——交易系统只是训练场;默认走「完整系统线」L01–L35 + L51–L52(约 130–180 小时,要宽度,不速通)
设计标准 面向真实行情:真实 ITCH 回放 + 故障注入 + 24h 长跑 + 崩溃恢复
语言与工具 C++20 + CMake(Mac 起步 → L04 切 Linux);Verilog + Verilator / Vivado
默认假设 只跑模拟盘 / 回放 / testnet,不接真实资金

想改任何一条,随时说(例如「换国内期货 CTP」,我会把 L10 / L16 / L17 重写)。

四条路径(按你的时间和野心选)

路径 课程 时长
完整系统线(✅ 你已选:要完整系统的宽度) L01–L35 + L51–L52 130–180 小时
语言深化速通:只要内存/并发/性能/抽象四块硬功 L01–L13 + L18–L22 + L32–L35 + L51–L52 80–110 小时
先尝一口:体验"用数字说话"的威力 L04–L05 + L12 + L32–L35 30–40 小时
加硬件线:顺带练 Verilog / HLS(平行能力线) L01–L52 180–250 小时

当前进度

已交付 9 课文档 + 10 个可编译工程(约 10,800 行文档、20,800 行代码),全部代码都在你的 Apple M5 上独立编译验证过。

状态总表

课 文档 参考代码 代码验证
L01 交易系统全景与延迟等级 ✅ ✅ ✅ 13 项实测
L02 市场怎么运转 ✅ ✅ ✅ 8 条不变量全 OK
L03 延迟的物理学 ✅ ✅ ✅ 真实 ping + 排队仿真
L04 环境搭建 ✅ ✅ ✅ macOS 分支;Linux 侧待你跑
L05 测量方法论 ⭐ ✅ ✅ ✅ x86 路径待 Linux 验证
L06 数值与内存地基 ✅ ✅ ✅ 177 断言全绿
L07 订单簿数据结构选型 ✅ ✅ ✅ 档位数组 4.1ns/op vs map 54.9ns/op
L08 撮合引擎 v1 ⭐ ✅ ✅ ✅ 42 项检查全绿 + 吞吐/分位数
L09 对拍 + 属性测试 ⭐ ✅ ✅ ✅ 2 万/10 万条零差异 + shrink 演示 + 6 个陷阱实验
L10 订单类型与市场规则 ✅ ✅ ✅ 7 个测试程序 / 1340 条断言全绿
L11 零分配热路径 ⭐ ✅ ✅ ✅ 热路径 0 次 malloc + 26 项 UAF 检查 + 50 项 selftest
L12 缓存友好与分支友好 ✅ ✅ ✅ 38 项 selftest(🔶 负结果已如实记录:改造慢 10~28%)
L13 并发模型 ⭐ ✅ ✅ ✅ 34 项 selftest(🔶 架构③分片未交付,已写进文档)
L14 会计与对账 ✅ ✅ ✅ 33+26+12+9 项检查全绿,钱货守恒精确到 0 tick
L15 🎓 MiniExchange v1 ✅ ✅ ✅ 51 项 selftest + 35 项崩溃演练全绿,bench 13s

| L16 交易网络基础 | ✅ | ✅ | ✅ A/B 仲裁 p99.9 4384→421μs | | L17 二进制协议 | ✅ | ✅ | ✅ 181 断言;ITCH 8.9ns/msg vs FIX 195 vs JSON 210 | | L18 零拷贝解析器 ⭐ | ✅ | ✅ | ✅ 7.53ns/msg,0 分配 0 复制,反汇编验证 | | L19 行情客户端自愈 ⭐ | ✅ | ✅ | ✅ 10% 丢包下最慢 1.04ms 自愈,77 断言 |

| L20 内核旁路一 ⭐ | ✅ | ✅ | ✅ 四笔税:唤醒 2680ns vs 忙轮询 93ns(29x) | | L21 内核旁路二 ▲ | ✅ | ✅ | ✅ 软件打点 Δ≈2.2μs(噪声底 6.2μs,已声明) | | L22 系统调优 ⭐ | ✅ | ✅ | ✅ 忙轮询 vs 唤醒 3.3μs;缺页 700~1100ns/页 | | L23 下单网关 | ✅ | ✅ | ✅ 240 断言全绿;重发 800 次建单仍 800 张 |

| L24 🎓 MiniTrader v1 | ✅ | ✅ | ✅ tick-to-order p50=4096ns;86 项回归全绿;SIGINT 零丢帧 |

| L25 市场微观结构 | ✅ | ✅ | ✅ OFI r=+0.57,9/9 桶单调;逆向选择 -0.97 tick/笔 | | L26 事件驱动回测引擎 | ✅ | ✅ | ✅ 100 万 tick 指纹可复现;bar 级漏 99.8% 事件 | | L27 滑点与队列建模 ⭐ | ✅ | ✅ | ✅ 理想档多算 60.8% 成交量、edge 符号反转 | | L28 做市与库存管理 | ✅ | ✅ | ✅ 净利 $552;费率盈亏平衡 -0.3049 tick/股 |

| L29 策略 v2 + 过拟合演示 ▲ | ✅ | ✅ | ✅ 随机数据样本内 Sharpe 345.57 → 样本外 −641.16 | | L30 三层风控 ⭐ | ✅ | ✅ | ✅ 发疯拦截 166~208ns;风控热路径 4.47ns;141 项自检 |

| L31 🎓 从回测到 paper trading | ✅ | ✅ | ✅ 双模式共用同一份策略代码(110 行机器码一致)|

| L32 延迟剖析 ⭐ | ✅ | ✅ | ✅ 自建采样器 1322 样本;修掉火焰图反向/归因 311% 等 8 个缺陷 | | L33 消灭间接 ⭐ | ✅ | ✅ | ✅ 分发 −23.1%、br x5→b;★ 端到端只占 0.35%(尺子量不到)| | L34 SIMD | ✅ | ✅ | ✅ NEON 5.13~6.42x + 195 条向量指令;3 条量化负结果 | | L35 🎓 纳秒账单审计 ⭐ | ✅ | ✅ | ✅ 账单闭合差 0.0%;parse 33% 是唯一有余地的一段 |

🎓 第 1 期(L07–L15)完成! 已交付 15 课文档 + 15 个可编译工程(约 17,000 行文档 / 42,000 行代码)。 两个如实记录的缺口:① L13 的「架构③ 分片多线程」参考实现未交付(5 版都死锁); ② L15 的「快照恢复」实测比全量重放慢 1.5~1.7 倍(负结果,已保留为陷阱实验)。

已完成的其他交付

  • 课程大纲(六期 52 课 + 教学法 + 起点映射 + 器材清单)
  • 技术选型锁定(美股 ITCH 主线 / Verilog 路线 / 只跑模拟盘)
  • 目标校正:求职导向 → C++ 能力导向(第 6 期改为「提炼可复用库 + 读源码」)
  • 路线锁定:完整系统线 L01–L35 + L51–L52;第 5 期 FPGA 转为后续可选
  • 附录 A「求职映射」· 附录 B「零基础看懂交易所」(开课前必读)
  • 续课协议 docs/00b-续课协议.md —— 换 AI / 重装系统后靠它接上,不依赖任何对话

下一步(等你)

  • 先备份(Time Machine 或直接复制整个文件夹到外置硬盘)
  • 做课程验收(每课的「🎯 本课验收现象」+「✅ 验收清单」)
  • 生成第 1 期剩余课(L11–L15:零分配 / 缓存友好 / 并发模型 / 会计 / 🎓 MiniExchange v1)—— 不急,随时说