快速阅读

​ 用THSTrader 调试同花顺自动下单的过程 。 主要原理是利用python函数pywinauto 自动获取同花顺上相应控件的值,进行模拟自动化的操作,不得不说python函数库的强大,其它语言非常也能做到。但是复杂度远远高于python,这个也是python变的越来流行的原因了。 所以现在数学专业抢码农的工作是挺好抢的。 利用esseract ocr进行券商验证码的识别,不过没有正式用起来,今天 没有碰到验证码出现的现象 。

1.今天跌的坑如下

第一坑:

​ 查看持仓数据的时候 ,一直没能得到返回结果,发现原码是是有验证码,当前是没有验证码的, 所以把验证码的先去掉,可能以后高频交易会再出现,现在先不管他。 不过源码中应该也判断下。

第二坑:

​ 查看持仓数据得不到结果,经查发现当前版本比原来的右键多了一人选面,复制功能已经排到第四了。原来是第三,所以在操作复制不到数据, 增加源码中向下移动的代码就可以了。

第三坑:

​ 联调的时候,源代码时间间隔太短,会导致失败,可以相应的把时间加长。 默认0.2 我改为了1,

第四坑:

​ 卖出股票的时候 ,最后有一个默认的弹出框,但是可以勾选不再出现, 代码里没有做应的检测,每次都是找,找不到的时候会报错,所以需要把他调过来。或者把代码放在try 里,直接认为是成功的就可以了。

2.卖出股票

 print(trader.sell(stock_no="162411", amount=100, price=0.51))  # 卖出股票

因为我持仓中没有这个股票 ,所以提示证券可用数量不足,卖个自已有持仓的。

 print(trader.sell(stock_no="601288", amount=100, price=4))  # 卖出股票

查看委托记录

我连着运行了两笔

3.esseract -ocr的安装和配置

目前最新版是v5.0

下载好以后,把安装的目录 添加到环境变量中。

d:\Program Files\Tesseract-OCR

按win+Pause=》高级系统设置-环境变量=在path加上tesseract 的安装路径

3.1查看当前tesseract的版本,看是否安装好。

tesseract -v

3.2进行图像测试

在目录E:\opensource\THSTrader\THS 下默认有一个tmp.png的测试图像,我们拿这个来测试

E:\opensource\THSTrader\THS>tesseract tmp.png output_1 -l eng
Tesseract Open Source OCR Engine v5.0.0.20190623 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 163

定位到目录 ,输入图像名称 和输出的文件名称以后,并指定是英文字体。

图片和运行结果如下:可以看到识别速度还是很快的。

【语法】: tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]

imagename=》目标图片文件名,需加格式后缀;outputbase=》转换结果文件名;

lang是语言名称(在Tesseract-OCR中tessdata文件夹可看到以eng开头的语言文件eng.traineddata),如不标-l eng则默认为eng

4.查询持仓数据

print(trader.get_position())

如果运行以后,有下面的错误发生,去原代码中把验证码识别的先注释掉,这个可能 是因为没有高频调用 ,所以现在复制持仓数据的时候,是没有让输入验证码的。

看下面的注释代码:

在THStrader.py中的132行注册掉。 就可以了

注释完上面代码以后,发现还是得不到数据,查看代码以后,再检查当前的同花顺界面,发现有区别

现在和复制功能 不是第四个,原来可能 是在第三个,因为原代码只有三个向下的移动。

所以我们改下代码,增加一下向下移动就可以了。

再增加一个向下移动的平移

 keyboard.SendKeys('{DOWN}') #表示键头向下移动一格
time.sleep(0.1)

现在我们再来运行一下结果

成功运行结果如下图所求

至此查看持仓数据就成功了。

5. 卖出股票出错

运行以下代码,发现卖出股票出错,好吧,我们继续分析 。

print(trader.sell(stock_no="601288", amount=100, price=4))  # 卖出股票

查看源代码以后发现应该是某个控件的id错了。

查看源代码:

我们只用下面代码就可以了。

    def __trade(self, stock_no, price, amount):
