# 三檔台股收盤價一次抓成表：yfinance 實測，以及表裡多出來的那一天

- 網址：https://blog.valenvan.uk/posts/ranaroussi-yfinance.html
- 發布日期：2026-11-02
- 測試設備：Mac mini M4 Pro（12 核、64GB）
- 專案：ranaroussi/yfinance（https://github.com/ranaroussi/yfinance），Apache-2.0 授權
- 測試版本：1.7.0
- 實測影片：https://www.youtube.com/watch?v=9_EZ7k-6EVI
- 分類：金融工具區（https://blog.valenvan.uk/finance.html）

> 📌 數據僅限本工具現階段參考用。本文只示範工具怎麼安裝、設定、執行，不是投資建議，也不推薦任何股票。

## 重點摘要

- yfinance 1.7.0 在 Python 3.12 以 pip install -e . 安裝約 11 秒，不需要金鑰。
- 一次下載 2330.TW、2317.TW、2454.TW 在 2026 年 10 月的日資料，得到 20 列表格，可存成 close.csv。
- 與證交所公開資料對照：收盤價 57 筆全部相同，但表比證交所多出 10 月 23 日一列，三檔成交量皆為 0、價格與前一天相同。
- 成交量 57 筆與證交所公布的數字都不同，收盤價可用，成交量不直接引用。
- **結論：** 抓日收盤價很省事，但抓完要先對交易日、刪掉零成交量的列，成交量不直接引用。
- **適合：** 要把幾檔公開價格整理進報告、願意跑 Python 的人
- **不適合：** 需要逐筆精確成交量，或完全不想寫程式的人

| 實測項目 | 結果 |
|---|---|
| 安裝時間 | 約 11 秒 |
| 下載列數 | 20 列（三檔、2026 年 10 月） |
| 證交所交易日數 | 19 天 |
| 收盤價對照 | 57 筆全部相同 |
| 成交量對照 | 57 筆皆不同 |
| 多出的一列 | 10/23，三檔成交量皆為 0 |

月底要交一份報告，裡面得放三檔股票這個月的收盤價。一檔一檔打開網頁複製很花時間，換個月又得重來。yfinance 是 GitHub 上很多人用的開源 Python 套件，輸入股票代號和日期，就能一次把價格抓成表格。這篇照順序記錄我怎麼裝、怎麼設定、跑出什麼，並把結果拿去跟證交所公開資料對照。

測試設備：Mac mini M4 Pro（12 核、64GB）。測試版本：yfinance 1.7.0（Apache-2.0 授權），Python 3.12。示範代號 2330、2317、2454 只是輸入示範，不代表任何建議。本文示範資料是證交所公開資料，資料日期為 2026-10-30 收盤後。

## 下載

需要 Python 3.10 以上（我用 3.12）。從原始碼安裝：

```bash
git clone https://github.com/ranaroussi/yfinance
cd yfinance
pip install -e .
```

安裝約 11 秒，會一併裝好 pandas、numpy、requests 等相依套件。想直接用 PyPI 版本，也可以 `pip install yfinance`。

## 設定

不需要註冊或金鑰。台股代號在後面加 `.TW`（上市）就能用，例如台積電是 `2330.TW`。日期用 `start`、`end`，其中 `end` 不含當天，所以要抓到 10 月 30 日，`end` 要寫 10 月 31 日。

為了跟證交所對照，我還用 `requests` 抓證交所公開的個股日成交資訊（`STOCK_DAY`），這段是我自己寫的比對腳本，不是 yfinance 的功能。

## 跑起來

先一次抓三檔，只取收盤價並存成 CSV：

```python
import yfinance as yf
df = yf.download(['2330.TW','2317.TW','2454.TW'],
                 start='2026-10-01', end='2026-10-31',
                 auto_adjust=False, progress=False)
close = df['Close']
close.to_csv('close.csv')
print(len(close))
```

輸出是 20 列、三個欄位的表格，`close.csv` 可以直接貼進報告或試算表。

![一次抓三檔，表有 20 列](https://blog.valenvan.uk/img/ranaroussi-yfinance-article_1.png)

接著把同一份資料跟證交所 10 月的個股日成交資訊逐筆對照：

| 項目 | 證交所 | yfinance |
|---|---|---|
| 10 月交易日數 | 19 | 20 |
| 10/23 | 無資料 | 有一列 |
| 10/23 成交量 | — | 0（三檔都是） |
| 收盤價對照 | 57 筆 | 全部相同 |

![對照結果：多出一天，收盤價 57/57 相符](https://blog.valenvan.uk/img/ranaroussi-yfinance-article_2.png)

收盤價三檔、十九個交易日共 57 筆，一筆都沒有差。但表裡多了 10 月 23 日這一列：三檔成交量都是 0，收盤價跟 10 月 22 日完全一樣。

## 常見問題

**表為什麼比證交所多一天？** 我只確認到：yfinance 回傳的表有 10/23，證交所公開資料沒有這天，且三檔成交量都是 0、價格照抄前一天。我沒有查出原因，所以不下結論。

**多出來的一列會怎樣？** 如果拿去做圖或算平均，這一天會被多算一次。我的做法是抓完先對一次交易日，把成交量為 0 的列刪掉再存檔：

```python
close = close[(df['Volume'] > 0).all(axis=1)]
```

**成交量能直接用嗎？** 這次對照的 57 筆成交量跟證交所公布的數字沒有一筆相同。收盤價我放心用，成交量我不直接引用；需要成交量時，建議用證交所公開資料。

**終端機跳出一堆 Pandas4Warning？** 這是 pandas 3.x 對套件內部寫法的棄用警告，不影響結果。範例中用 `python3 -W ignore` 隱藏。

**沒測的部分：** 只測了三個示範代號、一個月的日資料；沒測分鐘線、上櫃（`.TWO`）、配息調整價、財報資料，也沒測長期穩定性。

## 結論

這個工具抓日收盤價很省事：幾行就把三檔變成一張表、存成 CSV。但抓下來的表不要直接當成標準答案：先跟交易日對一次、刪掉零成交量的列，成交量也不直接引用。適合要把幾檔公開價格整理進報告、願意跑 Python 的人；不適合要逐筆精確成交量、或完全不想寫程式的人。

專案：https://github.com/ranaroussi/yfinance（Apache-2.0）
