這篇文章主要說明:
- 本網站(Global Stock Feature Engine)在 GitHub 上是怎麼被部署與更新的
- GitHub Actions 與 Streamlit Cloud 各自扮演的角色
- 以及如果你只是「使用 Demo」,哪些設定不用管
- 如果你想 fork / 延伸,又該從哪裡改起
👉 本篇是「架構與設定說明」,不是本機安裝教學
👉 google driver api 和資料夾ID 取得方式我已在另一篇文章【實作教學】自動化全球股市數據倉庫:GitHub Actions 關鍵變數設定與避坑指南說明,這裡不重複🌍 專案位置
GitHub 專案:
👉 https://github.com/grissomlin/Global-Stock-Feature-Engine
這是一個示範型的量化研究引擎,重點在於:
Feature Engineering(特徵工程)+資料驗證流程的展示
🧠 整體架構先講白話版
如果用一句話形容整個系統:
GitHub Actions 負責「算資料」
Streamlit Cloud 負責「展示資料」
資料流程大致如下:
Google Drive (原始 DB)
↓
GitHub Actions(特徵工程)
↓
Google Drive(加工後 DB)
↓
Streamlit Cloud(讀取 & 顯示)
🔐 為什麼要用 Google Drive?
因為在 GitHub 免費環境中:
- 檔案系統是暫時的
- 每次 Action / 部署都可能被清空
- 不適合存放大型 SQLite 資料庫
所以這個 Demo 採用:
Google Drive = 雲端資料倉庫(Database Warehouse)
🔑 必須設定的 Secrets(只限雲端 Demo)
如果你是:
- ✔ 使用 GitHub Actions
- ✔ 使用 Streamlit Community Cloud
- ❌ 不是在自己電腦跑
那你需要在 GitHub 與 Streamlit 中,設定 同樣的兩個 Secrets
① GDRIVE_FOLDER_ID
用途:
- 指向「存放資料庫的 Google Drive 資料夾」
- 系統會在這個資料夾中:
- 下載原始 DB
- 上傳加工後 DB
格式範例(概念):
1A2B3C4D5E6Fxxxxxxxx
② GDRIVE_SERVICE_ACCOUNT
用途:
- 存放 Google Service Account 的 JSON 憑證
- 用來讓 GitHub Actions / Streamlit:
- 以「機器人身份」讀取 Google Drive
設定方式:
- 將整份 JSON 內容
- 原封不動貼進 Secret
- 不要轉義、不用 base64
🔁 Secrets 要設在哪裡?
✅ GitHub
Settings → Secrets and variables → Actions
✅ Streamlit Cloud
App Settings → Secrets
⚠️ 兩邊內容必須一致
🧪 GitHub Actions:Only Feature Engineering 是做什麼的?
在 GitHub Actions 裡,你會看到一個流程名稱:
Only Feature Engineering
它的用途非常單純:
只負責一件事:
把「原始股價資料庫」加工成「含特徵欄位的分析資料庫」
🧬 Feature Engineering 核心邏輯在哪?
所有技術指標與特徵計算,都集中在這個檔案:
👉
https://github.com/grissomlin/Global-Stock-Feature-Engine/blob/main/processor.py
processor.py 在做的事(概念版)
它不是單純算指標,而是完整的 資料加工流程:
1️⃣ 讀取原始股價資料
SELECT * FROM stock_prices
2️⃣ 資料清洗(非常重要)
包含:
- 計算單日漲跌幅
- 偵測異常波動(例如 >60%)
- 平滑極端異常值(避免資料污染)
這一步是為了避免:
單一錯誤價格,毀掉整個統計分布
3️⃣ 技術指標「只是示範用」
目前包含:
- MA20 / MA60 + 斜率
- MACD / 柱狀圖變化速度
- KD / 黃金交叉
- 底部背離(MACD / KD)
⚠️ 再次強調:
這些指標只是 Feature Engineering 的「教材」
並不代表作者實際使用或推薦
4️⃣ 年度實測報酬(YTD)
系統會計算:
- 該股票「當年度第一個交易日」的價格
- 與當日價格相比的實際漲跌幅
這是為了讓:
不同股票,在同一個時間尺度上可比較
5️⃣ 未來報酬區間(回測素材)
包含:
- 1–5 日
- 6–10 日
- 11–20 日
並記錄:
- 最大可能漲幅
- 最大可能跌幅
👉 這些欄位 只用於研究與統計,不是預測
🔁 only_feature.py:Action 真正執行的入口
這個檔案是:
👉
https://github.com/grissomlin/Global-Stock-Feature-Engine/blob/main/only_feature.py
它負責:
- 從 Google Drive 下載資料庫
- 呼叫
process_market_data() - 將加工後 DB 傳回 Google Drive
也就是:
把 processor.py 包成一個「雲端自動化流程」
🛠️ 想加自己喜歡的技術指標?改哪裡?
只要改一個地方就好:
👉 processor.py
你可以:
- 新增你自己的指標
- 移除你不想要的
- 改成完全不同的特徵(量、波動、因子)
只要最後:
df_final.to_sql('stock_analysis', ...)
資料結構一致,
整個 Streamlit 前端都不需要改。
🌐 如何將專案部署到 Streamlit Cloud?
當你的 GitHub 程式碼與 Secrets 都設定好後,最後一步就是讓 Streamlit 讀取你的專案並跑起來。
1️⃣ 登入並建立 App
前往 Streamlit Share,使用你的 GitHub 帳號登入。點擊右上角的 [Create app]。
2️⃣ 選擇你的 GitHub 倉庫
在部署頁面填入以下資訊:
- Repository: 選擇
Global-Stock-Feature-Engine(或你 fork 出來的名稱) - Branch: 通常是
main - Main file path: 填入
.dashboard.py(這是網站的進入點)

