
为什么需要实时行情数据
做股票短线、期货日内交易,行情延迟一秒就可能错过最佳买卖点。Choice 作为国内主流金融终端,提供了 API 接口让程序直接拉取数据。很多人第一次接触 Choice API 时,会被订阅、回调这些概念绕晕。这篇文章用大白话拆解怎么用 Choice 的 API 拿到实时行情,股票和期货都覆盖到,最后附上能直接跑的代码。
先搞清楚 Choice API 的两种模式
Choice 的实时行情接口分为两种:快照模式和订阅推送模式。
快照模式就像拍照,你调一次接口,它返回当前时刻的行情切片。适合低频策略,比如每分钟检查一次持仓。缺点是数据不是连续流,高频交易用不了。

订阅推送模式才是真正的实时行情。你告诉 Choice 要订阅哪些股票或期货合约,它就会在行情变化时主动把数据推给你。这就像你关注了某个主播,他一开播你就收到通知。期货 tick 级数据必须用这种方式。
准备工作 三件事必须提前做
申请 API 权限
Choice 的 API 不是默认开放的。你需要联系客户经理开通量化接口权限,拿到账号密码和服务器地址。个人用户通常需要购买相应套餐,机构用户权限更全。没有权限的话,后面代码写得再漂亮也跑不通。
安装 Python 环境
Choice API 支持多种语言,Python 最方便。推荐 Python 3.7 以上版本。安装官方提供的 ctypes 或 comtypes 包,通常随终端安装包一起提供。确认终端已经登录,并且 API 服务处于开启状态。
理解异步回调
订阅推送是异步的。你发起订阅请求后,程序不会停在那里等,而是继续往下走。行情来了,Choice 会调用你事先写好的回调函数。这个回调函数里写什么,决定了你怎么处理数据。把处理逻辑写得太重,比如回调里做复杂计算,会卡住整个推送通道。正确做法是回调里只存数据,另开线程处理。
股票实时行情获取实战
下面代码演示订阅两只股票的实时行情。注意 API 的具体函数名可能随版本更新,以官方文档为准。
from ChoiceAPI import ChoiceQuote
import time
# 初始化连接
quote = ChoiceQuote()
quote.login(username='你的账号', password='你的密码')
# 定义回调函数
def on_stock_quote(data):
# data 包含股票代码、最新价、买卖盘、成交量等
print(f"股票 {data['code']} 最新价 {data['last']} 成交量 {data['volume']}")
# 订阅股票
quote.subscribe_stock(
codes=['600519.SH', '000001.SZ'],
callback=on_stock_quote
)
# 保持主线程运行
while True:
time.sleep(1)
运行后,只要贵州茅台和平安银行有行情变化,回调函数就会打印最新价格。股票行情通常是 3 秒一个快照,不是逐笔推送,这点和期货不同。
期货实时行情获取实战
期货是 tick 级推送,每笔成交都会触发回调。代码结构类似,但订阅函数不同。
from ChoiceAPI import ChoiceQuote
import time
quote = ChoiceQuote()
quote.login(username='你的账号', password='你的密码')
def on_future_tick(data):
# data 包含合约、最新价、买卖一档、现手、持仓量等
print(f"期货 {data['code']} 最新价 {data['last']} 现手 {data['volume']} 持仓 {data['open_interest']}")
# 订阅期货合约
quote.subscribe_future(
codes=['IF2312.CFE', 'AU2312.SHF'],
callback=on_future_tick
)
while True:
time.sleep(1)
IF 是沪深300股指期货,AU 是黄金期货。期货行情变化极快,回调函数里只做数据入队或写内存,不要直接写数据库。
常见坑与避坑指南
权限不足导致订阅失败
如果代码没报错但收不到数据,先检查账号是否有实时行情权限。很多套餐只包含历史数据,实时行情需要额外开通。
回调阻塞
回调函数里做耗时操作,比如网络请求或复杂计算,会导致后续行情积压甚至丢失。务必用生产者消费者模式,回调只负责把数据放进队列,另一个线程从队列取出处理。
频繁重连
网络波动时 Choice API 可能断开。需要实现自动重连逻辑:捕获异常后等待几秒重新登录并重新订阅。重连后要重新订阅所有合约,因为断线期间订阅关系会失效。
行情时间戳对齐
股票和期货的行情时间戳精度不同。股票是毫秒级,期货是微秒级。做跨品种策略时,注意统一时间基准,否则回测和实盘会对不上。
从实时行情到交易信号
拿到实时行情只是第一步。接下来要计算指标、生成信号、发送委托。建议把行情模块和交易模块分开,行情模块只负责稳定接收数据,交易模块订阅行情模块的输出。这样任何一方升级都不会影响另一方。
对于期货高频策略,还要考虑 tick 数据的存储。每天一个合约的 tick 数据可能上百万条,用内存数据库如 Redis 暂存,收盘后再落地到磁盘。
Choice API 的实时行情功能足够强大,关键是理解订阅推送模型,处理好异步回调。把上面的代码跑通,再根据自己策略调整订阅列表和处理逻辑,就能搭建起一个可用的实时行情系统。