我毕业时,刚开始从事股票交易系统的开发,那个时候纯追求技术,做的功能总是被老板评价为技术有余、业务不足,后来老板给我和另外一个同事拨专款各1万元,让我们去股票市场去练习,熟悉股票业务。炒股票一般有两大流派,一派是K线技术派,即通过分析各种K线的走向预测涨跌,然后对应的加仓和减仓;另外一派,是基本面派,即分析一只股票背后的公司的发展情况,来走长线,例如,10年前买了茅台股票的人,现在应该财务自由了吧。
后来,又陆续做过期货和现货的交易系统。2011年的时候,有幸独立与人创业,独立地把交易系统各个服务从零实现了一遍,收益匪浅。
老实说,交易系统与互联网公司的一般业务不太一样,其对技术的深度要求比较高,尤其是C++、操作系统原理和网络编程知识,不需要大而全面的技术栈,例如我对网络编程相对比较熟悉,就是那几年做交易系统磨炼出来的技能;另外一块就是要对业务熟悉程度有一点的要求,例如各大证券公司、交易所招人,要求有证券从业资格证的应聘者。一旦你有幸加入一家做交易系统的公司,基本上可以做一辈子,是技术人一个不错的方向。
东隅已失,桑榆非晚。
今天给大家推荐一个专栏《使用 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实例 -
检查这些优化的效果 -
思考我们交易生态系统的未来发展 -
动态扩展容器 -
扩展和增强哈希映射 -
优化快照消息 -
在订单协议中添加认证和拒绝消息 -
在订单协议中支持修改消息 -
增强交易引擎组件 -
总结
专栏今晚会在小方说服务器开发知识星球上线。对这个专栏有兴趣的小伙伴可以通过下面的二维码扫码加入(原价325一年,扫码立即优惠40元):

老球友可以通过下面的二维码扫码续费(半价基础上再优惠10元):

祝大家玩得愉快~
推荐阅读
-
高级 C++ 开发综合岗面试题,能挑战否? -
大型开源 FTP 软件 FileZilla 源码分析 -
如何尽快适应大型 C++ 项目?
-
如果你想低成本的快速提高开发水平,推荐这个 -
《用C++17从零开发一个调试器》新专栏上线 -
《Linux 5.x内核开发与调试 完全指南》 专栏已上线

