
从模拟到实盘,理解Tushare的交易能力
很多人用Tushare获取行情数据,却不知道它也能连接实盘交易。Tushare本身不提供交易通道,而是通过对接券商接口,让你在Python里直接下单。股票和期货都支持,前提是券商开放了API。
股票与期货的差异
股票实盘接口通常走券商官方API,比如中泰、华泰、国金等。期货则多通过CTP接口,Tushare封装了部分功能。股票T+1,期货T+0,代码里要区分开。
第一步 环境与权限准备
安装Tushare库,版本建议1.2.89以上。

pip install tushare --upgrade
注册Tushare账号,获取token。实盘交易需要单独申请权限,部分接口是付费的。
期货CTP接口要额外安装tushare的扩展包,比如pip install tushare[ctp]。
第二步 绑定交易账户
股票券商API需要你提供资金账号、密码、通讯密码。Tushare的trader模块负责连接。
import tushare as ts
# 初始化交易接口
trader = ts.Trader(
broker='zhongtai', # 券商代码
user='你的资金账号',
password='交易密码',
comm_password='通讯密码',
token='你的Tushare token'
)
期货CTP连接参数不同,需要经纪商代码、投资者账号、密码、服务器地址。
trader = ts.Trader(
broker='ctp',
user='投资者账号',
password='密码',
broker_id='经纪商ID',
server='tcp://期货公司服务器地址'
)
连接成功后,trader.login()返回状态。账户资金、持仓可以通过trader.get_account()和trader.get_position()查询。
第三步 编写下单逻辑
股票下单用trader.order(),指定股票代码、价格、数量、买卖方向。
# 买入100股平安银行,限价12.5元
order_id = trader.order(
code='000001.SZ',
price=12.5,
volume=100,
direction='buy',
order_type='limit'
)
期货下单类似,但要指定合约代码,比如rb2310.SHF。期货有开平仓标志,offset='open'或offset='close'。
# 开多1手螺纹钢
order_id = trader.order(
code='rb2310.SHF',
price=3800,
volume=1,
direction='buy',
offset='open',
order_type='limit'
)
撤单用trader.cancel_order(order_id)。
第四步 实时行情与策略触发
实盘交易依赖实时行情。Tushare的realtime_quote可以获取股票实时盘口,期货用realtime_ctp。
# 获取股票实时行情
quotes = ts.realtime_quote(ts_code='000001.SZ')
策略里常结合均线、突破等条件。每次行情更新后判断是否下单。
price = quotes['price'][0]
if price > ma20:
trader.order(code='000001.SZ', price=price, volume=100, direction='buy')
第五步 风控与异常处理
实盘交易必须设置风控。单笔最大亏损、总仓位限制、撤单次数都要控制。
# 检查账户可用资金
account = trader.get_account()
available = account['available']
if available < 10000:
print('资金不足,停止交易')
网络断开、券商服务器维护都会导致连接失败。用try-except包裹交易操作,记录日志。
try:
trader.order(...)
except Exception as e:
print(f'下单失败: {e}')
# 重连或告警
常见坑与注意事项
股票实盘接口有频率限制,每秒最多几笔。期货CTP接口需要自行处理回报,比如成交、撤单。
Tushare的实盘功能依赖券商,不是所有券商都支持。开户前问清楚是否提供API。
期货保证金交易,杠杆放大风险。代码里务必计算保证金占用。
# 计算螺纹钢保证金
margin = price * 10 * 0.1 # 假设10吨/手,保证金率10%
股票卖出需要T+1,当天买入不能卖出。期货可以日内平仓。
一个完整的股票实盘示例
import tushare as ts
import time
trader = ts.Trader(broker='zhongtai', user='123456', password='xxx', comm_password='xxx', token='xxx')
trader.login()
while True:
quotes = ts.realtime_quote(ts_code='000001.SZ')
price = quotes['price'][0]
if price < 12.0:
trader.order(code='000001.SZ', price=price, volume=100, direction='buy')
break
time.sleep(3)
运行前先用模拟盘测试。Tushare有模拟交易接口,参数与实盘一致。
期货实盘的特殊处理
期货CTP接口需要订阅行情,trader.subscribe(['rb2310.SHF'])。收到行情后触发策略。
持仓管理用trader.get_position(),返回多头、空头持仓。平仓时方向相反,offset为close。
# 平掉多头持仓
trader.order(code='rb2310.SHF', price=3800, volume=1, direction='sell', offset='close')
期货有夜盘,注意交易时间。不同品种保证金和手续费不同,代码里动态获取。
安全与合规提醒
不要把密码硬编码在代码里,用环境变量或配置文件。
实盘交易接口需要券商授权,个人使用也要遵守规定。高频交易可能被限制。
Tushare社区有实盘案例,可以参考但不要直接复制。每个券商接口细节不同。
定期检查交易日志,对比成交记录。发现异常立即停止程序。
安装Tushare并获取token
申请实盘权限,确认券商支持API
用
ts.Trader连接账户获取实时行情,编写策略
调用
order()下单,cancel_order()撤单加入风控和异常处理
模拟盘验证后再实盘
股票和期货流程类似,期货多开平仓和保证金计算。Tushare实盘接口降低了程序化交易门槛,但风险控制永远第一。
