找回密码
 会员注册
查看: 29|回复: 0

Python结合同花顺实现A股自动交易(2024版)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71362
发表于 2024-9-9 17:05:52 | 显示全部楼层 |阅读模式
前言:该交易系统本人今年2月初完成开发,在模拟盘和实盘测试3个月,经过多次调优,基本可稳定执行;该交易系统只适合1支股票的买卖,若要同时进行多支股票交易,需自行再优化本代码;该交易系统结合同花顺双子星进行自动交易,采用的是Python的easytrader库,应用了控件模拟技术,考虑到交易软件的更新,未来可能会出现软件UI界面的变更(正常情况不会变化太大),导致控件ID号变化或位移,引起easytrader库执行失效(easytrader早已停止维护),若要长期应用,建议学习下Python开发环境的控件模拟知识去调整easytrader代码。小弟是Python和股票的初学者,本文不尽之处请各位多多包涵。正文一、开发环境1、Python:3.11  2、同花顺双子星(网上股票交易系统5.0)3、MySQL:8.0     记录每日收盘信息,也可以用Excel替代4、VsCode:1.885、定时执行专家:7.3   用来自动执行Python脚本,因为Windows计划任务不好用,寻找了多个软件,这是个人认为最满意的一个,价格36元,但只能注册一个电脑。二、交易逻辑1、本人每天从tushare下载股票行情数据,指标数据等,写入MySQL;2、下载完毕后根据Python写好的策略轮询每支股票,输出买入信号股票,发送到本人邮箱;3、每晚查看邮箱接收的建议买入股票信息,人工二次判断并选择一个待买入的股票,写入Excel;4、第二天开盘,Python交易代码唤起股票交易系统5.0,按照Excel的股票进行自动执行买入;5、买入成功后等待当天市场收盘,把该股票买入信息和收盘信息写入MySQL,为后续卖出做数据准备;6、第三天开盘,Python交易代码唤起股票交易系统5.0,并跟踪腾讯或新浪的该股实时数据,按照自己的代码策略自动进行股票交易,一旦卖出成功,退出代码监控,完成操作。以上1、2、4、5、6都是代码自动执行,无需人工介入;三、自动交易代码说明1、引入必要的python库   数据库访问的代码为了安全和统一管理,我放在了其他目录;importeasyquotationaseqimportpandasaspdimporteasytrader,pymysql,datetime,time,systalib_path='c:/***/Pytools'sys.path.append(talib_path)importmysql_connasconn2、打开交易软件#登陆交易软件user=easytrader.use('ths')user.connect(r'c:\同花顺软件\同花顺\xiadan.exe') 注意:结合同花顺自动执行交易,必须手动现登入同花顺交易系统,保持交易系统在线状态3、关于easytrader的用法获取资金状况:user.balance获取持仓:user.position买入:user.buy('162411',price=0.55,amount=100)卖出:user.sell('162411',price=0.55,amount=100)一键打新:user.auto_ipo()撤单:user.cancel_entrust('buy/sell获取的entrust_no')查询当日成交:user.today_trades查询当日委托:user.today_entrusts刷新数据:user.refresh()需要对同花顺客户端按以下设置,不然会导致下单时价格出错以及客户端超时锁定:系统设置>界面设置:界面不操作超时时间设为0;系统设置>交易设置:默认买入价格/买入数量/卖出价格/卖出数量都设置为空;同时客户端不能最小化也不能处于精简模式;注意,需要设置客户端的编辑模式才能够成功输入数据:#设置客户端编辑文本形式:type_keysuser.enable_type_keys_for_editor()小贴士:同花顺交易客户端为防止外部命令执行的安全性,加了验证码功能,每次调取资金状况或持仓情况等,都会要求输入验证码,不过easytrader也已支持了验证码自动加载的功能,具体用法请网上百度,这里不再细说,主要就是需要安装pytessercat模块,安装tesseract程序,配置环境变量。但是pytessercat模块内的代码和python3.11版本有冲突,需要微调才能正常执行,修改Python311\Lib\site-packages\easytrader\grid_strategies.py文件a、大概是在115行开始需要修改:iflen(captcha_num)==4:#self._trader.app.top_window().window(#control_id=0x964,class_name="Edit"#).set_text(#captcha_num#)#模拟输入验证码captcha_input=self._trader.app.top_window().window(control_id=0x964,class_name="Edit")captcha_input.set_focus()#确保验证码输入框获得焦点captcha_input.type_keys(captcha_num,with_spaces=True)#输入验证码time.sleep(1)self._trader.app.top_window().set_focus()pywinaut
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:09 , Processed in 1.558007 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表