2. 开发环境搭建:Windows/Linux下C++/Python开发环境配置
说实话,做量化交易系统开发,环境搭建这一步要是没弄好,后面全是坑。我见过太多人一上来就写代码,结果编译不过、链接报错、依赖冲突,折腾一整天。嗯,咱们先把地基打牢。
2.1 操作系统选择:Windows还是Linux?
我个人习惯是:开发用Windows,部署用Linux。为什么?Windows下的IDE确实好用,Visual Studio的调试体验没得说。但生产环境,尤其是交易服务器,清一色CentOS或Ubuntu Server。
你想想看,交易系统对稳定性要求极高。Linux的内核调度、网络栈、文件系统,在低延迟场景下确实比Windows有优势。我在项目中遇到过,同样的策略代码,Windows上跑平均延迟2毫秒,换到Linux优化后降到了0.5毫秒。
2.2 C++开发环境配置
Windows下的C++环境
Windows上我推荐用Visual Studio 2022 Community版,免费,功能全。安装时记得勾选:
- 使用C++的桌面开发
- Windows 10 SDK
- CMake工具(VS自带)
还有一个很多人忽略的点:环境变量。VS安装完后,要把 cl.exe 和 nmake.exe 的路径加到PATH里。不然你后面用CMake生成项目时会报找不到编译器。
# 检查VS编译器是否可用
cl.exe
# 如果提示"不是内部或外部命令",说明环境变量没配好
Linux下的C++环境
Linux上就简单多了,一条命令搞定:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential cmake gdb
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install cmake gdb
这里有个坑:gcc版本。量化交易系统经常要用到C++17甚至C++20的特性。Ubuntu 20.04默认gcc 9.3,够用。但CentOS 7默认gcc 4.8,太老了。我曾经在CentOS 7上编译gRPC,折腾了两天才发现是编译器版本不够。
2.3 Python开发环境配置
Python这块,我强烈建议用Anaconda或者Miniconda。为什么?因为量化交易涉及的Python库太多了,numpy、pandas、scipy、statsmodels...用conda管理环境,不会把系统Python搞乱。
# 创建独立的量化交易环境
conda create -n quant python=3.9
conda activate quant
# 安装常用库
pip install numpy pandas matplotlib
pip install ta-lib # 技术指标库
pip install vnpy # 开源量化交易框架
我个人习惯是:每个项目一个独立环境。这样不同项目之间不会互相干扰。有一次我同时维护两个策略,一个用pandas 1.3,另一个用pandas 2.0,要是没有虚拟环境,早就炸了。
2.4 CMake与Makefile构建
说到构建工具,CMake现在基本是C++项目的标配了。Makefile虽然也能用,但跨平台太麻烦。你想想看,Windows用nmake,Linux用make,Mac用...嗯,还是CMake省心。
一个典型的CMakeLists.txt长这样:
cmake_minimum_required(VERSION 3.16)
project(QuantTradingSystem)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找依赖库
find_package(Boost REQUIRED COMPONENTS system thread)
find_package(gRPC REQUIRED)
find_package(Protobuf REQUIRED)
# 添加可执行文件
add_executable(trading_engine main.cpp)
target_link_libraries(trading_engine
${Boost_LIBRARIES}
${gRPC_LIBRARIES}
${Protobuf_LIBRARIES}
)
构建命令也很简单:
# 在项目根目录下
mkdir build && cd build
cmake ..
cmake --build .
cmake -DCMAKE_BUILD_TYPE=Release .. 可以生成优化后的Release版本。Debug版本调试方便,但性能差很多。
2.5 依赖库管理:Boost、gRPC、Protobuf
这三个库是量化交易系统的核心依赖。我一个个说。
Boost库
Boost号称C++标准库的"试验田"。很多C++标准库的特性,最早都是在Boost里验证的。量化交易中常用的是:
- Boost.Asio:网络通信,处理行情推送和交易指令
- Boost.Thread:多线程,处理并发订单
- Boost.DateTime:时间处理,交易时间戳精度要求高
- Boost.Log:日志系统,记录交易流水
安装Boost:
# Linux
sudo apt-get install libboost-all-dev
# Windows
# 去官网下载预编译包,或者用vcpkg
vcpkg install boost
我在项目中遇到过一个问题:Boost版本冲突。不同模块依赖不同版本的Boost,编译时链接了错误的库,导致运行时崩溃。后来我统一用vcpkg管理所有依赖,再也没出过这种问题。
gRPC与Protobuf
这两个库是绑在一起的。Protobuf负责序列化,gRPC负责通信。在量化交易系统里,它们用来:
- 行情服务器和交易引擎之间的数据交换
- 策略模块和风控模块之间的指令传递
- 系统内部各组件之间的RPC调用
安装方式:
# Linux
sudo apt-get install protobuf-compiler libprotobuf-dev
sudo apt-get install libgrpc++-dev libgrpc-dev
# Windows(用vcpkg)
vcpkg install protobuf grpc
一个简单的Protobuf定义文件:
syntax = "proto3";
message OrderRequest {
string symbol = 1;
double price = 2;
int32 volume = 3;
enum Side {
BUY = 0;
SELL = 1;
}
Side side = 4;
}
message OrderResponse {
string order_id = 1;
bool success = 2;
string message = 3;
}
2.6 知识体系总览
下面这张图,是我整理的环境搭建知识体系。你可以把它当作一个检查清单:
2.7 环境验证
环境搭好了,怎么知道对不对?我一般跑一个简单的"Hello World"程序验证:
// test_env.cpp
#include <iostream>
#include <boost/version.hpp>
#include <grpcpp/grpcpp.h>
int main() {
std::cout << "Boost版本: " << BOOST_LIB_VERSION << std::endl;
std::cout << "gRPC版本: " << grpc::Version() << std::endl;
std::cout << "环境搭建成功!" << std::endl;
return 0;
}
如果能编译通过并正确输出版本号,恭喜你,环境搭建完成了。
公众号:蓝海资料掘金营,微信deep3321