
券商API的核心功能
券商提供的程序化交易接口主要实现以下核心功能:
实时行情订阅(tick级、K线数据流)
自动化委托报单(限价/市价/条件单)
全账户持仓动态监控
交割单流水实时推送
资金账户余额同步
主流券商采用CTP(综合交易平台)协议作为底层通信标准,通过thosttraderapi和thostmduserapi两个动态库提供C++接口。目前已有成熟的Python封装方案(如vnpy框架),支持跨平台部署。
# Python连接CTP的示例代码
from vnpy.api.ctp import MdApi, TdApi
class MyMdApi(MdApi):
def on_tick(self, tick: dict):
print(f"实时行情: {tick}")
class MyTdApi(TdApi):
def on_order(self, order: dict):
print(f"委托状态更新: {order}")
# 初始化实例
md = MyMdApi()
td = MyTdApi()
md.connect("tcp://180.168.146.187:10131") # 行情服务器地址
td.connect("tcp://180.168.146.187:10130") # 交易服务器地址
账户权限申请流程
开通程序化交易权限需完成以下关键步骤:

签署《程序化交易风险揭示书》并提交经纪商审核
通过交易所API接入资格测试(上交所Level2/深交所QTDS)
配置专用交易单元(席位代码绑定)
申请API接入密钥(AuthCode/AppID)
设置防火墙上行端口(通常为10130/10131)
特别注意:2023年新规要求私募基金管理人需额外备案策略代码,个人投资者单账户日委托上限为10000笔。
量化策略集成方案
行情数据解析
处理Level1行情时需注意:
# 解析tick数据结构示例
tick = {
"symbol": "IF2406",
"last_price": 3520.2, # 最新价
"volume": 153, # 成交量
"bid_price1": 3519.6, # 买一价
"bid_volume1": 25, # 买一量
"ask_price1": 3520.4, # 卖一价
"ask_volume1": 37 # 卖一量
}
对于Level2深度行情,需使用MDOrderBook对象解析五档行情中的 iceberg order(冰山订单)信息。
交易指令执行
报单接口需重点处理以下参数:
order_req = {
"symbol": "600519.SH",
"direction": "BUY", # 买卖方向
"offset": "OPEN", # 开平仓标志
"price": 1520.50, # 限价
"volume": 100, # 数量
"order_type": "FAK" # 立即成交剩余撤销
}
撤单策略建议设置时间窗口过滤,避免高频撤单触发交易所异常交易监控。
风控模块设计要点
硬性风控规则
单笔最大亏损阈值(动态回撤比例监控)
品种持仓限额(参考交易所限仓标准)
撤单率控制(不超过总委托量的30%)
每秒委托上限(股票≤3笔/期货≤5笔)
软性风控策略
基于波动率的动态仓位调节
跨品种相关性对冲
黑名单证券过滤(ST/*ST板块)
交易所熔断状态监听
# 简易风控逻辑示例
def risk_control(order):
if current_position() > 80: # 仓位超过80%
return False
if get_volatility("IF") > 0.15: # 波动率超过15%
order["volume"] *= 0.5 # 减半下单量
return True
常见问题解决方案
连接稳定性维护
实施心跳包机制(每30秒发送
CTP_ReqQryVersion)断线自动重连(指数退避算法重试)
使用冗余通道(主备服务器切换)
订单状态异常处理
未确认报单:启动本地OrderID与交易所SysID映射校验
错单返回:解析错误代码
ErrorID=11010100(资金不足)状态丢失:通过
QryOrder定时补全状态
最新监管要求
2024年北交所启用新一代API协议(BJSD),主要变更包括:
增加交易终端设备码绑定
委托单必须携带策略类型标识
实行流控令牌桶算法(每秒令牌数=基准值×权重系数)
程序化交易客户需单独报备MAC地址
重要提示:深交所已要求程序化交易账户在报单时附加AlgoID字段,用于识别量化策略类型(套利/做市/趋势跟踪等)。