- C++ 95.7%
- CMake 2.5%
- Shell 1.8%
## 新增课程(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」 - 文档长度规则改为按「正文行数」计 所有工程零警告,无构建产物入库。 |
||
|---|---|---|
| code | ||
| docs | ||
| .gitignore | ||
| README.md | ||
从零开始的交易系统 📈
一台电脑、一套 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)。
三条不可动摇的验收标准
- 正确性:参考实现对拍 + 不变量测试(只快不对 = 不过)
- 延迟:p50 / p99 / p99.9 直方图(平均值好看没用)
- 纳秒账单:每个设计决策都要能说出"花了 / 省了多少 ns"
怎么跟我配合(很重要)
- 先自己动手:每课先读文档、自己写代码,卡住再看参考实现。
- 卡住时这样问(三选一或都贴):报错全文 + 你试过什么 /
perf与基准的原始输出 / 实际现象 vs 预期现象。 - 做完验收:跑出文档里写的「验收现象」后告诉我,我更新进度并开下一课。
- 随时可调:觉得太简单直接说「加速」;想砍课、加扩展、换市场方向,直接说。
器材与环境(先别急着全买)
| 档位 | 什么时候需要 | 预算 |
|---|---|---|
| 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)—— 不急,随时说