tushare到底能不能下单
很多刚接触量化的朋友会有一个误会,觉得tushare是一个交易工具,装上就能自动买卖股票。事实是,tushare是一个数据接口库,它只负责帮你拿到行情、财务、指数这些数据,本身不包含任何下单功能。下单这件事必须交给券商接口或者第三方交易通道来完成。
说得更直白一点,tushare扮演的是“眼睛”和“大脑”的一部分,帮你看到价格、算出信号,但它没有“手”去按交易按钮。你要实现自动下单,必须找到另一套系统来执行委托。
自动下单的三种常见路径
目前散户能接触到的自动交易路径大致分三类。
第一类是券商官方提供的量化交易接口。部分券商对机构或高净值客户开放API,能直接发单、撤单、查持仓。这类接口稳定合规,但准入门槛高,通常要求资金量或者通过专业投资者认证。

第二类是第三方开源交易框架,典型代表是easytrader。它通过模拟客户端操作或者调用券商网页端的隐藏接口来实现下单,支持华泰、银河、国金等多家券商。优点是上手快、成本低,缺点是稳定性受券商客户端更新影响,存在被限制的风险。
第三类是券商提供的网页交易通道或手机交易协议的逆向封装。这类方案技术门槛较高,合规边界也比较模糊,适合有开发能力且愿意承担风险的交易者。
用tushare生成交易信号
tushare在这个闭环里的核心任务是产生买卖信号。你可以在每天收盘后拉取日线数据,计算均线、MACD、RSI等指标,判断第二天是否需要调仓。
举个实际场景:双均线策略。用tushare的daily接口获取某只股票过去60个交易日的收盘价,计算5日均线和20日均线。当5日均线上穿20日均线时产生买入信号,下穿时产生卖出信号。这个信号可以写入一个文本文件或者数据库,供下单程序读取。
tushare的pro_bar接口支持复权处理,能避免除权除息造成的均线失真。信号生成环节一定要用复权数据,否则回测和实盘会对不上。
把信号变成订单
信号有了,下一步是下单。以easytrader为例,基本流程是:启动券商客户端并登录,用easytrader连接客户端,读取信号文件,调用buy或sell方法发送委托。
代码层面大致是这样的逻辑:
import easytrader
import tushare as ts
import pandas as pd
# 初始化tushare
ts.set_token('你的token')
pro = ts.pro_api()
# 获取数据并计算信号
df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20240601')
df = df.sort_values('trade_date')
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()
last = df.iloc[-1]
signal = 'buy' if last['ma5'] > last['ma20'] else 'sell'
# 连接券商客户端
user = easytrader.use('ht_client')
user.connect(r'C:\华泰证券客户端路径')
# 根据信号下单
if signal == 'buy':
user.buy('000001', price=last['close'], amount=100)
elif signal == 'sell':
user.sell('000001', price=last['close'], amount=100)
这段代码只是演示逻辑,实盘要注意几个细节。价格要用实时行情或者对手价,不能直接用收盘价。委托数量要符合100股整数倍规则。当天买入的股票当天不能卖出,信号系统要区分可用持仓和总持仓。
风控和订单管理不能省
自动下单最怕的是信号出错或者程序跑飞。任何实盘系统都必须有硬风控。
单笔委托金额上限要设死。比如账户总资金20万,单只股票最大仓位不超过20%,那么单笔买入金额就不能超过4万。这个限制要写在下单函数里,信号再强烈也不能突破。
当日最大亏损额度也要有。如果当天累计亏损达到总资金的2%,程序自动停止开新仓,只允许平仓。这个逻辑用tushare的实时行情或者券商接口的持仓盈亏来计算。
订单状态要持续跟踪。委托发出去不代表成交,可能部分成交、可能废单。每笔委托要记录委托编号,定时查询状态,未成交的根据策略决定撤单还是等待。
合规与实战建议
用第三方工具做自动交易,合规风险要心里有数。easytrader这类工具本质上是模拟人工操作,券商如果检测到高频或者异常操作,可能限制账户交易权限。建议控制下单频率,不要做毫秒级抢单,普通策略一天一两次调仓完全够用。
实战起步阶段先用模拟盘跑通全流程。tushare获取数据、生成信号、easytrader连接模拟环境下单,整个链路跑一周以上,确认信号和委托没有偏差,再考虑小资金实盘。
实盘资金从一两万开始,跑一个月看成交回报和滑点情况。A股有最小价格变动单位,挂单价和对手价之间经常差一分钱,滑点对高频策略影响很大,低频策略相对可控。
tushare的积分权限也要注意。日线数据基础积分就能拿,实时行情或者高频数据需要更高积分。信号生成用日线完全够用,不需要追求实时数据,低频策略本来就不依赖盘中 tick。
一个完整的日频交易流程
收盘后15点30分,用tushare拉取全市场日线数据,计算策略信号,生成第二天的委托清单。早上9点25分集合竞价结束,读取委托清单,用easytrader发送委托。9点30分后查询成交回报,更新持仓记录。盘中不操作,收盘后再循环。
这个流程简单、稳定、可维护,适合大多数散户量化策略。tushare负责数据,easytrader负责执行,中间用文件或者数据库传递信号,各司其职。不要试图用一个脚本干完所有事,模块化才能排查问题。
自动交易的核心不是技术多复杂,而是流程可靠、风控到位、心态稳定。tushare是一个很好的数据起点,但它只是拼图的一块,把下单环节接上,整个系统才能跑起来。
