天天看點

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

前言

相信大家都聽說了量化交易這個東西了吧!量化交易是一種新興的系統化金融投資方法。

那麼,什麼才是普通股民所适合的量化交易打開方式呢?

本文就用一個接地氣的股票資料擷取場景——多任務爬蟲擷取A股每日實時行情資料來和大家分享一下,普通股民如何去使用量化交易!

多程序和多線程 

我們在擷取股票行情資料的時候,一般都用for...in循環的方式,但是面對幾千隻股票過去幾年甚至十幾年的行情資料時,下載下傳過程勢必會出現耗時過長的問題。

我在書中介紹了多程序和多線程的提速方案。當涉及複雜的計算、繁多的 I/O 操作時,可以考慮使用多任務并行方式充分利用CPU多核性能來提高程式的執行效率。

在Python中由于GIL機制的的存在,多進行和多線程在計算密集型和I/O密集型的任務場景中執行效率會有所不同,多線程更适合 I/O 密集型應用,多程序對于 CPU 密集型的應用表現更好。

書中我們是以調用API接口方式擷取股票資料的,以此為例分别介紹了for循環方式、多線程方式和多程序方式。

周遊擷取股票池中前500隻股票的1年的資料,測試的結果是:

  • for循環:55秒
  • 8個線程:7.5秒
  • 8個程序:7.8秒

适合爬蟲的多任務 

對于爬蟲來說,它适合多線程還是多程序呢?

爬蟲是基于網絡請求子產品urllib實作的。urllib3扮演了 HTTP 用戶端的角色,即向網絡伺服器發送一個 HTTP 請求,然後等待網絡伺服器的響應,這類任務屬于 I/O 密集型的任務。不同于計算密集型任務那樣會在整個時間片内始終消耗 CPU 的資源,I/O 密集型的任務大部分時間都在等待 I/O 操作的完成。

接下來我們就以爬蟲方式擷取東方财富網股票每日實時行情資料作為場景,擴充介紹下多線程的提速方案。

關于爬蟲的實作過程可參考知識星球以下主題:

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

我們看到網頁上顯示總共有206頁,那麼我們可以将該任務配置設定給多個線程來完成,而不隻是讓一個線程去逐一讀取。

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

在 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檔案如下所示:

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...
map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

需要注意到的是我增加了“時間”列。因為我是在收盤爬取的,時間顯示2020-08-21 15:00:00,如果是在盤中擷取實時資料的話,對應的時間會展現資料更新的時間戳。

還有一個重要點是檔案名,這裡我取的名字是“2020-08-21 15/00/00.csv”,如果是實時資料的話要展現出時/分/秒的資訊。

關于測試的結果,我用了8個線程,執行的時間在6秒多。也就是說,如果我們隻增量更新日線資料,那麼每天隻需要花6秒時間就能更新完當日A股市場全部股票資料。

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

由于測試環境千差萬别,此處測試結果僅供大家參考。 大家也可以親手對比下多線程和多程序的效率。

總結

通過這個簡單而又實用的股票量化場景,希望能夠給廣大朋友對于量化交易有一個直覺的感受。

然後,我們應該更新自己的炒股方式了,把自己以前炒股的那套方法,抽象成政策模型,用量化的方法去全市場回測評估,然後讓程式幫助我們監測行情的走勢。

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

說明

例程中代碼涉及到《Python股票量化交易從入門到實踐》書中知識點。比如:

第2章 量化語言Python的關鍵應用

    2.9  多程序和多線程的提速方案 

2.9.1  多程序和多線程 

2.9.2  Python 的 GIL 原理  

2.9.3  多任務的解決方案 

第 7 章 股票行情資料的擷取和管理

    7.5 用多任務為股票資料的擷取提速 

例程中的完整代碼上傳至知識星球(知識星球的目錄可點選【閱讀原文】檢視)。

往期回顧

小散量化炒股記|隻用一分鐘選出底部放量跳空上揚的強勢股

小散量化炒股記|不用追高!Python告訴你強勢股回調介入的位置

小散量化炒股記|一文揭秘主力、散戶資金流入流出的來龍去脈

小散量化炒股記|搭建本地化的股票量化資料庫這麼幾步就夠了

小散量化炒股記|Python資料透視表和熱力圖跟蹤行業闆塊熱點切換

小散量化炒股記|趨勢名額金叉死叉政策在震蕩行情中怎麼處理

更多量化交易内容掃碼加入星球!

—————————————————

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

元宵大師的量化交易書籍開售!!

京東、當當、天貓有售!!

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

加我微信了解詳情

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...

微信關注:‘元宵大師帶你用Python量化交易’

map文法擷取index_小散量化炒股記隻花幾秒鐘!多任務爬蟲擷取A股每日實時行情資料...