⚙️ Global Stock Feature Engine|環境設定與架構說明(Demo 專用)

更新 發佈閱讀 11 分鐘
投資理財內容聲明

這篇文章主要說明:

  • 本網站(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

它負責:

  1. 從 Google Drive 下載資料庫
  2. 呼叫 process_market_data()
  3. 將加工後 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 (這是網站的進入點)
raw-image


3️⃣ 最重要的一步:填入 Secrets

在點擊 Deploy 之前,請先點擊右下角的 [Advanced settings...]

  1. Secrets 區塊中,將你在 GitHub 設定的那兩組內容(GDRIVE_FOLDER_IDGDRIVE_SERVICE_ACCOUNT)原封不動貼進去。
  2. 格式請比照:
    Ini, TOMLGDRIVE_FOLDER_ID = "你的資料夾ID" GDRIVE_SERVICE_ACCOUNT = ''' { "type": "service_account", ... 這裡貼上完整的 JSON 內容 ... } '''
  3. 點擊 [Save]
raw-image


4️⃣ 啟動與自動同步

點擊 [Deploy!]。Streamlit 會開始安裝 requirements.txt 中的套件。

  • 自動更新:以後你只要在 GitHub 更改 processor.py 並推播 (push),Streamlit Cloud 就會自動偵測並更新你的網頁內容。
  • 資料聯動:當 GitHub Actions 跑完特徵工程並把 DB 丟回 Google Drive 後,你只要重新整理 Streamlit 網頁,最新數據就會出現。

💡 小提醒

如果你在 Streamlit 畫面上看到 FileNotFoundErrorGoogle API Error,通常高機率是 Secrets 貼錯格式Google Drive 權限沒開給機器人 (Service Account Email)。請務必檢查這兩點!


🎨 給你的排版建議:




💻 如果是自己本機跑呢?

那就簡單很多:

  • ❌ 不需要 Google Drive
  • ❌ 不需要 Secrets
  • ❌ 不需要 GitHub Actions

👉 本機完整流程我已在另一篇文章說明,這裡不重複教學

這一篇只負責說清楚:

「雲端 Demo 為什麼要這樣設計」


🎯 結語:這不是指標系統,而是「資料流程範本」

最後再次強調一次這個專案的定位:

  • ❌ 不是喊單系統
  • ❌ 不是即時交易
  • ❌ 不是推薦任何技術指標

而是:

一個完整示範:

如何把股市資料 → 清洗 → 特徵化 → 驗證 → 展示

如果你能從這個 Demo 出發,

打造出 屬於你自己的回測與研究系統

那這個專案就已經完成它的任務了。

🔗 相關連結

留言
avatar-img
《炒股不看周月年K漲幅機率就是耍流氓》
9會員
276內容數
普通上班族,用 AI 與 Python 將炒股量化。我的數據宣言是:《炒股不做量化,都是在耍流氓》。
2026/01/03
Demo 系統說明:本系統為展示「特徵工程」與「策略回測」概念的教學工具。受限於 GitHub 硬體資源與儲存空間,目前僅提供 2024-2025 年的歷史數據。完整的生產級系統可擴展至更長時間週期與即時數據。 📌 系統簡介 全球股市特徵引擎是一套結合技術分析與量化回測的策略篩選系統,幫助投
Thumbnail
2026/01/03
Demo 系統說明:本系統為展示「特徵工程」與「策略回測」概念的教學工具。受限於 GitHub 硬體資源與儲存空間,目前僅提供 2024-2025 年的歷史數據。完整的生產級系統可擴展至更長時間週期與即時數據。 📌 系統簡介 全球股市特徵引擎是一套結合技術分析與量化回測的策略篩選系統,幫助投
Thumbnail
2026/01/02
前言:你賺到的是「口袋裡的錢」,還是「曾經看過的數字」? 在量化回測中,我們常面臨一個選擇:該用「收盤價」看實際績效,還是用「最高價」看策略的天花板? 過去 StockRevenueLab 預設使用年底收盤價,這很穩健,但有時會讓我們忽略了標的在年度中的爆發力。今天,我正式推出「年K計價模式動態
Thumbnail
2026/01/02
前言:你賺到的是「口袋裡的錢」,還是「曾經看過的數字」? 在量化回測中,我們常面臨一個選擇:該用「收盤價」看實際績效,還是用「最高價」看策略的天花板? 過去 StockRevenueLab 預設使用年底收盤價,這很穩健,但有時會讓我們忽略了標的在年度中的爆發力。今天,我正式推出「年K計價模式動態
Thumbnail
2026/01/01
這份 timing_lab.py(對應網址中的 /timing_lab 頁面)是 StockRevenueLab 中最具備「行為金融學」與「事件研究法」色彩的單元。它的核心目的在於探討:當營收利多正式公告時,市場的反應是「追價」還是「利多出盡」? 一、 研究背景:破解市場的「偷跑」與「追價」
Thumbnail
2026/01/01
這份 timing_lab.py(對應網址中的 /timing_lab 頁面)是 StockRevenueLab 中最具備「行為金融學」與「事件研究法」色彩的單元。它的核心目的在於探討:當營收利多正式公告時,市場的反應是「追價」還是「利多出盡」? 一、 研究背景:破解市場的「偷跑」與「追價」
Thumbnail
看更多