使用 C++20 从零构建一个完整的低延迟交易系统
前言
第一部分:介绍C++ concepts并探索重要的低延迟应用
第1章:C++中的低延迟应用开发入门
- 理解对延迟敏感型应用的要求
- 理解延迟敏感型与延迟关键型应用
- 测量延迟
- 区分延迟指标
- 对延迟敏感型应用程序的要求
- 理解为何C++是首选编程语言
- 编译型语言
- 更贴近硬件——低级语言
- 资源的确定性使用
- 速度与高性能
- 语言结构和特性
- 成熟且庞大的社区支持
- 持续积极发展的语言
- 介绍一些重要的低延迟应用
- 低级低延迟应用
- 高级低延迟应用
- 物联网和机器对机器应用
- 总结
第2章:用C++设计常见的低延迟应用
- 理解实时视频流应用中的低延迟性能
- 定义低延迟流中的重要概念
- 理解视频流中的延迟来源
- 测量低延迟视频流中的延迟
- 理解高延迟的影响
- 探索低延迟视频流技术
- 探索低延迟流的解决方案和平台
- 理解在游戏应用中低延迟的关键限制
- 低延迟游戏应用中的概念
- 提升游戏应用性能
- 讨论物联网和零售分析系统的设计
- 确保物联网设备的低延迟
- 探索低延迟电子交易
- 理解现代电子交易对低延迟的需求
- 在电子交易中实现最低延迟
- 总结
第3章:从低延迟应用的角度探索C++概念
- 技术要求
- 用C++进行低延迟应用开发的方法
- 先保证代码正确性,再进行优化
- 设计最优的数据结构和算法
- 关注处理器
- 理解缓存和内存访问成本
- 理解C++特性的底层原理
- 利用C++编译器
- 测量和提升性能
- 避免陷阱并利用C++特性最小化应用延迟
- 选择存储方式
- 选择数据类型
- 使用类型转换操作
- 优化数值运算
- 优化布尔和位运算
- 对象的初始化、销毁、复制和移动
- 使用引用和指针
- 优化跳转和分支
- 高效调用函数
- 使用位域
- 使用运行时多态
- 使用编译时多态
- 使用额外的编译时处理
- 处理异常
- 访问缓存和内存
- 动态分配内存
- 多线程
- 最大化C++编译器优化参数
- 理解编译器如何优化
- 理解编译器何时无法优化
- 了解编译器优化标志
- 总结
第4章:构建低延迟应用的C++基础模块
- 技术要求
- C++线程处理在多线程低延迟应用中的应用
- 定义一些有用的宏和函数
- 创建并启动新线程
- 设置线程亲和性
- 构建示例
- 设计C++内存池以避免动态内存分配
- 理解内存池的定义
- 理解内存池的使用场景
- 设计内存池存储
- 初始化内存池
- 处理新的分配请求
- 处理内存释放
- 结合示例使用内存池
- 使用无锁队列传输数据
- 线程和进程间通信
- 设计无锁队列存储
- 初始化无锁队列
- 向队列添加元素
- 从队列消费元素
- 使用无锁队列
- 构建低延迟日志框架
- 设计时间相关的实用方法
- 设计低延迟日志记录器
- 定义一些日志记录器结构
- 初始化日志记录器数据结构
- 创建日志记录器并启动日志记录器线程
- 将数据推送到日志记录器队列
- 添加一个实用的通用日志函数
- 学习如何结合示例使用日志记录器
- 使用套接字进行C++网络编程
- 构建基本的套接字API
- 实现发送/接收TCP套接字
- 构建TCP服务器组件
- 构建TCP服务器和客户端示例
- 总结
第二部分:用C++构建实时交易所
第5章:设计我们的交易生态系统
- 理解电子交易生态系统的布局
- 定义电子交易生态系统的拓扑结构
- 介绍电子交易生态系统的组件
- 设计交易所中的C++撮合引擎
- 理解撮合引擎的目的
- 理解交易所订单簿
- 匹配参与者订单
- 设计我们的撮合引擎
- 理解交易所如何向参与者发布信息
- 通过市场数据传达市场事件
- 设计市场数据发布者
- 通过订单网关接口通知市场参与者
- 设计订单网关服务器
- 构建市场参与者与交易所的接口
- 理解市场数据消费者基础设施
- 设计市场数据消费者
- 理解订单网关客户端基础设施
- 设计订单网关客户端基础设施
- 设计低延迟C++交易算法框架
- 构建订单簿
- 构建特征引擎
- 开发执行逻辑
- 理解风险管理系统
- 设计我们的交易策略框架
- 总结
第6章:构建C++撮合引擎
- 技术要求
- 定义撮合引擎中的操作和交互
- 定义一些类型和常量
- 设计撮合引擎
- 设计订单簿
- 构建撮合引擎并交换外部数据
- 构建撮合引擎
- 从订单网关队列消费数据并向其发布数据
- 向市场数据发布者队列发布数据
- 构建交易所应用程序二进制文件
- 运行交易所应用程序二进制文件
- 构建订单簿并进行订单撮合
- 构建内部数据结构
- 处理新的被动订单
- 处理订单取消请求
- 撮合主动订单并更新订单簿
- 总结
第7章:与市场参与者通信
- 技术要求
- 定义市场数据协议和订单数据协议
- 设计市场数据协议
- 设计订单数据协议
- 构建订单网关服务器
- 定义订单网关服务器中的数据成员
- 初始化订单网关服务器
- 处理传入的客户请求
- 使用先进先出(FIFO)排序器公平处理请求
- 发送客户响应
- 构建市场数据发布者
- 定义市场数据发布者中的数据成员
- 初始化市场数据发布者
- 发布订单簿更新
- 合成并发布快照
- 构建主交易所应用程序
- 总结
第三部分:构建实时C++算法交易系统
第8章:用C++处理市场数据并向交易所发送订单
- 技术要求
- 订阅市场数据并解码市场数据协议
- 定义市场数据消费者中的数据成员
- 初始化市场数据消费者
- 运行市场数据消费者主循环
- 处理市场数据更新并处理数据包丢失
- 与快照流同步
- 从市场数据构建订单簿
- 定义市场订单簿的结构
- 定义订单簿中的数据成员
- 初始化订单簿
- 处理市场更新并更新订单簿
- 回顾订单簿管理的通用实用方法
- 连接到交易所并发送和接收订单流
- 定义订单网关客户端中的数据成员
- 初始化订单网关客户端
- 向交易所发送订单请求
- 处理来自交易所的订单响应
- 总结
第9章:构建C++交易算法的基础模块
- 技术要求
- 对交易执行做出反应并管理仓位、盈亏(PnL)和风险
- 构建特征并计算复杂特征
- 定义特征引擎中的数据成员
- 初始化特征引擎
- 根据订单簿变化计算特征
- 根据交易事件计算特征
- 利用成交情况更新仓位和盈亏
- 声明PositionInfo中的数据成员
- 在PositionInfo中处理订单执行
- 在PositionInfo中处理订单簿变化
- 设计PositionKeeper
- 初始化PositionKeeper
- 在PositionKeeper中处理订单执行和市场更新
- 发送和管理订单
- 定义OMOrder结构体及其相关类型
- 设计OrderManager类
- 定义OrderManager中的数据成员
- 初始化OrderManager
- 从OrderManager发送新订单
- 从OrderManager取消订单
- 添加简化订单管理的方法
- 处理订单更新并更新订单
- 计算并管理风险
- 定义RiskCfg结构
- 定义TradeEngineCfg结构
- 声明RiskCheckResult枚举
- 定义RiskInfo结构
- 在RiskInfo中执行风险检查
- 设计RiskManager中的数据成员
- 初始化我们的RiskManager类
- 在RiskManager中执行风险检查
- 总结
第10章:构建C++做市和流动性获取算法
- 技术要求
- 理解我们交易算法的行为
- 理解做市交易算法
- 通过示例研究做市机制
- 理解流动性获取交易算法
- 添加枚举以定义算法类型
- 管理订单簿中提供的被动流动性
- 定义做市(MarketMaker)算法中的数据成员
- 初始化做市算法
- 处理订单簿更新和交易事件
- 在做市算法中处理订单更新
- 激进地开仓和平仓
- 定义流动性获取(LiquidityTaker)算法中的数据成员
- 初始化流动性获取交易算法
- 处理交易事件和订单簿更新
- 在流动性获取算法中处理订单更新
- 构建交易引擎框架
- 定义交易引擎中的数据成员
- 初始化交易引擎
- 发送客户请求
- 处理市场数据更新和客户响应
- 处理订单簿、交易和订单响应更新
- 添加一些杂项方法
- 构建并运行主交易应用程序
- 构建主交易应用程序
- 运行最终的交易生态系统
- 检查运行输出
- 总结
第四部分:分析和提升性能
第11章:添加检测工具并测量性能
-
技术要求
-
添加检测系统以测量系统性能
- 使用RDTSC添加性能测量实用工具
- 更新我们之前的时间实用工具
- 理解实际测量系统中的一些问题
-
测量交易所的延迟
- 理解交易所的关键环节
- 测量市场数据发布者内部的延迟
- 测量订单服务器内部的延迟
- 测量撮合引擎和订单簿内部的延迟
-
测量交易引擎内部的延迟
- 理解内部测量方法
- 理解交易客户端系统中的关键节点
- 测量市场数据消费者内部的延迟
- 测量订单网关内部的延迟
- 测量交易引擎内部的延迟
-
使用新的检测系统运行整个生态系统
-
总结
第12章:分析和优化C++系统的性能
- 技术要求
- 分析我们交易生态系统的性能
- 回顾我们测量的延迟
- 分析性能
- 理解分析结果
- 探讨优化C++交易系统的技巧和方法
- 优化发布版本构建
- 正确设置线程亲和性
- 优化日志记录器对字符串的处理
- 避免使用
std::function实例 - 检查这些优化的效果
- 思考我们交易生态系统的未来发展
- 动态扩展容器
- 扩展和增强哈希映射
- 优化快照消息
- 在订单协议中添加认证和拒绝消息
- 在订单协议中支持修改消息
- 增强交易引擎组件
- 总结
浙公网安备 33010602011771号