time.sleep(0.2)
self.main_wnd.window(control_id=0x408, class_name="Edit").set_text(str(stock_no)) # 设置股票代码
self.main_wnd.window(control_id=0x409, class_name="Edit").set_text(str(price)) # 设置价格
self.main_wnd.window(control_id=0x40A, class_name="Edit").set_text(str(amount)) # 设置股数目
time.sleep(0.2)
self.main_wnd.window(control_id=0x3EE, class_name="Button").click() # 点击卖出or买入 time.sleep(0.2)
self.app.top_window().window(control_id=0x6, class_name='Button').click() # 确定买入
self.app.top_window().set_focus()
time.sleep(0.2)

再接下去还有七行代码,应该是一个弹出框,但是可以设置以后不出现。 我的设置完以后就不出现了。 不知道怎么调出来,这个不影响结果,可以屏蔽或者加到try代码块中。

到这里基本 上卖出设置就可以了。

但是又试的时候发现提示不能交易 了,可能券商在维护了,今天是周六

6. 买入股票

买入股票和卖出股票类似 ,不过就是入口F2变为F1就可以了。

另个就是源码中时间间隔太短,联调的时候 会失败,可能相应的把时间间隔改为1

7. 联调测试

分为查余额,查持仓,卖出持仓股票,买入持仓股票

购买股票里面的control_id 值是用spy++找到的, 可以下个这样的软件查找相就的控件,这个有时间 再说下这个软件的用法。

EasyTrader踩坑之旅(三)的更多相关文章

  1. EasyTrader踩坑之旅总结

    ​ easytrader是用python写的可以调用主要券商完成自动化炒股的一个软件 ,但我用的是同花顺,在研究过程中,发现同花顺暂时调不通.后来搜索发现thstrade的源码作者说是easytrad ...

  2. Easytrader踩坑之旅(二)

    快速阅读 用的是THSTrader进行的调试,同花须必须用8.0的. 在新的机子重新安装requirements已经调用同花顺查股票余额. 继续昨天的话费. 昨天到最后,虽然显示了余额,但是和自己帐户 ...

  3. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  4. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

  5. Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...

  6. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

  7. vue踩坑之旅 -- computed watch

    vue踩坑之旅 -- computed watch 经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊 技术点 v ...

  8. Python踩坑之旅其一杀不死的Shell子进程

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...

  9. [代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...

随机推荐

  1. python day5 lambda,内置函数,文件操作,冒泡排序以及装饰器

    目录 python day 5 1. 匿名函数lambda 2. python的内置函数 3. python文件操作 4. 递归函数 5. 冒泡排序 6. 装饰器 python day 5 2019/ ...

  2. 使用vue脚手架搭建项目并将px自动转化为rem

    一.安装node.js环境 二.node.js安装完成后使用npm安装vue脚手架vue-cli和安装webpack,我这里用cnpm cnpm i @vue/cli -g //全局安装脚手架3.0 ...

  3. Jest did not exit one second after the test run has completed.

    使用 Jest 进行单元测试时出现如下问题: Jest did not exit one second after the test run has completed. This usually m ...

  4. Sqlite常用命令及基本知识

      sqlite菜鸟教程:http://www.runoob.com/sqlite/sqlite-tutorial.html   常用命令: .sqlite3 --从dos命令模式进入sqlite命令 ...

  5. 基于django的生成二维码的接口

    原理就是在视图层写一个将数据生成二维码的视图函数: def generate_qrcode(request, data): img = qrcode.make(data) buf = BytesIO( ...

  6. Linux之项目的部署

    前期准备 python3解释器 uwsgi wsgi(web服务网关接口,就是一个实现了python web应用的协议) virtualenvwrapper 路飞的代码 vue的代码 nginx (一 ...

  7. Nginx配置文件示例

    Nginx的配置文件示例:(仅供参考) 强烈建议先将默认的配置文件备份再进行操作! 请根据自己项目的实际路径来配置相关路径! uwsgi配置文件请参考:uwsgi配置文件示例 # For more i ...

  8. 模块之 time datetime random json pickle os sys hashlib collections

    目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ...

  9. 2013.4.24 - KDD第六天

    今天早上,中秋给我发了一个压缩包,里面有战德臣的课件,昨天我说我SQL没学好,他说给我发战徳臣课件,然后说我SQL不会的话可以看这个,还有两篇文 章<LDA数学八卦>以及<A Not ...

  10. Java内存模型、JVM内存结构和Java对象模型

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...