普通人怎么用API接口对接中信证券做实盘交易
摘要:
对接中信证券实盘API需要开通量化交易权限,获取接口文档,用Python等语言调用委托函数。个人资金门槛通常50万,机构可申请专用通道。实盘前务必用模拟盘测试订单状态,防止报单错误。

很多人手里有量化策略,跑回测的时候收益曲线很漂亮,一到实盘就抓瞎。问题往往出在券商接口上。中信证券作为国内头部券商,它的实盘API不是随便就能用的,这篇文章就把从开户到下单的完整路径拆开讲清楚。
中信证券实盘API的准入门槛
个人客户想直接用API对接中信证券,前提是开通量化交易权限。这个权限不是默认给的,需要向营业部申请。多数营业部的要求是资产规模达到50万以上,部分甚至要求100万。机构客户走专用通道,门槛更高但接口能力更强。
中信证券官方提供的接口叫“中信证券量化交易平台”,底层基于C++开发,对外提供Python、C#、Java等语言的封装库。散户最常用的是Python版本,因为策略开发社区大,调试方便。
申请流程分三步。第一步,联系你的客户经理,说明要做量化交易,申请开通“程序化交易报备”。第二步,签署风险揭示书和程序化交易协议。第三步,营业部审核通过后,会给你一个API接入账号和密码,以及一份接口文档。注意,这个账号和你的普通交易账号是分开的。

接口文档里的核心函数
拿到文档后,你不需要从头啃几百页。实盘对接真正用到的函数就下面这几个:
连接函数:初始化API,传入账号、密码、服务器地址。中信证券的服务器地址分生产环境和仿真环境,仿真环境用于测试。
委托函数:下单的核心。参数包括股票代码、买卖方向、价格、数量。中信证券的接口要求价格和数量都是整数,价格单位是分,数量单位是股。
撤单函数:传入委托编号,撤销未成交的订单。
查询函数:查资金、查持仓、查当日委托、查当日成交。
回调函数:当订单状态变化时,API会主动推送消息给你。你需要重写这个函数来处理成交回报。
这里要特别注意:中信证券的API不是标准的RESTful接口,它是基于socket的长连接。这意味着你的程序必须保持在线,断线后需要重连。很多新手策略跑着跑着不动了,就是socket断了没重连。
用Python写一个最小实盘下单脚本
下面这段代码演示了连接、下单、查询的基本流程。代码不能直接运行,你得把账号、密码、服务器地址替换成中信证券给你的真实信息。
import time
from citic_quant import TraderApi
class MyTrader(TraderApi):
def on_order(self, order):
print('订单更新:', order)
def on_trade(self, trade):
print('成交回报:', trade)
api = MyTrader()
api.login('你的账号', '你的密码', 'tcp://生产服务器地址:端口')
# 下单:买入 600030 中信证券 100股 价格 20.00元
order_id = api.insert_order(
symbol='600030',
side='buy',
price=2000, # 单位是分
volume=100
)
print('委托编号:', order_id)
# 查资金
account = api.query_account()
print('可用资金:', account['available'])
# 查持仓
positions = api.query_positions()
for pos in positions:
print(pos['symbol'], pos['volume'], pos['cost'])
# 保持连接
while True:
time.sleep(1)
这段代码里最关键的细节是价格单位。中信证券的接口用“分”作为价格单位,20.00元要写成2000。数量单位是“股”,不是“手”。如果你写成20.00,接口会报错。很多新手卡在这一步,以为是权限问题,其实只是单位错了。
期货API对接的差异
中信证券旗下有中信期货,期货实盘API的对接逻辑和股票类似,但有几个不同点。
期货接口支持双向交易,所以委托函数里需要指定开平方向。开仓、平仓、平今、平昨是四个不同的指令。股票没有这个概念。
期货的保证金制度意味着你的可用资金会被占用。下单前必须用查询函数确认保证金充足,否则会被拒绝。股票是全额交易,只要钱够就行。
期货有夜盘,API的服务器时间需要对齐。如果你的策略在夜盘运行,注意交易所的交易日划分和自然日不同。比如晚上21点的单子属于第二个交易日。
实盘前必须做的三件事
第一,用仿真环境跑通全流程。中信证券提供仿真服务器,行情是真实的,但资金是虚拟的。把你的策略在仿真环境跑至少一周,确认下单、撤单、成交回报都正常。
第二,处理异常情况。网络断了怎么办?订单被拒绝怎么办?部分成交怎么办?这些在仿真环境里都要模拟一遍。你的代码里必须有重连机制和错误重试逻辑。
第三,控制单笔报单量。交易所对程序化交易有报单频率限制。中信证券的接口也有流控,每秒最多报多少笔。超过限制会被封禁。建议单笔报单不超过10万股,每秒不超过5笔。
实盘对接不是一劳永逸的事。中信证券的接口版本会更新,交易所的规则会调整。你的代码需要定期维护。最稳妥的做法是把交易逻辑和接口调用分离,接口层封装成独立模块,这样接口变了只需要改一个地方。
声明
转载声明:欢迎分享本文,转载请注明出处!
点击复制: