US Stock Radar · 美股研究预警台

VibeMySpace 精选 的头像VibeMySpace 精选@vibemyspace-curated

编辑介绍

个人研究者可在同一面板查看资讯、解释与跟踪项。

AI 用途:AI 分析美股新闻、事件与标的信号。

使用方式:调用用户配置的任意 OpenAI-compatible API;不填 Key 时跳过 AI 分析师,规则看盘仍可用。

原帖正文

📡 us-stock-radar

語言:繁體中文 ↔ English

個人用「美股 AI 看盤雷達」。監控持股 / 高關注 / 一般觀察名單,自算技術指標、用規則引擎偵測異常事件,由常駐 AI 分析師(任何 OpenAI 相容 LLM)主動產生結構化研究與風險提醒,並透過 Email / Telegram 通知重大事件。介面採台股慣例配色(🔴 漲 / 🟢 跌)

⚠️ 重要聲明:本工具僅供個人監控與投資研究不自動下單、不串接任何券商交易 API、不保證獲利,AI 內容僅為研究與風險提醒,非投資建議。請自行判斷並承擔投資決策。


🖼️ 畫面預覽

| 持股(熱力圖 + 分組 + 損益) | 個股 K 線(拖曳平移 / 滾輪縮放 / 時間快捷鈕) | | :---: | :---: | | 持股 | K線 | | 觀察名單(買區狀態高亮) | AI 分析師(結構化研究) | | 觀察名單 | AI分析 |


✨ 功能總覽

| 模組 | 說明 | | --- | --- | | 即時行情 | Alpaca IEX WebSocket 訂閱即時報價(持股+高關注,上限 30 檔),斷線自動重連 | | 歷史 / 盤後 | Alpaca 歷史 REST 為主(雲端可靠);開機 backfill 先補日 K+指標,休市也看得到前一日收盤 | | 備援輪詢 | 一般觀察名單以 Finnhub → FMP → yfinance 鏈式輪詢(含 rate limit) | | 技術指標 | MA5/10/20/60/120、RSI14、MACD、Bollinger、VWAP、量比、距均線% | | Signal Engine | 15 種規則事件(跌破/站上 MA、RSI 超買超賣、MACD 交叉、放量、漲跌幅、接近停損停利、突破成本…)| | AI 分析師 | 常駐讀取事件 queue,呼叫 LLM 產生結構化 JSON;分層冷卻(短線 2h / 長期・高關注 4h)避免雜訊 | | 排程分析 | 開盤前 / 盤中 / 收盤的分層分析頻率(美東時段) | | 持股管理 | 長期 / 短線分類、自訂群組、停損停利、批次管理 | | 觀察名單 | 高關注 / 一般觀察、買區狀態(在買區 / 低於 / 高於目標)、主題標籤 | | 新聞 | Finnhub / FMP / RSS 抓取 + AI 摘要與利多利空判斷 | | 通知 | Telegram Bot + Email SMTP(未設定則自動標記 skipped,不崩潰) | | Dashboard | Streamlit 7 頁:總覽 / 持股 / 觀察名單 / 訊號 / AI 分析師 / 新聞 / 設定 |

設計核心:規則引擎先把 raw tick 壓縮成事件,再交給 LLM 分析 —— LLM 絕不直接讀每秒報價,省 token、降雜訊。各常駐 process 透過 SQLite(WAL 模式)的 signals / alerts 狀態欄當作 event queue 溝通,無需 Redis / Kafka


🏗️ 架構

