摘要: 通过Win32com库调用同花顺交易接口,实现股票程序化交易。从环境搭建到下单查询,手把手拆解自动化流程,同时警示合规风险与技术陷阱,适合想入门量化交易的散户。

为什么散户也想玩程序化交易

手工盯盘累,情绪一上头就容易追涨杀跌。程序化交易用代码代替手指,按事先定好的规则买卖,既能克服人性弱点,又能盯住多个股票。很多股民手里最熟悉的软件就是同花顺,它自带下单功能,只是没开放API。Win32com库像一把钥匙,能打开同花顺的窗口,模拟点击、读取数据,实现简单的自动化。

Win32com是什么,为什么选它

Windows系统上,很多软件对外提供COM接口,允许其他程序操控自己。Win32com是Python里调用COM组件的工具包,能把Python代码翻译成Windows能听懂的指令。同花顺PC版基于Windows开发,核心交易模块暴露了部分COM对象,用Win32com可以直接跟这些对象对话,绕开界面手工操作。相比按键精灵这类模拟鼠标键盘的方案,Win32com更稳定、响应更快,还能拿到结构化的返回数据。

准备工作:装库和打开同花顺

先安装Python,再用pip装两个库:pywin32(Win32com的完整包)和pandas(处理数据用)。打开同花顺客户端,登录交易账号,保持下单界面处于可操作状态。注意,不同券商版本的同花顺交易组件名称可能不同,常见的有THS_Trade或HexinTrade等。


import win32com.client

# 尝试连接同花顺交易接口

ths = win32com.client.Dispatch("THS_Trade.THSOrder")

print(ths)

这段代码会尝试创建COM对象。如果报错“无效的类字符串”,说明你的同花顺版本没注册这个组件,需要换用其他接口名。可以打开注册表编辑器,搜索“同花顺”或“Hexin”找到实际注册的COM类名。

如何使用Win32com库实现同花顺程序化交易

连接交易账户并查询资金

拿到对象后,先登录资金账号。同花顺的COM接口通常需要传入资金账号、密码、通讯密码等参数。伪代码如下:


ths.Login(资金账号, 交易密码, 通讯密码)

# 查询资金

account_info = ths.GetAccountInfo()

print(account_info)

实际参数名和顺序各版本不同,可以通过ths._oleobj_.GetTypeInfo()查看方法列表。稳妥的做法是用win32com.client.gencache.EnsureDispatch生成静态代理,再在Python里用dir()列出所有方法。

下单操作:买入和卖出

下单是核心。同花顺COM接口一般提供Buy和Sell方法,参数包括股票代码、价格、数量。股票代码要带市场标志,比如上海是600000.SH,深圳是000001.SZ。价格用浮点数,数量必须是100的整数倍。


# 买入100股浦发银行,限价10.5元

result = ths.Buy("600000.SH", 10.5, 100)

print(result)

卖出类似,把Buy换成Sell。下单后立刻查询委托状态,确认是否成交。可以用GetOrders()拿当日所有委托,或者GetTrades()拿成交回报。注意,频繁调用接口可能被同花顺限流,每次调用之间加个time.sleep(0.2)。

实时行情获取

程序化交易离不开行情。同花顺COM也提供了行情接口,比如GetQuote返回最新价、买卖五档。代码示例:


quote = ths.GetQuote("600000.SH")

print(quote.LastPrice, quote.BidPrice, quote.AskPrice)

如果接口不带行情,可以用win32com连接同花顺的行情组件,或者改用pytdx这类免费数据源。行情数据尽量在本地缓存,避免重复请求拖慢策略。

策略循环的骨架

一个完整的程序化交易脚本通常长这样:


import time

import win32com.client

ths = win32com.client.Dispatch("THS_Trade.THSOrder")

ths.Login("123456", "password", "comm_password")

while True:

    quote = ths.GetQuote("600000.SH")

    price = quote.LastPrice

    # 简单策略:价格低于10元买入100股

    if price < 10.0:

        ths.Buy("600000.SH", price, 100)

        time.sleep(60)  # 避免重复下单

    time.sleep(3)

这段代码每3秒刷新一次行情,满足条件就买入。真实策略要加入仓位管理、止盈止损、异常处理,比如网络断开时重连,下单失败时重试。

坑与风险:必须知道的几件事

合规红线:个人使用程序化交易不违法,但不能频繁报撤单影响市场,不能利用接口操纵股价。券商有权监控异常交易,轻则限制交易,重则上报证监会。

接口不稳定:同花顺官方不承诺COM接口的稳定性,客户端升级可能导致接口失效。每次升级后要重新测试。

技术门槛:Win32com调试麻烦,报错信息不直观。建议先用pythoncom.CoInitialize()初始化COM环境,再使用对象,否则多线程下容易崩溃。

资金安全:账号密码不要硬编码在脚本里,用环境变量或加密文件存储。脚本不要随便发给别人,防止被恶意利用。

性能有限:Win32com基于COM,单次调用耗时几毫秒到几十毫秒,不适合高频交易。做股票日內或波段策略足够,期货高频就别指望了。

期货能用同花顺程序化吗

同花顺期货通也有类似的COM组件,比如THS_Future,操作逻辑跟股票版一致。期货有夜盘,程序要处理交易时段,避免非交易时间下单被拒。期货杠杆高,程序化下单前务必做好风险控制,比如限制单笔最大手数、设置强制平仓线。

写给想动手的你

先用模拟盘跑通整个流程,确认下单、撤单、查询都正常,再上实盘。代码从简到繁,先实现单只股票的定时买卖,再加多股票、加条件判断。不要一上来就写复杂策略,接口调不通一切都是空谈。Win32com是座桥,桥稳不稳靠你反复测试。股票和期货程序化交易的核心不是代码多花哨,而是风控和纪律。代码可以帮你执行纪律,但纪律本身得你定。