開始使用
快速上手
本頁內容4
這一頁帶你從零跑出第一個回測:安裝 → 下載資料 → 寫條件 → 回測,大約 5 分鐘。每段程式都能直接複製執行。
- 1 取得資料
data.get('price:收盤價')日期 × 股票的一張表
- 2 寫條件
close > close.average(60)True=那天要持有
- 3 回測
sim(position, resample='M')報酬、回撤、每筆交易
- 4 上線
PortfolioSyncManager每天更新、自動下單
選一個地方執行
第一次用建議選 Google Colab:打開瀏覽器就能寫,不用在電腦上安裝 Python。
到 Google Colab 開一個新的筆記本,在第一格執行:
!pip install finlab需要 Python 3.10 以上。在終端機執行:
pip install finlab遇到套件版本衝突時,可以改用 Docker,或另開一個虛擬環境(python -m venv)再安裝。
映像檔已裝好 FinLab 與 JupyterLab:
docker pull finlab/jupyter-finlab
docker run -p 8888:8888 finlab/jupyter-finlab依終端機顯示的網址打開 JupyterLab。
到 FinLab Studio 用一句話描述你的想法,例如「每月買進創一年新高的股票」,AI 會寫好程式並回測給你看。這一頁的程式也能直接貼進 Studio 執行。
跑出第一個回測
下載收盤價
data.get() 用「資料表:欄位」的名稱下載資料。第一次執行會打開瀏覽器請你登入 FinLab,免費註冊即可。
from finlab import data
close = data.get('price:收盤價')
close.tail()| date | 2330 | 2317 | 2454 | 0050 |
|---|---|---|---|---|
| 2026-10-27 | 2400 | 247.5 | 3960 | 106.6 |
| 2026-10-28 | 2425 | 251.5 | 4235 | 108.65 |
| 2026-10-29 | 2415 | 248 | 4045 | 107.25 |
| 2026-10-30 | 2370 | 245.5 | 3915 | 104.95 |
| 2026-11-02 | 2330 | 251 | 3970 | 104.1 |
from finlab import data
data.set_market('us')
close = data.get('price:adj_close')
close.tail()| date | AAPL | MSFT | NVDA | AMZN |
|---|---|---|---|---|
| 2026-10-26 | 382.38 | 612.12 | 221.88 | 249.09 |
| 2026-10-27 | 385.93 | 610.66 | 223.87 | 253.1 |
| 2026-10-28 | 382.29 | 610.3 | 221.24 | 254.6 |
| 2026-10-29 | 387.94 | 609.3 | 219.47 | 243.79 |
| 2026-10-30 | 383.18 | 599.84 | 210.21 | 240.35 |
回傳的是一張表:每一列是一個交易日,每一欄是一檔股票(上表只列出其中幾檔)。FinLab 的所有資料都長這樣,財報、月營收、法人買賣超也是。
免費帳號的台股資料到 2023 年底,VIP 每天更新到最新,上面的表是 VIP 帳號的結果。
寫一個選股條件
用 Pandas 的語法比較整張表。下面這行的意思是「收盤價創 300 個交易日新高」:
position = close >= close.rolling(300).max()結果是同樣形狀的表,每一格是 True 或 False,True 代表那一天要持有那一檔股票。比較運算一次算完整張表,下圖用「收盤價高於 60 日均線」說明:
close 收盤價 | 2330 | 2317 | 2454 | |
|---|---|---|---|
| 10/27 | 98 | 51 | 120 |
| 10/28 | 101 | 50 | 118 |
| 10/29 | 104 | 49 | 121 |
| 10/30 | 103 | 52 | 117 |
close.average(60) 60 日均線 | 2330 | 2317 | 2454 | |
|---|---|---|---|
| 10/27 | 100 | 52 | 115 |
| 10/28 | 100 | 51 | 116 |
| 10/29 | 101 | 51 | 117 |
| 10/30 | 101 | 51 | 118 |
position 要持有的股票 | 2330 | 2317 | 2454 | |
|---|---|---|---|
| 10/27 | False | False | True |
| 10/28 | True | False | True |
| 10/29 | True | False | True |
| 10/30 | True | True | False |
回測
把條件交給 backtest.sim()。resample='M' 表示每月底檢查一次條件,在下一個交易日換股:
from finlab import backtest
report = backtest.sim(position, resample='M')
report.display()report.display() 會畫出完整的回測報告,下面就是這段程式跑出來的結果,可以直接在上面操作:
看懂這份報告
報告最上面是報酬曲線和幾個最常看的數字:
| 指標 | 意思 |
|---|---|
| 年化報酬率 | 把整段回測的報酬換算成平均每年賺多少 |
| 最大回撤 | 從最高點到最低點最多跌了多少,代表最難熬的時候 |
| 夏普率 | 每承擔一單位波動換到多少報酬,越高越穩 |
| 勝率 | 賺錢的交易占所有交易的比例 |
想在程式裡拿到這些數字,用 report.get_stats();想看每一筆交易,用 report.get_trades()。
下一步
不確定資料表叫什麼?到 資料目錄 搜尋欄位,或在 AI 編程助手(Claude Code、Cursor 等)安裝 FinLab Skill,直接問「營收相關的資料有哪些?」。
這一頁有幫到你嗎?