本目录包含使用 CTP Go 包装库的示例代码。
main.go: 完整的行情和交易 API 使用示例.env.example: 环境变量配置模板文件(复制为.env后填入真实信息)README.md: 本说明文件
将 CTP 的 C 包装库文件放在以下位置之一:
./libs/目录- 环境变量
CTP_LIB_PATH指定的路径 - 可执行文件所在目录的
libs/子目录
需要的库文件:
- Linux:
libctp_md_c_api.so,libctp_trader_c_api.so - macOS:
libctp_md_c_api.dylib,libctp_trader_c_api.dylib - Windows:
ctp_md_c_api.dll,ctp_trader_c_api.dll
方式1:使用环境变量文件(推荐)
复制 .env.example 为 .env 并填入真实的账户信息:
cp .env.example .env
# 编辑 .env 文件,填入你的账户信息.env 文件内容示例:
CTP_USER_ID=your_user_id
CTP_PASSWORD=your_password
CTP_BROKER_ID=your_broker_id
CTP_MD_FRONT=tcp://182.254.243.31:40011
CTP_TRADER_FRONT=tcp://182.254.243.31:30001
方式2:使用系统环境变量
直接在系统中设置环境变量:
export CTP_USER_ID=your_user_id
export CTP_PASSWORD=your_password
export CTP_BROKER_ID=your_broker_idcd example
go mod tidy
go run main.go注意: 确保已正确配置环境变量,否则程序会提示缺少必要的配置信息。
通过嵌入 DefaultMdSpi 或 DefaultTraderSpi,你只需要实现需要的方法:
type MyMdSpi struct {
ctpgo.DefaultMdSpi // 嵌入默认实现
}
// 只实现需要的方法
func (s *MyMdSpi) OnRtnDepthMarketData(pDepthMarketData *ctpgo.CThostFtdcDepthMarketDataField) {
// 你的实现
}- 默认回调方法不会影响自定义回调方法:Go 的方法集(method set)机制确保如果你实现了某个方法,会优先使用你的实现
- 未实现的方法会使用默认的空实现(什么都不做)
- 这种方式可以让你只关注需要处理的回调,而不需要实现所有接口方法
如果你不想使用默认实现,也可以直接实现所有接口方法:
type MyMdSpi struct {
// 不嵌入 DefaultMdSpi
}
func (s *MyMdSpi) OnFrontConnected() { ... }
func (s *MyMdSpi) OnFrontDisconnected(nReason int32) { ... }
// ... 实现所有接口方法- 库文件路径:确保 CTP 库文件在正确的位置,或设置
CTP_LIB_PATH环境变量 - 敏感信息保护:不要在代码中硬编码账户信息,使用环境变量或
.env文件 .env文件:.env文件已添加到.gitignore,不会被提交到版本库,可以安全地存储敏感信息- 连接信息:使用真实的服务器地址和登录凭证
- 错误处理:实际使用时应该添加更完善的错误处理逻辑
- 线程安全:回调函数可能在不同的 goroutine 中调用,需要注意线程安全
- 穿透式认证:生产环境可能需要穿透式认证,需要使用
ReqAuthenticate接口