EasyTrader踩坑之旅(三)

快速閱讀

​ 用THSTrader 調試同花順自動下單的過程 。 主要原理是利用python函數pywinauto 自動獲取同花順上相應控件的值,進行模擬自動化的操做,不得不說python函數庫的強大,其它語言很是也能作到。可是複雜度遠遠高於python,這個也是python變的越來流行的緣由了。 因此如今數學專業搶碼農的工做是挺好搶的。 利用esseract ocr進行券商驗證碼的識別,不過沒有正式用起來,今天 沒有碰到驗證碼出現的現象 。python

1.今天跌的坑以下

第一坑:git

​ 查看持倉數據的時候 ,一直沒能獲得返回結果,發現原碼是是有驗證碼,當前是沒有驗證碼的, 因此把驗證碼的先去掉,可能之後高頻交易會再出現,如今先無論他。 不過源碼中應該也判斷下。github

第二坑:app

​ 查看持倉數據得不到結果,經查發現當前版本比原來的右鍵多了一人選面,複製功能已經排到第四了。原來是第三,因此在操做複製不到數據, 增長源碼中向下移動的代碼就能夠了。函數

第三坑:測試

​ 聯調的時候,源代碼時間間隔過短,會致使失敗,能夠相應的把時間加長。 默認0.2 我改成了1,字體

第四坑:3d

​ 賣出股票的時候 ,最後有一個默認的彈出框,可是能夠勾選再也不出現, 代碼裏沒有作應的檢測,每次都是找,找不到的時候會報錯,因此須要把他調過來。或者把代碼放在try 裏,直接認爲是成功的就能夠了。調試

2.賣出股票

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

由於我持倉中沒有這個股票 ,因此提示證券可用數量不足,賣個自已有持倉的。code

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

定位到目錄 ,輸入圖像名稱 和輸出的文件名稱之後,並指定是英文字體。

圖片和運行結果以下:能夠看到識別速度仍是很快的。

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++找到的, 能夠下個這樣的軟件查找相就的控件,這個有時間 再說下這個軟件的用法。

相關文章
相關標籤/搜索