zoukankan      html  css  js  c++  java
  • EasyTrader踩坑之旅(三)

    快速阅读

    ​ 用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 FilesTesseract-OCR

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

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

    tesseract -v
    

    3.2进行图像测试

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

    E:opensourceTHSTraderTHS>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
    

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

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

    1561785556900

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

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

    1561786459150

    看下面的注释代码:

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

    1561786562233

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

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

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

    1561787163260

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

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

    1561787224525

    现在我们再来运行一下结果
    成功运行结果如下图所求

    1561787314352

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

    5. 卖出股票出错

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

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

    1561787567835

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

    1561792172267

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

    1561792227797

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

    1561792276531

    6. 买入股票

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

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

    7. 联调测试

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

    1561793409643

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

  • 相关阅读:
    box-sizing: border-box的作用
    什么时候用created,什么时候用mounted
    圣杯布局
    关闭浏览器 清除session
    js this
    js 深拷贝
    经常犯的一些小错误
    语法:c++对关于空指针0/NULL/nullptr三者的演变
    常用的函数
    C++一些小技巧
  • 原文地址:https://www.cnblogs.com/hsapphire/p/11107105.html
Copyright © 2011-2022 走看看