获取行情,连接 CTP 账户并读取可用资金。
1. 准备环境与凭据#
仅看行情不需要交易账户,可以直接完成下一节。
凭据保管:不要公开含 Token、账号或交易凭据的文件。
2. 获取行情#
- 将下面的代码保存为
hello_exsdk.py。 - 在安装 SDK 的同一 Python 环境中运行
python hello_exsdk.py。
import math
import time
from exsdk import ExApi
with ExApi(token="YOUR_TOKEN") as api:
symbols = api.query_symbols("FUTURE", exchange_id="SHFE", is_main=True)
if not symbols:
raise RuntimeError("No matching futures contracts")
symbol = symbols[0]
quote = api.watch_quote(symbol)
print("正在订阅", symbol, ";按 Ctrl+C 停止")
while True:
if not api.wait_update(deadline=time.time() + 10):
print("本次未收到更新,继续等待;请检查交易时段与合约")
continue
if quote.is_changing(["timestamp", "last_price"]):
q = quote.data()
if q.timestamp > 0 and math.isfinite(q.last_price):
print("收到行情", q.symbol, q.timestamp, q.last_price)运行结果:先打印订阅的合约,收到有效行情后打印合约、Unix 毫秒时间戳和最新价。按 Ctrl+C 停止并释放连接。
- 合约来自当前查询结果,列表中的第一项仅用于演示。
- 休市时可能持续等待;等待超时不等于断线,运行故障会以异常报告。
| 调用 | 作用 |
|---|---|
watch_quote() | 创建观察句柄 |
wait_update() | 推进更新 |
data() | 读取独立快照 |
多个订阅共用一个更新循环,详见 更新模型。
3. 连接 CTP 账户#
下面是独立的只读程序,不提交委托。接入前在个人中心绑定资金账号,并向期货公司准备以下配置:
| 配置 | 用途 |
|---|---|
broker_id | 期货公司代码 |
user_id | 已绑定的资金账号 |
password | 交易密码 |
front_url | 以 tcp:// 开头的交易前置,不能填行情前置 |
app_id | 客户端标识 |
auth_code | 客户端授权码 |
- 替换 Token 和六项 CTP 配置。
- 保存为
hello_ctp.py。 - 运行
python hello_ctp.py。
import time
from exsdk import ExApi, CtpAccount
account = CtpAccount(
broker_id="期货公司代码",
user_id="已在个人中心绑定的资金账号",
password="交易密码",
front_url="tcp://交易前置地址:端口",
app_id="客户端标识",
auth_code="客户端授权码",
)
with ExApi(token="YOUR_TOKEN", account=account) as api:
funds = api.watch_account()
print("正在等待 CTP 账户同步")
deadline = time.time() + 60
while api.trading_status() != "READY":
if time.time() >= deadline or not api.wait_update(deadline=deadline):
raise TimeoutError("CTP synchronization timed out")
print("账户已就绪,可用资金:", funds.data().available)运行结果:打印账户就绪和可用资金后结束。READY 表示登录与同步完成,不代表资金会随每笔行情即时刷新。
若超时或报错,按 CTP 账户与交易数据 和 错误处理 检查配置。SDK 不会默认创建模拟账户。
下一步#
- K 线与指标:订阅 K 线,计算指标。
- CTP 账户与交易数据:读取资金、持仓、订单和成交。
- 下单、撤单与结果跟踪:理解结果、平仓与撤单。
- 完整接口参考:按需查询参数和返回值。