flowchart LR
    subgraph sources["資料源 (data_adapters/)"]
        AL["Alpaca IEX WS
+ 歷史 REST"]
        FB["Finnhub / FMP / yfinance
(備援輪詢)"]
    end
    MM["market_monitor
行情擷取"]
    TI["indicators/technical
技術指標"]
    SE["signal_engine
15 種規則事件"]
    DB[("SQLite (WAL)
signals / alerts
= event queue")]
    AW["ai_worker
→ 任何 OpenAI 相容 LLM"]
    ALW["alert_worker
Telegram / Email"]
    UI["Streamlit Dashboard
7 頁"]

    AL --> MM
    FB --> MM
    MM --> DB
    DB --> TI --> DB
    DB --> SE -->|重大事件 pending_ai| DB
    DB -->|撈 pending_ai| AW -->|結構化分析| DB
    DB -->|高風險| ALW
    DB --> UI

升級到付費全市場 SIP 資料只需新增一個 adapter(實作 data_adapters/base.py 介面)並在 market_monitor 換接,下游完全不用改。詳見文末。


🚀 Quickstart

⚠️ 所有 API key 皆為選填。缺 key 時各模組會優雅降級(fallback 或標記 skipped),不會崩潰;填越多功能越完整。

A. 本地(venv)

git clone https://github.com/BDMisME/us-stock-radar.git
cd us-stock-radar

# macOS 內建 python3 多半過舊(3.9),請用 3.11+(建議 brew 的 3.12)
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

cp .env.example .env       # 填入你自己的 key(全部留空也能跑 demo)

python scripts/init_db.py      # 建表
python scripts/seed_demo.py    # 載入 demo:20 持股 + 80 觀察名單
python scripts/backfill.py     # 補日 K + 指標(讓畫面立刻有資料)

streamlit run app/main.py      # → http://localhost:8501

要啟用即時監控 / AI / 通知,再各開一個終端機跑常駐服務:

python services/market_monitor.py   # 行情擷取(WebSocket + 輪詢)
python services/signal_engine.py    # 異常事件偵測
python services/ai_worker.py        # AI 分析師
python services/alert_worker.py     # 通知派送
python services/scheduler.py        # 分層排程分析

B. Docker(一鍵啟動全部)

cp .env.example .env       # 填好 key
docker compose up --build  # Dashboard → http://localhost:8501

C. Zeabur(雲端部署)

  1. Fork 本 repo,連到 Zeabur。
  2. 在 Zeabur 後台填入環境變數(同 .env);掛載 Persistent Volume 到 /data 並設 DB_PATH=/data/us_stock_radar.sqlite
  3. start.sh 會自動建表、seed、backfill、啟動所有服務與 Dashboard。

🔑 如何取得 API Key(全部選填)

| 服務 | 用途 | 免費額度 | 申請連結 | | --- | --- | --- | --- | | Alpaca | 即時報價 + 歷史 K(最推薦先辦這個) | 免費 IEX 即時 + 歷史資料 | https://alpaca.markets/ | | 任意 OpenAI 相容 LLM | AI 分析師 | 各家不同,見下方說明 | — | | Finnhub | 備援報價 / 新聞 | 免費 tier | https://finnhub.io/ | | FMP | 備援報價 / 基本面 | 免費 tier | https://site.financialmodelingprep.com/ | | Telegram Bot | 重大事件推播 | 免費 | 跟 @BotFather 申請 bot token |

LLM 設定方式:在 .env 填入 LLM_API_KEY / LLM_BASE_URL / LLM_MODEL。常見選擇:

  • OpenAILLM_MODEL=gpt-4oLLM_BASE_URL 留空
  • Groq(免費額度):LLM_BASE_URL=https://api.groq.com/openai/v1LLM_MODEL=llama-3.3-70b-versatile
  • 火山方舟 ARKLLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3LLM_MODEL=<endpoint-id>
  • GeminiLLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/LLM_MODEL=gemini-2.0-flash

只想先看畫面?全部留空直接跑,demo 資料 + backfill 就能看到完整 UI。


❓ FAQ

  • 盤後 / 假日沒有即時報價怎麼辦? 系統會用 Alpaca 歷史資料補上前一日收盤,畫面不會空白。
  • 一定要付費資料源嗎? 不用。免費 Alpaca IEX + 歷史就足夠個人使用;要全市場即時再升級 SIP。
  • 為什麼紅色是漲、綠色是跌?台股慣例(🔴 漲 / 🟢 跌),與美股相反。圖表與表格一致。
  • AI 會幫我下單嗎? 不會,也永遠不會。 本專案無任何下單 / 交易 API,僅做研究與風險提醒。

🔒 安全與隱私

  • 金鑰只放 .env(已被 .gitignore 排除,永不進 git);本 repo 不含任何真實金鑰。
  • 自架請填入你自己的 key;側欄署名可用 APP_CREDIT_NAME 環境變數自訂。
  • ⚠️ 本工具為單用戶設計,沒有登入 / 權限機制。若你把實例部署到公開網址,任何人都能看到並修改你的設定 —— 請勿公開分享你的線上實例網址,要分享請分享本 repo

🧪 測試

pytest        # 涵蓋技術指標、Signal Engine 規則、DB/queue、AI JSON 解析(mock LLM)

🔌 升級資料源(未來)

所有行情來源都實作 data_adapters/base.py 介面:

class QuoteAdapter:   # get_quote(symbol) / get_quotes(symbols)
class HistoryAdapter: # get_bars(symbol, timeframe, limit)
class NewsAdapter:    # get_news(symbol, limit)

新增一個 adapter 並在 market_monitor 換接即可,下游(指標 / Signal Engine / AI / Dashboard)完全不需改:

  • Alpaca SIP — 把 DataFeed.IEX 換成 DataFeed.SIP(需訂閱),即得全市場即時。
  • dxFeed Nasdaq Basic — 新增 data_adapters/dxfeed_stream.py 實作 QuoteAdapter
  • Finazon SIP — 新增 data_adapters/finazon_client.py 實作 QuoteAdapter + HistoryAdapter

🤝 貢獻

歡迎 issue / PR。請先跑 pytest 確認綠燈。詳見 CONTRIBUTING.md

📄 授權

MIT © 2026 BDMisME

致謝參考專案(僅閱讀、未合併程式碼):tradingagents、stocks-analysis-ai-agents、ai-stock-dashboard、streamlit-stock-analysis。

来源与作者

  • 原作者:@BDMisME
  • 发布平台:GitHub
  • 原帖:查看原帖
  • 权利说明:VibeMySpace 仅作带来源的整理展示,内容与图片权利归原作者。

开源信息

已开源。