策略跑得比熊貓還慢?--您也許錯過了閃電俠Deque

還在用pandas處理tick數據?看看怎樣將策略效率提升1000倍.


我們在設計量化交易系統時有一個非常重要的性能指標,即“內部響應時間”。該指標爲從系統收到信息(比如價格數據)到發出委託的時間間隔。該指標只和量化交易系統內部處理數據的性能相關,和交易所、經紀商、天氣或其他任何外部環境都無關聯(也就是純粹是您自己編程水平的問題)。

內部響應時間

如果一個投資者的交易系統有更短的內部響應時間,那麼在其他條件相同的情況下,他就能更快地發出委託,更快地成交。如果衆多投資者採用相同或比較相似的策略(多虧了我們的科普工作,現在您也知道專業機構的策略思路了),那麼速度最快的那個投資者就會佔據最有利的地位,不但能夠第一個入場成交,還能先人一步去止盈止損。

搶帽子的速度

由於目前國內主要期貨交易所的行情一般是500毫秒(1毫秒爲千分之一秒)一個切片,我們的交易一般也就在毫秒級別完成。

如何去衡量策略代碼的執行速度呢?

神通廣大的Python可以實現的方式有很多,比如timeit函數。
timeit函數

還記得我們曾經介紹過如何用真格量化跑tick策略麼,當時用的是Numpy裏的array來處理一系列tick數據。這是否是最快的方法呢?我們可以用timeit來測測速度。

測試速度

比如我們拿一個2×1000的數組來模仿針對tick數據的隊列操作,即用一個隊列存儲5行數據,每行兩個整數,有新的一行數據時就對這個隊列進行先入先出的更新:
隊列測試

我們選來進行速度競賽的選手包括Numpy、Pandas和Deque(還有其他的選手您可以自己試試),看看誰跑得更快。

測試結果如下:

**Deque :

0.00146322382114秒

Pandas :

2.10415453728秒

Numpy Array :

0.00657957320599秒**

跑得最快的Deque居然只用1.46毫秒就完成了操作,Numpy用了6.58毫秒,而Pandas用了驚人(慢得驚人)的2.1秒!

在這個隊列操作上,Deque的速度是Pandas的1438倍,Numpy的速度是Pandas的320倍。

速度對比

我們可以說,如果您不加考慮就使用Pandas來頻繁處理隊列數據,那很可能就輸在了起跑線上。您的策略程序“內部響應”時間就已經將您排除在高頻交易的朋友圈之外了。

如果您還在抱怨程序跑不快,不妨用timeit檢查一下到底是哪個地方掉了鏈子。
熊貓發動機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章