取得市場資料
要分析或回測任何策略,第一步永遠是先拿到乾淨的股價資料。這一頁介紹目前最常用、最穩定的資料來源,以及如何用程式抓取台股與美股的公司基本資料。
常見的資料來源
| 資料來源 | 內容 | 使用方式 |
|---|---|---|
| Yahoo Finance | 全球股票、指數、ETF 的歷史股價 | yfinance 套件 |
| Alpha Vantage | 股票、外匯、加密貨幣(需申請免費 API Key) | alpha_vantage 套件 |
| 公開資訊觀測站 / TWSE OpenData | 台股上市公司基本資料、財報 | pandas.read_csv / pandas.read_html 直接讀取公開資料 |
為什麼不用 pandas_datareader?
早期教材常見 pandas_datareader.data.DataReader(..., "yahoo"),但 Yahoo 已多次調整資料介面,這個舊寫法目前經常失敗。現在請改用維護中的 yfinance 套件下載股價。
使用 yfinance 下載股價
import yfinance as yf
# 下載蘋果(AAPL)一年份的日線資料
data = yf.download("AAPL", start="2023-01-01", end="2024-01-01")
print(data.head())
台股也可以用相同方式下載,股票代號需加上 .TW(上市)或 .TWO(上櫃),例如台積電是 2330.TW:
取得台股公司基本資料與成分股
台灣證券交易所(TWSE)與元大投信都提供公開的資料端點,可以直接用 pandas 讀取,不需要額外的 API Key:
import pandas as pd
# 上市公司基本資料
companies = pd.read_csv("https://mopsfin.twse.com.tw/opendata/t187ap03_L.csv")
# 元大台灣50(0050)成分股權重
etf_0050 = pd.read_json("http://www.yuantaetfs.com/api/StkWeights?date=&fundid=1066")
使用 Alpha Vantage API(需要 API Key)
from alpha_vantage.timeseries import TimeSeries
api_key = "你的 API Key" # 到 https://www.alphavantage.co/ 免費申請
ts = TimeSeries(key=api_key, output_format="pandas")
data, meta_data = ts.get_daily(symbol="AAPL", outputsize="compact")
動手做
以下 Notebook 可直接在 Colab 開啟練習,對應本頁介紹的資料來源:
| Notebook | 內容 |
|---|---|
| 1-1 讀取台灣上市公司基本資料 | 用 pandas.read_csv 讀取 TWSE OpenData 的上市公司清單 |
| 1-2 讀取 0050 成分股 | 讀取元大台灣50 的成分股與權重 |
| 1-3 讀取 S&P500 公司列表 | 讀取美股 S&P 500 成分股清單 |
| 2-1 抓取股價歷史資料 | 下載個股歷史股價(示範中的 pandas_datareader 寫法建議改用上方 yfinance) |
| 2-2 繪製靜態股票線圖 | 用 matplotlib 畫出股價與成交量走勢 |
推薦影音
yfinance 完整教學
簡述:示範如何安裝 yfinance、下載日線/分鐘線股價、取得公司基本資訊與股利資料,內容對應本頁「使用 yfinance 下載股價」的部分,適合第一次使用 yfinance 的人跟著操作一遍。