为什么散户也想玩程序化交易
手工盯盘累,情绪一上头就容易追涨杀跌。程序化交易用代码代替手指,按事先定好的规则买卖,既能克服人性弱点,又能盯住多个股票。很多股民手里最熟悉的软件就是同花顺,它自带下单功能,只是没开放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类名。

连接交易账户并查询资金
拿到对象后,先登录资金账号。同花顺的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是座桥,桥稳不稳靠你反复测试。股票和期货程序化交易的核心不是代码多花哨,而是风控和纪律。代码可以帮你执行纪律,但纪律本身得你定。
