🇰🇷 為什麼韓國股市需要特別處理?

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

—— Global-Stock-Feature-Engine 的 KR 資料下載機制解析

📌 本文聚焦於 韓國市場(KR)的資料取得困境與解決方案,並簡要說明 main.py 如何協調全球六個市場的同步流程。


❓ 問題背景:GitHub Actions 無法直接抓韓股清單

在自動化流程中,我們希望每天透過 GitHub Actions 更新全球股市資料庫。

然而,韓國股市的股票清單來源(如 pykrx 所依賴的 KRX 官網)會封鎖來自 GitHub 伺服器的 IP,導致:

  • 無法取得完整的韓股代碼列表
  • 下載流程直接跳過 KR 市場,或僅回傳預設的三星電子(005930.KS)

這使得自動化更新「韓國部分」失效。


✅ 解決方案:手動預備 kr_list_all.csv

為繞過此限制,我們採用「離線準備 + 雲端快取」策略:

步驟 1️⃣:在 Colab 或本機執行以下程式碼,取得完整韓股清單

python编辑# 在 Google Colab 執行(需安裝 pykrx)
!pip install pykrx pandas

from pykrx import stock as krx
import pandas as pd
from datetime import datetime

today = datetime.now().strftime("%Y%m%d")
items = []

for market, suffix in [("KOSPI", ".KS"), ("KOSDAQ", ".KQ")]:
tickers = krx.get_market_ticker_list(today, market=market)
for t in tickers:
items.append({
"code": t,
"name": krx.get_market_ticker_name(t),
"board": market
})

df = pd.DataFrame(items)
df.to_csv("kr_list_all.csv", index=False, encoding="utf-8-sig")
print(f"✅ 已儲存 {len(df)} 檔韓股清單至 kr_list_all.csv")

步驟 2️⃣:將 kr_list_all.csv 上傳至 Google Drive

  • 與你的 kr_stock_warehouse.db 放在同一資料夾
  • 確保 GitHub Secrets 中的 GDRIVE_FOLDER_ID 指向該資料夾

步驟 3️⃣:downloader_kr.py 會優先讀取此檔案!

程式碼中的「四重保險」機制如下:

python编辑# ========== 3. 獲取韓股清單 (四重保險) ==========
def get_kr_stock_list():
# [保險 0] 優先嘗試讀取本地 kr_list_all.csv
if os.path.exists(LIST_CSV_PATH):
... # 成功則直接使用
return items

# [保險 1] 嘗試用 pykrx(在 GitHub Actions 通常失敗)
try:
...
except:
pass

# [保險 2] 最後 fallback 到預設股票(三星)
return [("005930.KS", "Samsung Electronics", ...)]

💡 只要雲端有 kr_list_all.csv,就能完整下載所有韓股歷史資料!


🌐 main.py:全球市場同步的指揮中心

main.py 是整個專案的「大腦」,負責協調以下動作:

🔁 1. 增量更新(Incremental Sync)

  • 檢查本地或雲端 DB 的最後日期(例如 2025-12-31
  • 只下載「隔天至今」的資料(例如 2026-01-01 ~ 2026-01-04
  • 避免每日重複下載數年數據,大幅節省時間與 API 用量

☁️ 2. Google Drive 快取機制

  • 啟動時自動從雲端下載 .db 與 kr_list_all.csv
  • 結束前上傳更新版,供下次使用或 Streamlit 儀表板讀取

⚙️ 3. 特徵工程自動觸發

  • 若 processor.py 存在,會在下載完成後自動執行:
    python编辑process_market_data(db_file)  # 加工 KD / MACD / 背離 / 未來報酬等欄位

📤 4. 穩健的上傳重試機制

  • 自動偵測 SSL 連線錯誤(常見於大檔案上傳)
  • 採用「指數退避」重試,最多 3 次
  • 失敗時仍保留本地 .db 檔,避免資料遺失

🧩 特別提醒:韓國市場是「可選」的

  • 如果你對韓股沒興趣,完全可以忽略 kr_list_all.csv
  • downloader_kr.py 在無清單時會 fallback 到三星電子,不影響其他市場運作
  • 整個系統設計為「模組化」,六個市場(TW/US/CN/HK/JP/KR)彼此獨立

🛠️ 使用建議

使用情境操作方式只想跑台股+美股不需處理 KR 相關檔案,直接執行 python main.py tw us想完整支援韓股1. 用 Colab 產出 kr_list_all.csv2. 上傳至 Google Drive3. 執行 python main.py kr 或 all部署到 GitHub Actions確保 Secrets 設定正確,且 Drive 資料夾內已有 kr_list_all.csv


📚 延伸資源


🔍 真正的自動化,不是「完全無人介入」,而是「知道何時需要人為協助」

韓國市場的設計,正是這種務實哲學的體現—— 當自動化遇到牆,我們提供一條簡單的手動通道,讓系統依然能持續運轉。

(完)



留言
avatar-img
《炒股不看周月年K漲幅機率就是耍流氓》
16會員
290內容數
普通上班族,用 AI 與 Python 將炒股量化。我的數據宣言是:《炒股不做量化,都是在耍流氓》。
你可能也想看
Thumbnail
在 Python 自動化領域中,pyautogui 是非常常用的工具,可以幫你模擬滑鼠與鍵盤操作。 這篇帶你快速掌握: ✔ 滑鼠移動 ✔ 點擊操作 ✔ 拖曳 ✔ 滾動
Thumbnail
在 Python 自動化領域中,pyautogui 是非常常用的工具,可以幫你模擬滑鼠與鍵盤操作。 這篇帶你快速掌握: ✔ 滑鼠移動 ✔ 點擊操作 ✔ 拖曳 ✔ 滾動
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
在做自動化工具或測試腳本時,常常會需要操作視窗,例如: 👉 找到特定程式 👉 切換視窗 👉 自動化點擊操作 這時候,pyautogui 是一個很好上手的工具。
Thumbnail
在做自動化工具或測試腳本時,常常會需要操作視窗,例如: 👉 找到特定程式 👉 切換視窗 👉 自動化點擊操作 這時候,pyautogui 是一個很好上手的工具。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
isalnum() : 檢測字串是否由字母和數字組成 isalpha() : 檢測字串是否只由字母組成 isalnum() str1 = "abc123" print(str1.isalnum()) str2 = "pop.cat" print(str2.isalnum()) str3
Thumbnail
isalnum() : 檢測字串是否由字母和數字組成 isalpha() : 檢測字串是否只由字母組成 isalnum() str1 = "abc123" print(str1.isalnum()) str2 = "pop.cat" print(str2.isalnum()) str3
Thumbnail
從 JavaScript 到 Python
Thumbnail
從 JavaScript 到 Python
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News