前言
通常情況下,期貨量化交易策略都會以多標的、多策略、多周期進行組合交易。除股指期貨外,很少有單策略、單品種、單周期的情況。
這是為什么呢?
采用這樣的方法可以平滑資金曲線,減少回撤,因為不同類型策略、品種或周期之間可以做到互補,所謂"東方不亮西方亮"。
所以,作者將借助天勤量化交易平臺的量化開發包 tqsdk進行單品種多策略的開發。
首先,得要明白什么是多線程。
Python 多線程,同時做多件事
除了多進程能夠實現多任務外,"多線程"同樣也能夠實現多任務!
首先,多線程你可以看做是工廠車間里的多條生產線,比如手機零部件生產線和組裝生產線,兩者雖然做不同的事,但最終的目的是為了完成手機的生產。
而作者使用多線程,則是為了完成單品種多策略多賬戶的功能,兩個賬戶和兩個策略同時操作一個品種。
其次,多線程是共用一個內存空間。 比如車間內的廁所,每個工人都可以方便。
作者采用線程類的方式,來實現這個功能。
- 繼承 threading.Thread,在run()方法下編寫策略。
- 實例化以后調用start()方法啟動線程。
- 最后用join()方法,讓主線程等待所有子線程執行完畢后,才執行。
如下圖所示:
作者的兩個類,可以看做是兩個策略,我們在同一個文件中就可以實現多策略同時運行。
1. 通過dir()方法獲取到文件中所有的類名,函數名。
如下圖所示:
Run:
2. 當我們通過循環拿到策略名后,需要用eval()方法,將字符串(策略名)以Python的有效表達式來求值,因為我們遍歷出的是字符串數據類型。
如下圖所示:
Run:
3. 最后,通過start()和join()及兩個循環啟動線程和主線程等待,完成多任務的執行。
如下圖所示:
Run:
接下來,作者將借助天勤量化tqsdk量化開發包,實現這一功能。
Python單品種多策略多賬戶組合交易實現
作者將以雙均線及k線突破策略為例,演示如何實現單品種多策略及多賬戶同時運行。
1. 準備工作。
需要準備兩個賬號,可以是實盤賬戶、快期模擬賬戶、仿真賬戶。作者將采用快期模擬賬戶,如需模擬賬戶請在快期官網進行注冊。
2. 編寫策略。
作者已經將兩個策略寫好,傳入api及品種代碼就可以運行了。為了識別他們之間相互獨立,作者在k線更新時打印了兩個策略的持倉情況。
Run:
3. 啟動多線程,執行策略。
準備一個賬戶列表并將api存入api_list中,交易品種為螺紋鋼期貨2010合約。
用eval()函數將獲取到的策略名(字符串),轉化為Python的有效表達式并傳入參數后將其存入列表中。
Run:
小結。
通過上述3個步驟,完成了多策略多賬戶功能的實現。其中作者認為主要的是eval()方法以的使用,如果不采用這個方法,作者就只能通過把策略名每個都寫一遍。
一個策略還好,幾十個策略呢?或者說其中某些策略名字更改了,或者新增策略名后,很麻煩。
最后
多策略多周期組合是量化交易中常用的一些操作。除此之外,使用多線程還可以實現很多其他的功能。
文章及策略代碼僅供學習交流,切勿直接實盤。