ctp_bridge_native 是 trader 的本地 C++ 扩展,用于通过 pybind11 直连 CTP Thost API。
CMakeLists.txt:构建入口src/py_module.cpp:CtpClient导出与回调桥接api/win、api/linux:Thost 头文件与库
在 native/ctp_bridge 目录下执行 CMake 构建。
当前构建设置:
- C++ 标准:
C++23 - Windows + MSVC:启用
/std:c++latest与/utf-8
cd native/ctp_bridge
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Releasecd native/ctp_bridge
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j除了头文件,还需要把 CTP 动态库放到对应平台目录:
- Linux:
native/ctp_bridge/api/linux/thosttraderapi_se.sothostmduserapi_se.soDataCollect.so或LinuxDataCollect.so
- Windows:
native/ctp_bridge/api/win/- 对应的 Trader/Md/DataCollect 运行库(通常为
.dll,并与.lib配套)
- 对应的 Trader/Md/DataCollect 运行库(通常为
注意:前两个交易/行情库用于编译与链接 Python 扩展模块;
DataCollect库为行情链路运行时自动调用依赖,也必须放在对应目录。
编译成功后,通常模块输出在:
native/ctp_bridge/build
在项目根目录 config.yaml 的 ctp_native 章节确保:
gateway = pybindmodule = ctp_bridge_nativemodule_path = <构建输出目录>(例如native/ctp_bridge/build)
回到项目根目录执行:
python test/test_ctp.py
Linux 建议先做一次依赖检查(确认模块已正确链接 Thost 动态库):
ldd ctp_bridge_native.cpython-314-x86_64-linux-gnu.so输出中应能看到:
thosttraderapi_se.so => .../native/ctp_bridge/api/linux/thosttraderapi_se.sothostmduserapi_se.so => .../native/ctp_bridge/api/linux/thostmduserapi_se.so
按当前配置方案,只需在 config.yaml 里设置好 ctp_native.module_path,无需把扩展模块复制到项目根目录。
若需要企业微信日志推送,请在 config.yaml 的 weixin 章节补齐 CorpID、Secret(以及可选 AgentID、ToUser)。
当前 trader 已内置该推送能力,无需再单独运行 flower。
可选环境变量:
CTP_TEST_WARMUP_SECONDS:登录预热秒数CTP_TEST_INSTRUMENT:优先测试合约(若无效会自动回退)
-
ModuleNotFoundError: No module named 'ctp_bridge_native'- 原因:
ctp_native.module_path未指向构建目录。 - 处理:检查
config.yaml中ctp_native.module_path是否正确。
- 原因:
-
ImportError: undefined symbol: CThostFtdc...CreateFtdc...- 原因:模块未正确链接/加载 Thost 动态库。
- 处理:确认
api/linux下两个thost*.so文件存在,重新执行 CMake 构建,并用ldd验证依赖是否解析成功。