3️⃣ 最重要的一步:填入 Secrets
在點擊 Deploy 之前,請先點擊右下角的 [Advanced settings...]:
- 在 Secrets 區塊中,將你在 GitHub 設定的那兩組內容(
GDRIVE_FOLDER_ID與GDRIVE_SERVICE_ACCOUNT)原封不動貼進去。 - 格式請比照:
Ini, TOMLGDRIVE_FOLDER_ID = "你的資料夾ID" GDRIVE_SERVICE_ACCOUNT = ''' { "type": "service_account", ... 這裡貼上完整的 JSON 內容 ... } ''' - 點擊 [Save]。

4️⃣ 啟動與自動同步
點擊 [Deploy!]。Streamlit 會開始安裝 requirements.txt 中的套件。
- 自動更新:以後你只要在 GitHub 更改
processor.py並推播 (push),Streamlit Cloud 就會自動偵測並更新你的網頁內容。 - 資料聯動:當 GitHub Actions 跑完特徵工程並把 DB 丟回 Google Drive 後,你只要重新整理 Streamlit 網頁,最新數據就會出現。
💡 小提醒
如果你在 Streamlit 畫面上看到 FileNotFoundError 或 Google API Error,通常高機率是 Secrets 貼錯格式 或 Google Drive 權限沒開給機器人 (Service Account Email)。請務必檢查這兩點!
🎨 給你的排版建議:
💻 如果是自己本機跑呢?
那就簡單很多:
- ❌ 不需要 Google Drive
- ❌ 不需要 Secrets
- ❌ 不需要 GitHub Actions
👉 本機完整流程我已在另一篇文章說明,這裡不重複教學
這一篇只負責說清楚:
「雲端 Demo 為什麼要這樣設計」
🎯 結語:這不是指標系統,而是「資料流程範本」
最後再次強調一次這個專案的定位:
- ❌ 不是喊單系統
- ❌ 不是即時交易
- ❌ 不是推薦任何技術指標
而是:
一個完整示範:
如何把股市資料 → 清洗 → 特徵化 → 驗證 → 展示
如果你能從這個 Demo 出發,
打造出 屬於你自己的回測與研究系統,
那這個專案就已經完成它的任務了。
🔗 相關連結
- ⚙️ 環境與 AI 設定教學:點此查看
- 📖 六國回測儀表板:點此查看
- 💻 GitHub 專案原始碼:Global-Stock-Feature-Engine
- 💝 打賞支持作者:點此打賞


