第二章:开发环境搭建——Windows/Linux下C++编译环境配置、Python封装层(pyCTP)安装、网络延迟测试工具准备
说实话,很多做量化交易的朋友,一开始都栽在环境搭建上。
我记得有个学员,C++代码写得挺溜,结果在Windows下折腾CTP接口编译,搞了整整三天没跑通。最后发现是字符集没选对——多冤枉啊。
所以这一章,咱们把环境一次性搭好。你跟着我的步骤走,别跳步,半小时内搞定。
2.1 Windows下的C++编译环境配置
做CTP开发,Windows是主流。毕竟交易终端、行情软件大多跑在Windows上。
我个人习惯用Visual Studio 2022。为什么?因为CTP官方给的示例代码就是VS工程,你直接用最省事。
2.1.1 安装Visual Studio 2022
- 去官网下载Visual Studio 2022 Community版(免费,个人够用)
- 安装时勾选「使用C++的桌面开发」工作负载
- 右侧「单个组件」里,确保勾选「Windows 10 SDK」和「C++ MFC for latest v143 build tools」
- 安装路径别改,默认C盘就行。我试过改D盘,后面有些库路径会出问题
2.1.2 配置CTP头文件和库路径
下载CTP接口包后,你会看到这样的目录结构:
CTP_API/
├── include/
│ ├── ThostFtdcMdApi.h
│ ├── ThostFtdcTraderApi.h
│ └── ThostFtdcUserApiDataType.h
├── lib/
│ ├── thostmduserapi.lib
│ └── thosttraderapi.lib
└── dll/
├── thostmduserapi.dll
└── thosttraderapi.dll
在VS里这样配:
- 项目属性 → C/C++ → 常规 → 附加包含目录:添加include路径
- 链接器 → 常规 → 附加库目录:添加lib路径
- 链接器 → 输入 → 附加依赖项:写入thostmduserapi.lib;thosttraderapi.lib
- 把两个dll文件复制到你的exe输出目录(或者系统PATH里)
2.2 Linux下的C++编译环境配置
Linux环境做CTP开发,通常是为了部署在服务器上。毕竟Linux的稳定性比Windows强不少。
我自己的生产环境就是CentOS 7,跑了两年多没重启过。
2.2.1 安装编译工具链
# CentOS/RHEL
sudo yum install -y gcc gcc-c++ make cmake
# Ubuntu/Debian
sudo apt-get install -y build-essential cmake
注意:CTP接口在Linux下也是32位的。你需要安装32位兼容库:
# CentOS
sudo yum install -y glibc-devel.i686 libstdc++-devel.i686
# Ubuntu
sudo apt-get install -y g++-multilib libc6-dev-i386
2.2.2 编写CMakeLists.txt
我个人喜欢用CMake管理项目,跨平台方便。给你一个我常用的模板:
cmake_minimum_required(VERSION 3.10)
project(CTPDemo)
set(CMAKE_CXX_STANDARD 11)
# 32位编译
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
# CTP头文件
include_directories(/path/to/CTP_API/include)
# CTP库文件
link_directories(/path/to/CTP_API/lib)
add_executable(ctp_demo main.cpp)
target_link_libraries(ctp_demo
thostmduserapi
thosttraderapi
pthread
dl
)
2.3 Python封装层(pyCTP)安装
说实话,用C++写CTP接口,开发效率确实低。我后来大部分策略都用Python写,C++只做底层封装。
pyCTP是目前用得最多的Python封装库。它把CTP的C++接口用pybind11包装了一层,让你能在Python里直接调用。
2.3.1 安装pyCTP
# 推荐用pip安装
pip install pyctp
# 如果安装失败,试试指定版本
pip install pyctp==6.6.1
安装成功后,验证一下:
import pyctp
print(pyctp.__version__)
# 创建行情API实例
md_api = pyctp.CThostFtdcMdApi()
print("pyCTP安装成功!")
2.3.2 常见安装问题
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
| ImportError: DLL load failed | 缺少VC++运行库 | 安装Visual C++ Redistributable 2015-2022 |
| 找不到指定的模块 | CTP的dll文件不在PATH中 | 把thostmduserapi.dll和thosttraderapi.dll复制到Python目录 |
| OSError: [WinError 193] %1 不是有效的Win32应用程序 | Python是64位,但CTP是32位 | 安装32位版本的Python 3.8或3.9 |
2.4 网络延迟测试工具准备
做高频交易,网络延迟是命根子。你想想看,如果比别人慢1毫秒,遇到行情剧烈波动,可能一单就亏几十万。
所以我每次部署新环境,第一件事就是测网络延迟。
2.4.1 使用ping测试基础延迟
# Windows
ping -n 100 你的交易前置IP
# Linux
ping -c 100 你的交易前置IP
看平均延迟和丢包率。如果平均延迟超过5ms,或者有丢包,赶紧找网络管理员。
2.4.2 使用hping3测试TCP延迟
ping用的是ICMP协议,有些网络设备会优先处理ICMP,导致测出来的延迟比实际TCP延迟低。我更喜欢用hping3:
# Linux安装
sudo apt-get install hping3
# 测试TCP SYN延迟
hping3 -S -p 端口号 -c 100 你的交易前置IP
2.4.3 自己写一个延迟测试工具
说实话,ping和hping测的都是网络层延迟。但CTP交易是应用层协议,中间还有序列化、反序列化的开销。
我习惯自己写一个简单的测试工具:
# Python示例:测试CTP登录延迟
import pyctp
import time
class DelayTest:
def __init__(self):
self.start_time = 0
def OnFrontConnected(self):
# 记录连接时间
self.start_time = time.perf_counter()
def OnRspUserLogin(self, pRspUserLogin, pRspInfo, nRequestID, bIsLast):
if pRspInfo.ErrorID == 0:
end_time = time.perf_counter()
delay = (end_time - self.start_time) * 1000
print(f"登录延迟: {delay:.2f} ms")
# 运行100次,取平均值
test = DelayTest()
# ... 初始化API并登录 ...
2.5 本章知识体系总览
说了这么多,咱们用一张图把整个环境搭建的脉络理清楚:
这张图把咱们这章的内容串起来了。左边是Windows环境,中间是Linux环境,右边是Python封装层。三者最终都要服务于同一个目标:让CTP接口在你的机器上跑起来。
好了,环境搭好了,工具也准备好了。下一章咱们就开始真正写代码,从CTP初始化到登录认证,一步步来。
公众号:蓝海资料掘金营,微信deep3321