在量化投資系列教程中,我們從理論上介紹了量化回測的基本原理和思路,并進(jìn)行了一定的實(shí)戰分析和演練。但是并沒(méi)有涉及到實(shí)際交易的場(chǎng)景。
在開(kāi)始之前,我們需要明確什么策略需要使用自動(dòng)交易的方式。我們前面的教程都是基于日線(xiàn)的策略,這樣的日線(xiàn)策略并不需要自動(dòng)化交易,因為你只需要提前一天算好第二天需要買(mǎi)入的股票即可。
什么情況下需要本文的自動(dòng)交易?
1.你的策略是基于 分鐘線(xiàn) (1,5,15,60) 的。
2.你的日線(xiàn)策略在購買(mǎi)的時(shí)候需要判斷前一天封盤(pán)前的股票數據,并提前一天買(mǎi)入。
3.你希望能自動(dòng)打新。
除了這三種情況,其他的策略都不適合使用本文的自動(dòng)交易,包括秒級別的策略,因為Easytrader是基于GUI層面(圖形界面)實(shí)現的自動(dòng)化接口,而非API層面,因此實(shí)時(shí)性不會(huì )很高,而且是串行形式的,并不適合秒級策略。
此外,Easytrader對券商有一定的要求:
目前支持 海通客戶(hù)端、華泰客戶(hù)端、國金客戶(hù)端、雪球,還有通用同花順客戶(hù)端(指的是那些基于同花順修改的券商軟件版本)。
在開(kāi)始自動(dòng)交易前,請確認你的策略是可靠的,否則不要輕易嘗試自動(dòng)交易。另外交易邏輯的處理也需要非常謹慎,錯一行代碼可能損失的是幾千塊甚至不止。所以,一開(kāi)始執行自動(dòng)交易的時(shí)候,推薦只用很小一部分的本金。
本文只會(huì )介紹Easytrader的安裝方法和基本使用方法及構建監控股票池的重要性,其他深入介紹將于后面的 量化投資系列教程10 中介紹,敬請期待。
一個(gè)小小的預告
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪(fǎng)問(wèn)這篇文章:超詳細Python安裝指南 進(jìn)行安裝。
如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細指南。
輸入命令安裝依賴(lài):
1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install easytrader
看到 Successfully installed xxx 則說(shuō)明安裝成功。
某些券商在登錄的時(shí)候可能需要識別驗證碼,這時(shí)候需要下載tesseract:
1.下載并安裝tesseract
前往 tesseract-ocr 官網(wǎng)下載二進(jìn)制包,此外你也可以在Python實(shí)用寶典公眾號后臺回復: tesseract,直接獲得tesseract的安裝包。
雙擊下載下來(lái)的安裝包,然后傻瓜式安裝就可以,這里只需要注意一點(diǎn):
安裝過(guò)程中有一個(gè)讓你選擇 Additional language data(download) 表示選擇的話(huà)幫你下載語(yǔ)言包,這里最好不要選擇勾選,因為勾選的話(huà),安裝過(guò)程非常慢,本教程只需要用到數字和英文識別而已。
2.配置環(huán)境變量
右擊我的電腦/計算機,選擇屬性,然后選擇高級屬性設置,選擇環(huán)境變量,在系統變量的path變量中添加你的 tesseract 目錄就可以了
3.判斷是否安裝成功
在命令行中輸入:
tesseract --version
出現下面的提示說(shuō)明安裝成功:
這一章將介紹Easytrader的基本使用方法、包括客戶(hù)端連接、獲取資金狀況、獲取持倉、買(mǎi)入、賣(mài)出、一鍵打新、撤單。
在開(kāi)始之前,請對客戶(hù)端調整以下設置,不然會(huì )導致下單時(shí)價(jià)格出錯以及客戶(hù)端超時(shí)鎖定。
系統設置 > 界面設置: 界面不操作超時(shí)時(shí)間設為 0
系統設置 > 交易設置: 默認買(mǎi)入價(jià)格/買(mǎi)入數量/賣(mài)出價(jià)格/賣(mài)出數量 都設置為 空
同時(shí)客戶(hù)端不能最小化也不能處于精簡(jiǎn)模式。
在Windows機器上下載好我們在文首提到的幾個(gè)券商客戶(hù)端、準備好Python相關(guān)的依賴(lài),即可開(kāi)始嘗試自動(dòng)登錄客戶(hù)端:
import easytrader
# 海通客戶(hù)端
user = easytrader.use('htzq_client')
user.prepare(user='用戶(hù)名', password='明文密碼')
# 華泰客戶(hù)端
user = easytrader.use('ht_client')
user.prepare(user='用戶(hù)名', password='明文密碼', comm_password='華泰通訊密碼,其他券商不用')
# 國金客戶(hù)端
user = easytrader.use('gj_client')
user.prepare(user='用戶(hù)名', password='明文密碼')
# 雪球
user = easytrader.use('xq')
user.prepare(user='用戶(hù)名', password='明文密碼')
# 通用同花順客戶(hù)端, 指對應券商官網(wǎng)提供的基于同花順修改的軟件版本, 如(銀河的雙子星)
user = easytrader.use('ths')
user.prepare(user='用戶(hù)名', password='明文密碼')
選擇你的客戶(hù)端,將其他的客戶(hù)端去掉,運行這個(gè)py文件,程序就會(huì )開(kāi)始自動(dòng)登錄,期間會(huì )識別很多次驗證碼,經(jīng)常會(huì )識別錯誤,沒(méi)關(guān)系,讓他慢慢重試即可。
如果你識別驗證碼的時(shí)候報了錯,程序停止了下來(lái),那是因為你沒(méi)安裝 tesseract, 回到第一步安裝tesseract即可。
獲取資金、持倉情況的時(shí)候,程序都會(huì )自動(dòng)化地進(jìn)入相關(guān)界面獲取信息。有時(shí)候也需要輸入驗證碼,這時(shí)候easytrader也會(huì )自動(dòng)識別,請不要介入。
import easytrader
# 國金客戶(hù)端
user = easytrader.use('gj_client')
user.prepare(user='用戶(hù)名', password='明文密碼')
# 獲取資金狀況
balance = user.balance
print(balance)
# [{'參考市值': 21642.0,
# '可用資金': 28494.21,
# '幣種': '0',
# '總資產(chǎn)': 50136.21,
# '股份參考盈虧': -90.21,
# '資金余額': 28494.21,
# '資金賬號': 'xxx'}]
# 獲取持倉情況
position = user.position
print(position)
# [{'買(mǎi)入凍結': 0,
# '交易市場(chǎng)': '滬A',
# '賣(mài)出凍結': '0',
# '參考市價(jià)': 4.71,
# '參考市值': 10362.0,
# '參考成本價(jià)': 4.672,
# '參考盈虧': 82.79,
# '當前持倉': 2200,
# '盈虧比例(%)': '0.81%',
# '股東代碼': 'xxx',
# '股份余額': 2200,
# '股份可用': 2200,
# '證券代碼': '601398',
# '證券名稱(chēng)': '工商銀行'}]
買(mǎi)入賣(mài)出時(shí)設定股票代碼,價(jià)格和數量即可:
import easytrader
# 國金客戶(hù)端
user = easytrader.use('gj_client')
user.prepare(user='用戶(hù)名', password='明文密碼')
# 買(mǎi)入
user.buy('162411', price=0.55, amount=100)
# {'entrust_no': 'xxxxxxxx'}
# 賣(mài)出
user.sell('162411', price=0.55, amount=100)
# {'entrust_no': 'xxxxxxxx'}
# 一鍵打新
user.auto_ipo()
# 撤單
user.cancel_entrust('buy/sell 獲取的 entrust_no')
# {'message': '撤單申報成功'}
如果資金不足或可用證券數量不足,程序會(huì )報錯,這時(shí)候請注意把錯誤except出來(lái),不然你的檢測周期可能因此中斷,如果是無(wú)人值守的程序,可能整個(gè)程序都會(huì )停止。
使用Easytrader前為什么需要構建股票池?如我們前面提到的,Easytrader是基于GUI層面的自動(dòng)化交易接口,它會(huì )進(jìn)入如下模樣的界面進(jìn)行自動(dòng)化操作:

如果你的監控對象太多,有多個(gè)對象同時(shí)符合策略,它會(huì )一個(gè)一個(gè)地進(jìn)行操作,容易耽誤下個(gè)周期的計算,因此推薦構建一個(gè)50只股票左右的股票池。
你可以根據基本面構造你的股票池,比如最近幾年年報中,扣非凈利潤均有所增長(cháng)的企業(yè),或是在你的策略下表現最好的50只股票(當然未來(lái)不一定靠譜)。
無(wú)論你怎么構造,請記錄下這些股票(最好是數組變量的形式),證券市場(chǎng)的前綴在前,代碼在后,比如 sh600519:
# 以2000元的價(jià)格買(mǎi)入100股sh600519, 貴州茅臺
user.buy('sh600519', 2000, 100)
當然,此時(shí)會(huì )報錯:

聯(lián)系客服