股票

我可以下載所有股票今天的開盤/收盤/最高/最低數據(批量)嗎?

  • June 16, 2020

**編輯:**關於

$$ duplicate $$指定:我仔細檢查了哪些數據源可線上獲得?的股票和股票指數部分中列出的所有網站 . 我無法在其中任何一個中找到我正在尋找的東西(如下面的文章中所述)。 如果我正在尋找的東西在那裡,並且不知何故我錯過了它,請提供一個特定的連結。


我想得到一張表格

symbol | open  | close | high  | low
A      | 90.32 | 89.81 | 90.58 | 89.46
AA     | 12.51 | 12.17 | 12.61 | 11.93
AAAU   | 17.20 | 17.35 | 17.35 | 17.09
⋮       ⋮       ⋮      ⋮      ⋮
ZYME   | 37.77 | 36.16 | 38.00 | 36.50
ZYNE   | 5.41  | 5.21  | 5.48  | 5.13
ZYXI   | 20.40 | 21.26 | 22.25 | 20.10

…其中數字列是今天的開盤價、收盤價、最高價和最低價,並且行範圍涵蓋在 AMEX、紐約證券交易所和納斯達克交易的所有約 9000 個符號。

我找到了許多以程式方式查詢個人數據的方法,但是使用這種方法,生成這樣的表至少需要約 9000 個查詢(假設我可以在單個查詢中獲得所有四個感興趣的值)。


**編輯:**從我目前收到的答案來看,上面的最後一段不夠明確。所以讓我更清楚一點:我對需要迭代超過 9000 個股票程式碼並為每個程式碼的數據查詢某個站點的解決方案不感興趣。


是否有一個低成本(最好是免費的)來源可以讓我以單個文件的形式批量下載此類數據(今天)?

我想今天的數據(如果它在午夜之前的某個時間可用)可能無法免費獲得。那麼,昨天的數據呢?

我研究了執行緒在哪裡下載在紐約證券交易所、納斯達克和美國證券交易所交易的所有普通股的列表?,並嘗試了其中提到的幾個網站,但除了一個例外,所有答案似乎都僅限於提供所有交易符號的列表,這不是我所追求的。

我提到的一個例外是可以從https://old.nasdaq.com/screening/company-list.aspx下載的文件,其中至少似乎包括昨天的收盤價。這仍然比我要找的要少。

我應該補充一點,我對腳本和數據處理沒有任何問題。換句話說,只要我能以某種形式下載數據,我就有信心在必要時能夠對其進行解析和重新格式化,以實現上述格式。

*編輯:*最初,我的問題要求提供免費資源,但是,在閱讀了哪些數據源可以線上獲得?我懷疑我找不到我正在尋找的免費數據。

我會嘗試 Python 中的 Pandas DataReader 庫(必須與 Pandas 分開安裝):該庫允許直接從 Google、Yahoo Finance 或 Morningstar 獲取股票數據:

安裝:pip install pandas_datareader

程式碼:(我剛剛輸入了這個,這是一個非常短的程式碼:在你的情況下,你不需要時間序列,而是一個橫截面,所以你可以將所有股權名稱添加到一個數組中並相應地調整程式碼, 一次獲取所有數據)。

在此處輸入圖像描述

您可以使用 Python 庫(例如 PandasDatareader)來下載數據。這裡的主要問題是您需要要下載的股票的程式碼列表,而手動編寫 9000 個程式碼並不是最好的。您可以利用維基百科為您提供主要索引中的程式碼列表這一事實。以下是創建 S&P500 的所有程式碼列表的程式碼:

import bs4 as bs
import pickle
import requests
import datetime as dt
import os
import pandas as pd
import pandas_datareader.data as web

def save_sp_500_tickers():
   resp = requests.get("https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")
   soup = bs.BeautifulSoup(resp.text) #it creates the html file in text
   table = soup.find("table", {"class":"wikitable sortable"}) 
   tickers = []
   #we are gonna pick the data from wikipedia table defined above
   for row in table.findAll("tr")[1:]:  
       ticker = row.findAll("td")[0].text
       ticker = ticker[:-1]
       tickers.append(ticker)
   with open("sp500tickers.pickle", "wb") as f:  
       pickle.dump(tickers, f)

   print(tickers)

   return tickers
save_sp_500_tickers()

然後您可以遍歷此列表,將所有數據保存在一個文件夾中:

start = dt.datetime(2016,01,01)
end = dt.datetime.now()

if not os.path.exists('Stock_data'):
   os.makedirs('Stock_data')
for ticker in tickers:
       df = web.DataReader(ticker, 'yahoo', start, end)
       df.to_csv('Stock_data/{}.csv'.format(ticker))

引用自:https://quant.stackexchange.com/questions/54806