MapleCheng

在浩瀚的網路世界中無限潛水欸少年郎!

0%

打造個人 AI 投資分析團隊:用 LLM + 金融 API 實現自動化盯盤

我不是什麼投資高手,也不做短線。但作為一個有一些持股的普通人,我發現自己花在盯盤和研究個股的時間實在太多了,而且更糟的是——盯盤的時候特別容易被情緒影響。漲了就想追,跌了就想砍,完全沒有紀律可言。

所以我決定做一個實驗:用 AI 幫我建立一套紀律化的投資分析流程。不是讓 AI 幫我做買賣決策,而是讓它每天自動整理我需要的資訊,用數據說話,減少情緒干擾。

設計理念:角色分工,各司其職

一開始我也想過讓一個 AI Agent 把所有事情做完——抓數據、分析技術指標、追蹤產業動態、檢查風險——全部塞在一個 prompt 裡。

很快就發現這行不通。原因有二:

  1. Context 太長:把所有資料和指令塞在一起,LLM 的注意力會被稀釋,分析品質明顯下降
  2. 時間點不同:有些資訊要在開盤前看(持倉概況),有些要在收盤後看(技術分析),硬要在同一時間跑完,資料要嘛不完整要嘛太舊

所以我借用了軟體開發的角色分工概念,把投資分析拆成四個獨立的角色,各有各的職責和排程:

1. 股市動態日報員(每日 08:30)

開盤前的第一份報告。它的工作是:

  • 抓取持倉個股的最新股價與漲跌幅
  • 查詢三大法人(外資、投信、自營商)的買賣超資料
  • 整理融資融券變化
  • 產出一份持倉概況分析

這份報告的價值在於:讓你在開盤前就知道昨天法人的動向。比如某檔股票連續三天被外資賣超,融資餘額卻在增加,這種「散戶接刀」的訊號就很值得注意。

2. 技術分析師(每日 14:30)

收盤後的技術面分析。它會計算:

  • 移動平均線(MA):5 日、10 日、20 日、60 日
  • KD 指標:超買超賣判斷
  • MACD:趨勢方向和動能
  • RSI:相對強弱
  • 布林通道:波動率和價格位置

原始的技術指標數據其實到處都查得到,但我希望 AI 做的不是列出數字,而是用人話告訴我這些數字代表什麼意思。比如「KD 在 80 以上且死亡交叉,RSI 也在高檔鈍化,短期注意回檔風險」,這種自然語言的分析對我來說比一堆數字有用多了。

3. 產業情報員(每日 12:00)

追蹤特定產業的動態。我目前關注的產業包括面板、鋼鐵、航運等景氣循環股為主的板塊。它會整理:

  • 產業指數的走勢
  • 產業內主要個股的表現
  • 月營收數據的年增率變化
  • 產業面的重要消息

這個角色目前是四個裡面最需要持續調整的,因為產業資訊的來源和重要性會隨市場環境變化。但基本的數據面追蹤已經很穩定了。

4. 風控官(每週一、四)

這個角色不是每天跑,而是一週兩次。它負責的是更宏觀的風險管理:

  • 持倉比例:單一個股的部位是否過重?
  • 產業集中度:是不是太集中在某個產業?
  • 停損條件:有沒有個股已經觸及預設的停損線?
  • 整體曝險:考量大盤走勢,目前的持倉水位是否合理?

這份報告的設計初衷是強迫自己面對風險。人在賺錢的時候很容易忽略風險,AI 不會。

資料來源:FinMind API

台灣金融資料的取得,我使用的是 FinMind——台灣金融資料開放平台。它提供了相當完整的 RESTful API,而且有免費方案可以用。

主要用到的 dataset:

  • TaiwanStockPrice:歷史日 K 線(開高低收量)
  • TaiwanStockInstitutionalInvestorsBuySell:三大法人買賣超
  • TaiwanStockMarginPurchaseShortSale:融資融券餘額
  • TaiwanStockMonthRevenue:月營收

API 的使用方式很直覺:

1
2
3
4
5
6
7
8
9
10
11
12
import requests

url = "https://api.finmindtrade.com/api/v4/data"
params = {
"dataset": "TaiwanStockPrice",
"data_id": "2330",
"start_date": "2026-01-01",
"end_date": "2026-02-05",
"token": "YOUR_TOKEN"
}
resp = requests.get(url, params=params)
data = resp.json()["data"]

免費版的限制是每分鐘 30 次呼叫。對個人使用來說非常夠用了。我目前追蹤大概十幾檔個股,加上產業指數,每個角色跑一次大概呼叫 15-20 次,完全在限制內。

