
同花顺到底能不能直接跑Python
很多刚接触量化的朋友都有一个朴素的想法:我平时看盘用同花顺,那能不能直接写个Python脚本,让同花顺帮我自动下单?答案很直接,同花顺官方并没有开放面向个人用户的Python交易接口。它有一个叫“同花顺智能交易”的东西,但那是给机构或者专业投资者用的,而且主要走的是C++或者它自己的脚本语言,不是咱们熟悉的Python。
那是不是就没戏了?也不是。市面上散户能用的路子有这么几条:券商自己的量化接口,典型代表是miniQMT,国金、国盛、华鑫等券商都有;第三方封装工具easytrader,它能模拟点击同花顺、通达信这些客户端的按钮;还有少数券商提供的HTTP API。今天咱们把这几条路掰开揉碎讲清楚,重点放在miniQMT上,因为它是目前散户做Python交易最稳、最合规的选择。
为什么同花顺不开放Python接口
说白了,同花顺是个行情和交易终端,它的核心收入来自卖软件给券商和散户。如果它自己开放了通用交易接口,那所有券商都变成它的通道,券商肯定不干。券商宁愿自己搞一套量化接口,把客户留在自己的交易系统里。

交易接口涉及资金安全、风控、合规,同花顺作为第三方软件商,不敢随便让用户用脚本直接下单。出一单事故,责任算谁的?所以它只开放给有牌照的机构,散户想用Python,只能绕道券商。
散户最靠谱的选择miniQMT
miniQMT是券商版QMT的简化版,本质上是券商的交易系统给你开了一个Python编程入口。你写Python代码,调用它的库,就能查行情、查持仓、下单撤单。它支持股票、ETF、可转债,部分券商还支持期货。
怎么开通
找你的客户经理,问一句“你们券商支持miniQMT吗”。一般要求账户资产几万到几十万不等,不同券商门槛不一样。开通之后,券商会给你一个安装包,装上QMT客户端,里面内置了Python环境。你不需要自己装Anaconda,用它的就行。
一个最简下单例子
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader
from xtquant.xttype import StockAccount
# 连接券商服务器
path = 'D:\\国金QMT\\userdata_mini'
session_id = 123456
xt_trader = XtQuantTrader(path, session_id)
acc = StockAccount('你的资金账号')
xt_trader.start()
connect_result = xt_trader.connect()
# 订阅行情并下单
xt_trader.subscribe(acc)
stock_code = '600519.SH'
xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, 100, xtconstant.FIX_PRICE, 1700.0)
这段代码的意思:连上券商,订阅账户,然后以1700块的价格买100股贵州茅台。实际跑之前,你得先用模拟盘试,别上来就实盘。
期货也能做
miniQMT对期货的支持取决于券商。有些券商只给股票,有些给股指期货、商品期货。如果你做期货,问清楚有没有CTP接口或者券商自己的期货通道。期货是保证金交易,风险比股票大得多,代码里必须加止损逻辑。
easytrader是怎么回事
easytrader是个开源库,原理是模拟鼠标键盘操作同花顺、通达信这些客户端。你写Python,它帮你点“买入”按钮,填价格数量,再点确认。听起来很神奇,用起来很脆弱。
客户端一更新,按钮位置变了,easytrader就可能失效。而且它必须在一台Windows机器上开着同花顺,不能关机。券商如果检测到异常操作,可能封你账户。所以这东西只适合小资金玩玩,或者做模拟盘。
import easytrader
user = easytrader.use('ths')
user.connect(r'C:\同花顺\xiadan.exe')
user.buy('600519', price=1700, amount=100)
三行代码买入茅台,看着简单,背后要处理窗口句柄、坐标、延迟。实际跑起来,十次有一两次失败。
期货交易的Python路子
期货比股票更依赖程序化交易,因为杠杆高、波动快,人手动下单根本来不及。国内期货CTP接口是标准,Python可以用vnpy、pytdx这些框架接。
vnpy是个成熟的量化框架,支持CTP、飞马、易盛等柜台。你装好vnpy,配置好经纪商代码、账号密码,就能写策略跑期货。它内置了K线合成、订单管理、风控模块。
from vnpy_ctp import CtpGateway
from vnpy.trader.engine import MainEngine
main_engine = MainEngine()
main_engine.add_gateway(CtpGateway)
main_engine.connect({'用户名': 'xxx', '密码': 'xxx', '经纪商代码': '9999', '行情地址': 'tcp://...', '交易地址': 'tcp://...'})
期货程序化最大的坑是滑点和手续费。你回测时赚得欢,实盘一跑,滑点吃掉一半利润。螺纹钢一跳10块钱,你策略一天交易20次,光滑点就200块。所以做期货量化,先算清楚成本。
实盘之前必须做的三件事
第一,用模拟盘跑至少一个月。miniQMT有模拟环境,vnpy也能接SimNow模拟柜台。别拿真金白银试错。
第二,把风控写进代码里。单笔最大亏损、当日最大回撤、总仓位上限,这些必须硬编码。人容易冲动,机器不会。
第三,检查你的网络和电脑。程序化交易最怕断网、断电。搞个云服务器,放在券商机房附近,延迟低还稳定。
几个容易踩的坑
过度拟合。你拿历史数据调参数,调到年化100%,一上实盘就亏。回测好看不代表未来赚钱。
忽略交易成本。股票有印花税、过户费、佣金,期货有手续费、滑点。高频策略尤其要注意。
券商接口限制。有些券商miniQMT限制每秒下单次数,或者限制单账户持仓。写代码之前问清楚。
同花顺客户端冲突。如果你用easytrader,同花顺不能同时手动操作,否则会抢焦点。
给普通人的建议
如果你只是想试试Python交易,先从股票模拟盘开始,用miniQMT写个简单的均线策略。跑通了,再考虑小资金实盘。期货风险太大,没有半年以上模拟经验,别碰。
同花顺本身不能直接跑Python,但它旁边的券商通道可以。选对工具,管住手,量化交易没那么神秘。