小散量化炒股記|只花幾秒鐘!多任務爬蟲獲取A股每日實時行情數據

歡迎你們訂閱《Python數據分析實戰:構建股票量化交易系統》小冊子,學完小冊上的知識點後,必定要學以至用的方式來輔助咱們分析股票! ​服務器

前言

​ 相信你們都據說了量化交易這個東西了吧!微信

量化交易是一種新興的系統化金融投資方法,它綜合多個學科的知識,用先進的數學模型代替人的主觀思惟制定交易策略,利用計算機強大的運算力從龐大的股票、債券、 期貨等歷史數據中回測交易策略的盈虧「機率」,經過管理盈虧的「機率」幫助投資者作出準確的決策。markdown

那麼,什麼纔是普通股民所適合的量化交易打開方式呢?網絡

本文就用一個接地氣的股票分析場景——多任務爬蟲獲取A股每日實時行情數據來和你們分享一下,普通股民如何去使用量化交易!多線程

多進程和多線程

咱們在獲取股票行情數據的時候,通常都用for...in循環的方式,可是面對幾千只股票過去幾年甚至十幾年的行情數據時,下載過程勢必會出現耗時過長的問題。app

我在書中**《Python股票量化交易從入門到實踐》**介紹了多進程和多線程的提速方案。當涉及複雜的計算、繁多的 I/O 操做時,能夠考慮使用多任務並行方式充分利用CPU多核性能來提升程序的執行效率。函數

在Python中因爲GIL機制的的存在,多進行和多線程在計算密集型和I/O密集型的任務場景中執行效率會有所不一樣,多線程更適合 I/O 密集型應用,多進程對於 CPU 密集型的應用表現更好。oop

書中咱們是以調用API接口方式獲取股票數據的,以此爲例分別介紹了for循環方式、多線程方式和多進程方式。性能

遍歷獲取股票池中前500只股票的1年的數據,測試的結果是:測試

for循環:55秒

8個線程:7.5秒

8個進程:7.8秒

適合爬蟲的多任務

對於爬蟲來講,它適合多線程仍是多進程呢?

爬蟲是基於網絡請求模塊urllib實現的。urllib3扮演了 HTTP 客戶端的角色,即向網絡服務器發送一個 HTTP 請求,而後等待網絡服務器的響應,這類任務屬於 I/O 密集型的任務。不一樣於計算密集型任務那樣會在整個時間片內始終消耗 CPU 的資源,I/O 密集型的任務大部分時間都在等待 I/O 操做的完成。

接下來咱們就以爬蟲方式獲取東方財富網股票每日實時行情數據做爲場景,擴展介紹下多線程的提速方案。

關於爬蟲的實現過程可參考知識星球如下主題:

咱們看到網頁上顯示總共有206頁,那麼咱們能夠將該任務分配給多個線程來完成,而不僅是讓一個線程去逐一讀取。

在 Python3 中內置了線程池模塊 ThreadPoolExecutor,經過 ThreadPoolExecutor模塊來實現多線程的處理。

對於爬蟲任務來講,每一頁僅僅是URL地址不一樣。所以按模塊的使用要求,將爬蟲任務crawer_daily()函數拆分爲執行函數map_fun( )和可迭代參數 itr_arg 兩部分。

關鍵代碼以下所示:

with ThreadPoolExecutor(max_workers=8) as executor:
    # map_fun 傳入的要執行的map函數
    # itr_argn 可迭代的參數
    # result 返回的結果是一個生成器
    results = executor.map(crawer_daily, itr_arg)
複製代碼

每一頁只有20只股票的數據,所以咱們須要把數據合併成一份DataFrame,最後保存爲本地的csv文件。

關鍵代碼以下所示:

for ret in results:
    df_daily_stock = df_daily_stock.append(ret, ignore_index=True)
df_daily_stock.to_csv("crawer_daily_stock/{}.csv".format(df_daily_stock["時間"].values[0]), columns=df_daily_stock.columns, index=True, encoding='GBK')
複製代碼

打開csv文件以下所示:

須要注意到的是我增長了「時間」列。由於我是在收盤爬取的,時間顯示2020-08-21 15:00:00,若是是在盤中獲取實時數據的話,對應的時間會體現數據更新的時間戳。

還有一個重要點是文件名,這裏我取的名字是「2020-08-21 15/00/00.csv」,若是是實時數據的話要體現出時/分/秒的信息。

關於測試的結果,我用了8個線程,執行的時間在6秒多。也就是說,若是咱們只增量更新日線數據,那麼天天只須要花6秒時間就能更新完當日A股市場所有股票數據。

因爲測試環境千差萬別,此處測試結果僅供你們參考。 你們也能夠親手對比下多線程和多進程的效率。

總結

經過這個簡單而又實用的股票量化場景,但願可以給廣大朋友對於量化交易有一個直觀的感覺。

而後,咱們應該升級本身的炒股方式了,把本身之前炒股的那套方法,抽象成策略模型,用量化的方法去全市場回測評估,而後讓程序幫助咱們監測行情的走勢。

這個纔是普通股民所適合的量化交易打開方式!

———————————————————————————————————————————————— 你們若是想對涉及到的知識點進行更全面、更體系的從0-1方式的介紹,這裏推薦給你們個人書籍《Python股票量化交易從入門到實踐》!天貓、京東、噹噹全面開售!

同時也歡迎你們關注個人微信公衆號【元宵大師帶你用Python量化交易】瞭解更多Python量化交易相關內容

例程中的代碼,上傳至《玩轉股票量化交易》知識星球(知識星球的目錄可點擊【閱讀】查看)。

相關文章
相關標籤/搜索