EasyTrader踩坑之旅(三)

栏目: Python · 发布时间: 5年前

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

快速阅读

​ 用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))  # 卖出股票

EasyTrader踩坑之旅(三)

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

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

EasyTrader踩坑之旅(三)

查看委托记录

我连着运行了两笔

EasyTrader踩坑之旅(三)

3.esseract -ocr的安装和配置

目前最新版是v5.0

EasyTrader踩坑之旅(三)

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

d:Program FilesTesseract-OCR

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

EasyTrader踩坑之旅(三)

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

tesseract -v

EasyTrader踩坑之旅(三)

3.2进行图像测试

在目录E:opensourceTHSTraderTHS 下默认有一个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

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

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

EasyTrader踩坑之旅(三)

【语法】: 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())

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

EasyTrader踩坑之旅(三)

看下面的注释代码:

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

EasyTrader踩坑之旅(三)

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

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

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

EasyTrader踩坑之旅(三)

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

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

EasyTrader踩坑之旅(三)

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

成功运行结果如下图所求

EasyTrader踩坑之旅(三)

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

5. 卖出股票出错

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

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

EasyTrader踩坑之旅(三)

查看源代码以后发现应该是某个控件的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代码块中。

EasyTrader踩坑之旅(三)

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

EasyTrader踩坑之旅(三)

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

EasyTrader踩坑之旅(三)

6. 买入股票

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

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

7. 联调测试

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

EasyTrader踩坑之旅(三)

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


以上所述就是小编给大家介绍的《EasyTrader踩坑之旅(三)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning Vue.js 2

Learning Vue.js 2

Olga Filipova / Packt Publishing / 2017-1-5 / USD 41.99

About This Book Learn how to propagate DOM changes across the website without writing extensive jQuery callbacks code.Learn how to achieve reactivity and easily compose views with Vue.js and unders......一起来看看 《Learning Vue.js 2》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具