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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM