基于上期技术 CTP (Comprehensive Transaction Platform / ThostFtdc) API 的 C++ 期货交易接口示例。
项目包含两个独立的可执行程序:
md— 行情订阅程序,连接 CTP 行情前置,登录后订阅指定合约的深度行情并打印输出。trader— 交易程序,连接 CTP 交易前置,登录后发送一笔限价买入报单作为示例。
两个程序共享同一份配置文件 trader.config,并使用 log4z 进行日志输出。
.
├── ThostFtdcMdApi.h CTP 行情 API 头文件
├── ThostFtdcTraderApi.h CTP 交易 API 头文件
├── ThostFtdcUserApiDataType.h CTP 数据类型定义
├── ThostFtdcUserApiStruct.h CTP 数据结构定义
├── libthostmduserapi.so CTP 行情 API 动态库
├── libthosttraderapi.so CTP 交易 API 动态库
├── md.cpp / md.h 行情程序入口
├── trader.cpp / tradeapi.h 交易程序入口
├── config.cpp / config.h 配置文件解析
├── log4z.cpp / log4z.h 日志库
├── build_md.sh 行情程序编译脚本
├── build_trader.sh 交易程序编译脚本
├── trader.config 运行时配置文件
├── error.xml CTP 错误码对照表
├── config/ 配置目录
└── log/ 日志输出目录
- Linux 环境,
g++编译器 pthread- 仓库自带的 CTP 动态库
libthostmduserapi.so与libthosttraderapi.so
运行前请确保系统能够找到这两个 .so,例如:
export LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH仓库提供了两个简单的编译脚本:
# 编译行情程序,生成 md
sh build_md.sh
# 编译交易程序,生成 trader
sh build_trader.sh对应的命令大致为:
g++ -lthostmduserapi -lpthread log4z.cpp log.cpp config.cpp md.cpp -o md
g++ -lthosttraderapi -lpthread log4z.cpp log.cpp config.cpp trader.cpp -o tradertrader.config 示例:
MD_FLOW_PATH = ./mdflow/
TRADER_FLOW_PATH = ./tdflow/
BROKER_ID = 2030
USER_ID = 00000068
PASSWORD = 123456
LOG_PATH = ./log/
TRADER_URL = tcp://asp-sim2-front1.financial-trading-platform.com:26205
MD_URL = tcp://asp-sim2-md1.financial-trading-platform.com:26213
字段说明:
| 字段 | 说明 |
|---|---|
MD_FLOW_PATH |
行情 API 的 flow 文件目录 |
TRADER_FLOW_PATH |
交易 API 的 flow 文件目录 |
BROKER_ID |
经纪商代码 |
USER_ID |
投资者账号 |
PASSWORD |
登录密码 |
LOG_PATH |
日志输出目录 |
TRADER_URL |
交易前置地址 |
MD_URL |
行情前置地址 |
默认配置中的 URL 指向 SimNow 仿真环境,真实账号请替换为对应经纪商的前置地址。运行前请创建
MD_FLOW_PATH、TRADER_FLOW_PATH与LOG_PATH对应目录。
# 启动行情接收
./md
# 启动交易程序(会自动登录并发送一笔示例订单)
./traderCtrl+C 可触发 SIGINT 让程序释放 API 资源后正常退出。
md 程序收到行情后会按以下顺序拼接成一行 CSV 写入日志:
TradingDay, InstrumentID, ExchangeID, ExchangeInstID,
LastPrice, PreSettlementPrice, PreClosePrice, PreOpenInterest,
OpenPrice, HighestPrice, LowestPrice, Volume, Turnover, OpenInterest,
ClosePrice, SettlementPrice, UpperLimitPrice, LowerLimitPrice,
PreDelta, CurrDelta, UpdateTime, UpdateMillisec,
BidPrice1..5, BidVolume1..5, AskPrice1..5, AskVolume1..5,
AveragePrice, ActionDay
CTP 错误码与说明位于 error.xml,可在 OnRspUserLogin、OnRspOrderInsert 等回调中根据 ErrorID 查询。
本项目为 CTP API 的入门示例,订阅合约(IF1407、IF1408)、报单参数(合约 cn0601、价格 50000、数量 10)等均为硬编码,仅用于演示 API 调用流程,投入实盘前请按需修改。