
同花顺全自动量化交易到底是怎么一回事
很多人一听到“量化交易”,脑子里浮现的是华尔街那帮人盯着六块屏幕,敲着看不懂的代码。其实拆开来看,量化交易就是让机器帮你盯着行情,该买的时候买,该卖的时候卖,不带情绪,不手抖。同花顺作为国内散户用得最多的行情软件,它自己带了一个“全自动量化交易”的功能,能把你的策略直接连到券商或期货公司的下单接口。
你不需要成为程序员,但得明白三件事:策略怎么给信号、订单怎么发出去、风险怎么管住。
股票和期货自动下单的底层逻辑
股票和期货的自动下单,走的是两条不同的通道。股票通过券商提供的交易接口,期货通过期货公司的CTP接口。同花顺在这个中间扮演了一个“翻译官”的角色——把你用Python或者同花顺自带公式写的策略,翻译成券商和期货公司能听懂的指令。
同花顺支持两种模式。一种是在同花顺客户端里直接勾选“全自动交易”,让你的策略在本地电脑上运行,信号触发后自动填单。另一种是用同花顺提供的Python接口,把策略写成脚本,通过thsauto这个库来调用。后者更灵活,适合做股票和期货的多品种组合。

一个最简的自动下单例子
假设你已经开通了同花顺的全自动交易权限,并且券商支持。下面这段Python代码展示了一只股票在均线金叉时自动买入100股的过程。
from thsauto import ThsAuto
import time
# 连接同花顺客户端
auto = ThsAuto()
auto.connect()
# 设定股票代码和均线参数
stock = '600519'
short_window = 5
long_window = 20
while True:
# 获取最近30根K线
klines = auto.get_klines(stock, period='1d', count=30)
closes = [k['close'] for k in klines]
# 计算均线
ma_short = sum(closes[-short_window:]) / short_window
ma_long = sum(closes[-long_window:]) / long_window
# 金叉且没有持仓,买入100股
if ma_short > ma_long and auto.get_position(stock) == 0:
auto.buy(stock, price=0, amount=100, order_type='market')
print('已发出买入指令')
# 死叉且持仓大于0,卖出全部
if ma_short < ma_long and auto.get_position(stock) > 0:
auto.sell(stock, price=0, amount=auto.get_position(stock), order_type='market')
print('已发出卖出指令')
time.sleep(60)
这段代码里price=0代表市价单,amount是股数。期货的代码几乎一样,只是把股票代码换成期货合约代码,比如rb2310,并且要注意期货有今仓昨仓的区别,平仓时要用close_today或者close_yesterday。
股票自动交易要避开的三个坑
股票T+1制度决定了你当天买的不能当天卖。自动交易策略如果没考虑这个规则,信号发出后第二天才能执行,滑点会比你想象的大。同花顺的自动交易接口里有一个can_use_volume字段,用来区分可用数量和总持仓。写策略的时候只能用可用数量来下单。
另一个坑是涨跌停板。股票涨停时你的买单根本排不进去,跌停时卖单也出不来。同花顺的接口会返回废单,你的程序得处理这种异常,不能傻等着成交。
佣金和印花税也要算进去。高频的自动交易看起来每次赚一点点,扣完手续费可能倒亏。股票卖出有印花税,期货没有,但期货有平今仓手续费加倍的情况。策略回测的时候把这些成本加进去,实盘才不会失望。
期货全自动量化交易的独特门槛
期货是保证金交易,自带杠杆。自动交易最怕的是仓位算错,比如你本来想开一手螺纹钢,结果因为合约乘数搞混了,开了十手,一个反向波动就爆仓。同花顺的期货接口里,volume_multiple这个字段必须查清楚。
期货还有夜盘。股票下午三点收盘,期货夜盘可能到凌晨两点半。你的自动交易程序得设置好交易时段,别在非交易时间发单,否则全是废单。同花顺的is_trading_time函数可以判断当前是否可交易。
期货的平仓规则比股票复杂。上期所的品种有平今仓和平昨仓的区分,大商所和郑商所不分。写自动平仓逻辑时,最好用auto.close_all()这种封装好的方法,它会自动判断今昨仓,省得你手动分拆。
一个期货自动止损的代码片段
# 假设已经持有螺纹钢多单1手
future_code = 'rb2310'
entry_price = 3800
stop_loss = entry_price * 0.98 # 亏损2%止损
while True:
current_price = auto.get_last_price(future_code)
if current_price <= stop_loss:
auto.close_all(future_code)
print('触发止损,已平仓')
break
time.sleep(5)
这段代码每5秒检查一次最新价,跌破止损线就全部平掉。实盘里可以用同花顺的条件单功能,不需要自己写循环,但自己写的灵活性更高,能加入移动止损、时间止损等逻辑。
全自动交易的风险控制才是命根子
策略赚钱不赚钱,回测说了不算。全自动交易最大的风险是程序失控。网络断了、同花顺客户端卡死、券商接口临时维护,这些都会让你的持仓暴露在风险里。
一个实用的做法是加一层“心跳检测”。程序每隔几秒往一个日志文件里写当前状态,另一个监控程序读这个文件,超过30秒没更新就自动发邮件或者短信报警。同花顺的自动交易本身不带这个功能,你得自己写。
仓位管理比信号本身更重要。股票自动交易单只股票不要超过总资金的20%,期货单品种保证金占用不要超过30%。同花顺的get_account_info能拿到总资产和可用资金,写策略的时候用这个数据来动态计算下单手数。
每天收盘后要做对账。同花顺的成交记录和你的策略日志核对一遍,看看有没有漏单、错单。股票和期货的结算单不一样,股票看交割单,期货看结算单。发现差异马上查原因,别等到第二天开盘才发现问题。
从手动到自动的心理转变
手动交易的时候,你盯着盘面,涨了兴奋,跌了恐惧。全自动交易把这些情绪剥离掉,但新的焦虑来了——程序会不会乱下单?半夜会不会偷偷开仓?
解决这个焦虑的办法是先用小资金跑模拟。同花顺支持模拟交易,股票和期货都能模拟。把你的策略在模拟盘上跑两周,每天检查一遍成交记录,确认逻辑和你脑子里想的一致。模拟盘跑顺了再上实盘,实盘第一周只用计划资金的十分之一。
自动交易不是印钞机,它只是一个执行工具。策略本身有没有正期望值,取决于你对市场的理解。同花顺的全自动量化交易降低了执行门槛,但选股、择时、仓位管理的思考,机器替不了你。