唯一要注意的是,有些 dataset 的資料更新有延遲。比如三大法人買賣超通常要到下午 3 點多才完整,融資融券更晚。所以排程的時間點要配合資料的可用性來設計。

排程架構

四個角色各自獨立執行,用 cron job 觸發:

1
2
3
4
30 8  * * 1-5  /path/to/run_agent.sh daily_reporter
00 12 * * 1-5 /path/to/run_agent.sh industry_analyst
30 14 * * 1-5 /path/to/run_agent.sh tech_analyst
00 9 * * 1,4 /path/to/run_agent.sh risk_officer

每個角色在獨立的 session 裡執行,這樣 context 不會互相干擾。每個 session 有自己的 system prompt,定義了角色的職責、分析框架和輸出格式。

這個設計的好處是:

  1. 互不影響:技術分析師掛了不會影響日報員
  2. 容易調整:想修改某個角色的分析邏輯,改它的 prompt 就好
  3. 靈活擴充:想加新角色,新增一個 cron entry 和 prompt 就搞定

LLM 在這裡的角色

我要特別強調一下:這套系統裡,LLM 不是在做量化交易。它不做預測、不做回測、不給買賣訊號。

LLM 做的是「資料 → 人話」的翻譯層

原始的金融資料就是一堆數字和表格,三大法人買賣超、技術指標、融資融券變化……這些數據本身不難取得,但要消化這些數據、理解它們之間的關聯、把它們轉換成可以快速決策的資訊,這就需要花時間和精力。

LLM 最擅長的就是這件事。它可以把「外資連續賣超 5 日共 -12,345 張,但融資增加 2,000 張,股價卻只跌 1.5%」這樣的原始數據,轉換成「外資持續出貨但股價跌幅有限,留意是否有其他買盤承接。融資增加顯示散戶在逢低接,需觀察後續是否有止穩訊號」這樣的分析。

這不是什麼高深的分析,有經驗的投資人自己看數據也能得出類似結論。但重點是:AI 可以每天穩定地做這件事,不會忘記、不會偷懶、不會因為心情不好就跳過某些指標

實測效果

跑了一段時間,幾個心得:

  1. 法人動向追蹤很好用:以前都是收盤後自己去查,常常忘記或懶得查。現在每天早上報告就在那裡,一目瞭然。

  2. 融資融券變化是預警燈:這個數據以前我很少關注,但 AI 每天追蹤之後,發現它其實是很好的散戶情緒指標。融資快速增加的時候通常要小心。

  3. 技術分析需要搭配脈絡:單純的技術指標判讀,LLM 做得還行,但如果能結合基本面和產業面的資訊會更好。這也是我後續想改善的方向。

  4. 風控報告讓人冷靜:每週被提醒一次「你的某某持股已經佔總部位 30%」,確實會讓人重新檢視自己的配置。

未來構想

目前的系統是追蹤已知的持倉個股,屬於「防守型」的。下一步想做的是「進攻型」——全市場掃描。

構想是:

  1. 用 Python 從全市場幾千檔股票中,先做基本面篩選(營收成長、本益比區間、股利殖利率等),縮小到 30-50 檔
  2. 再把這 30-50 檔丟給 LLM,做題材分析和產業歸類
  3. 產出一份「值得關注的個股週報」

這個做法的核心思路是:量化篩選用程式,質化分析用 LLM。兩者各司其職,發揮各自的優勢。

不過這個構想還在規劃階段,實際做起來最大的挑戰是:全市場資料量很大,API 的呼叫次數限制會是瓶頸。可能需要升級到付費方案,或是用本地資料庫做快取。

重要提醒

最後,也是最重要的一點:AI 不做投資決策

這套系統的定位是「資訊助理」而不是「投資顧問」。它幫你整理資訊、追蹤數據、分析趨勢,但最終的買賣決策——什麼時候買、什麼時候賣、買多少——這些都是你自己要負責的。

LLM 對金融資料的理解是基於語言模式的,不是基於金融模型的。它可能會產出看起來很有道理但實際上有偏差的分析。所以永遠要用自己的判斷力去驗證 AI 的輸出,而不是盲目相信。

話說回來,這也是我這套系統的設計初衷。我不要 AI 幫我做決策,我要的是 AI 幫我更有效率地掌握做決策所需的資訊。一個有紀律的資訊整理流程,比任何神奇的預測模型都有價值。

投資有風險,用 AI 分析也有風險。但至少,紀律化的分析流程比情緒化的盯盤要好得多。