🕐 --:--:--
查詢中
📈
景氣 …
📰
載入今日台股新聞中…

策略回測

短線交易設定

策略比較

潛伏偵測組合回測

模擬每交易日掃描全市場,潛伏訊號出現即買進,驗證策略有效性

載入中...

🚨 主力動向監控(即時)

監控範圍:自選股 ∪ 今日 stealth/screener 命中。三條件 AND 全中(A 外盤比 + B 量比 + C 強於大盤)才推 LINE
代號/名稱現價漲幅 A 外盤比B 量比C vs大盤 綜合
點「立即更新」載入
運行中
0
監控數
持倉中
0
個股
累計損益
$0
已實現
總交易
0
引擎狀態
ACTIVE
--:--:--
持倉監控
新增監控
策略引擎 (AND 邏輯)

新增警報

⭐ 自選股清單

檢視:

💼 持股管理

月度損益

紅 = 賺 / 綠 = 虧(台股配色)
股票 均成本 股數 現價 帳面收入 損益 損益% 操作

歷史交易

買日賣日股票股數 買價賣價損益報酬%持有天數 訊號策略品質
尚無歷史平倉交易

🎮 模擬交易

下單

目前持倉

股票股數均成本現價損益損益%

交易紀錄

日期股票買/賣價格股數金額備註

📅 除權息日曆

顯示您自選股的除權息資訊(當年+明年)。

股票 除權息日 除權日 除息日 現金股利(元) 股票股利(元) 合計 距今

帳號資訊

修改密碼

在線人員

🟢 活躍 session(30 分鐘內) 🟡 近 2 小時有登入(session 已逾時或伺服器重啟前)

帳號 狀態 IP 位址 最後活動時間 距今 上次登入
載入中...

📊 財報簡評

載入中...

📋 版本更新資訊

🔮 未完成路線圖(TODO)
✅ 已完成(2026-05-07 v1.9)
  • 🔴 第一級三項全部完成:InstitutionalRecords 補抓(14.6% → 44%)、Survivorship Bias 修正(含污染清理)、PriceAdjustService 整合進回測
  • 🟢 第三級四項:DB 自動備份、資料品質自動稽核、Logs 集中化(Serilog + TeeTextWriter);回測引擎 cache 暫不做(現未見 OOM、避免過度工程)
  • 附帶完成:圖表指標可調參數、三大法人資料全表清洗、5/5 整批 bulk 抓取缺漏修補
🟡 第二級 — 實戰必備
  • 賺價差監控 Dashboard:當前持倉表 + 累積績效卡 + 歷史交易表 + 月度損益圖
  • 每週 / 月度策略績效報告自動推 LINE(每週日 18:00 推送,含「跟 backtest 預期對照」)
  • 訊號歷史追蹤:SignalRecord 與 SuffocationPositions 關聯,記錄訊號後 5/10/20/30 天股價走勢,判斷訊號品質是否劣化
🔵 第四級 — 投資邏輯升級
  • 多策略組合 + 風險平價配置(窒息量 + momentum 兩低相關性策略)
  • 動態停損(ATR×2.5 trailing),預期 MaxDD 降 + 平均賺幅變大
  • 大盤 regime 辨識器(自動標記強多頭/震盪/空頭,策略依此切換啟用)
  • 新策略類別:Pairs Trading(市場中性)、除權息套利(台股填息率 70%+)、Sector momentum
📊 系統設計
  • 嚴格 in/out-sample 切分:2018-2022 in-sample 調參、2023-2024 out-of-sample 驗證;新策略要過此關才能上線
  • CI/CD + 單元測試:先寫 BacktestEngine / StealthPortfolioBacktest 關鍵測試 10-20 case
  • InstitutionalRecords 補完剩 1094 檔(FinMind 免費 quota 每輪 ~300 unique,需 3-4 輪 × 24h 重置)
v2.1 2026-05-26
🟢 新增:籌碼擴充 — 5 大資料源 + 個股「🪙 籌碼」分頁
  • 立體籌碼結構:從原本只有「三大法人 + 融資融券」擴張為「大戶持股結構 + 空方壓力 + 投機強度 + 散戶熱度 + 主力分點」5 維
  • 5 個新資料源
    • TDCC 集保大戶分布(每週六發布,opendata 全市場 ~60K 列一次抓)— 千張大戶比、散戶比、Level 1-15 分級
    • 借券賣出餘額 TWT93U(每日盤後,JSON 直抓)— 空方壓力指標
    • 全市場當沖溫度 TWTB4U(每日盤後,市場彙總)— 投機度指標(TWSE 無個股級 daily endpoint)
    • 零股盤後 + 盤中 TWT53U + TWTC7U(每日盤後)— 散戶熱度代理
    • 券商分點主力 FinMind TaiwanStockTradingDailyReport(需 Sponsor 訂閱,免費等級顯示提示)
  • 個股詳情頁新增「🪙 籌碼」分頁:4 卡片資料 + 1 卡片提示(券商分點)+ summary 4 指標(千張大戶 30 日趨勢、借券壓力等級、5 日當沖比、散戶熱度 z-score)
  • 單一 endpointGET /api/chip/{symbol}?days=60 並行讀 5 源 + 衍生指標計算
🟢 新增:3 個 background AutoFetch + 5 個手動觸發 endpoint
  • ChipDailyAutoFetchService(每交易日 17:00 / 19:00 / 21:00 嘗試 TWSE 3 源合一)
  • TdccHoldingAutoFetchService(週六 18/20/22 + 週日 9/15 嘗試 TDCC)
  • BrokerFlowAutoFetchService(每日 18:00,watchlist+holdings 12s/檔限速;偵測 SponsorRequired 自動 skip 整輪)
  • admin endpoints:POST /api/admin/fetch-{tdcc-once, borrowing, daytrade, oddlot, broker}
  • 補抓腳本fetch_chip_history.py 5 mode(borrowing/daytrade/oddlot/tdcc/broker),支援 resume + 限速 + 連續失敗 cooldown
🟢 新增:DataQualityAuditService 4 條籌碼稽核規則
  • C5 TdccCoverage:TDCC 發布後 24h 覆蓋率 < 80% 活躍股 → Critical
  • C6 BrokerFlowNetZero:單檔當日券商分點 NetShares 全 0(FinMind 解析失敗)→ Warning
  • C7 BorrowingUnitDrift:借券餘額 > 100 億股(單位錯偵測)→ Critical
  • C8 OddLotMissing:主板有量但零股完全空白 → Warning
🐛 修復:零股 amount 全 0 bug + DayTrade endpoint 調整
  • 零股 parser bugcols[7](盤後是「最後揭示買量」、盤中是「當日最高價」)→ 改為 cols[4](成交金額)。FetchDateAsync 改 upsert(DELETE 該日該 session 後 INSERT),重抓覆寫 30 天歷史錯誤資料
  • DayTradeStat 端點限制:TWSE 公開資料無個股級 daily 當沖(試過 TWTB4U/TWTBAU/TWTBAU2/TWTB4U_d/TWT54U 全失敗)。改為寫入 Symbol="MARKET" 全市場彙總(每日 1 row),ChipController 動態計算 ratio = 當沖股 / (全市場成交股 × 2)
  • FinMind 等級不足優雅降級BrokerDailyFlowService 第一次偵測「Your level is register」自動 set SponsorRequired=true,後續 fetch + AutoFetch 整輪 short-circuit;UI 顯示橘色「需 FinMind Sponsor 訂閱」提示框,附升級連結
📝 設計取捨與紀律(已寫入 memory)
  • FinMind 用免費 quota、不購買(使用者明示):BrokerDailyFlowService 設計成 watchlist+holdings 優先 + 12s/檔限速;沒 token 也照跑(匿名 300/hr);連續失敗自動 5 分鐘 cooldown
  • 單位策略:5 個新表所有股數欄位一律存「股」、前端用 _lots/1000 轉「張」顯示(嚴守 feedback_volume_unit)
  • Date converter:5 個新表 Date 欄位全部 HasConversion 強制 yyyy-MM-dd(避開 InstitutionalRecord 早期 38,982 筆格式分裂事故)
  • TWSE 日期驗證:所有 endpoint 寫入前驗 date 欄位(避免假日 fallback 前一交易日把舊資料當新日寫入)
  • 不在本次範圍:全市場「籌碼總覽」儀表板、券商分點即時告警、基於這些資料的新策略 — 依 META 紀律「研究產出 ≠ 系統價值,需先有部署規劃」
🗄 新增資料表(5 個,自動 startup DDL)
  • TdccHoldingDistributions(Symbol, Date, Level 1-15, Holders, Shares, SharePct)
  • SecuritiesBorrowings(Symbol, Date, BorrowSaleVolume, Return, Balance, NextLimit)
  • DayTradeStats(Symbol="MARKET", Date, Volume, BuyAmt, SellAmt)
  • BrokerDailyFlows(Symbol, Date, BrokerCode, BrokerName, Buy/Sell/NetShares)
  • OddLotTrades(Symbol, Date, Session, Volume, Amount, TxnCount)
v2.0 2026-05-11 ~ 2026-05-12
🐛 修復(重大 — 推翻過往對照結論):StealthPortfolioBacktest 非確定性
  • 根因:每日 buy 訊號掃描中 4 個 OrderByDescending(s => s.sig.Confidence) 缺少 tie-breaker,confidence 經 Math.Round(..,2) 後同分機率極高,排序依賴 Dictionary 迭代順序 → trade 組合不可重現
  • 實證:同參數連跑兩次,2025-08~2026-05 樣本 MDD 可從 11.6% 擺動到 19.3%(±7.7pp)— 之前所有 bt_*.json 對照結論其實都在 noise floor 內
  • 修法:4 處 OrderBy 加 .ThenBy(s => s.sym, StringComparer.Ordinal)
  • 驗證:同參數連跑 3 次 MD5 完全一致(c9eb593b…),回測 100% deterministic
🟢 新增:Portfolio-level 大盤 regime gating(4 區段全勝)
  • 設計RunAsync setup 階段預先計算 bullishByDay(IX0001 vs MA60),buy 訊號掃描入口加 if (!muteToday)。空頭日整個跳過 buy 訊號掃描,已開倉位繼續走停損/停利
  • walk-forward 4 區段對照(vs 不啟用):
    • 2022 空頭:alpha -26.04 → -5.37(+20.7pp,MDD 50%→30%)
    • 2023 整理:alpha -9.49 → +16.76(+26.3pp,整個 V2 系列第一次正 alpha
    • 2024 多頭:alpha -33.77 → -9.04(+24.7pp,MDD 35%→21%)
    • 2025H2 多頭:mute 僅觸發 2 天,幾乎無影響(+0.83pp)
  • 設計教訓:曾以 strategy-level 在 ComputeLurkingScore 內 mute Lurking,2022 空頭結果 alpha 反向惡化 -5.9pp(mute 出來的配額被 Ignited 吃滿,追勢撞空頭更慘)。regime gating 必須 portfolio-level,不能單擋一條策略,已將 strategy-level 邏輯移除
🛠 新增:3 個 ablation flags(A/B 對照標準工具)
  • DisableRegimeGating(預設 false,啟用 portfolio-level regime gating)
  • DisableIndustryDiversification(預設 true,停用)— 實證在 2024 多頭傷 alpha -15.8pp,cap=2 把當年主流強勢產業擋掉
  • DisableChipScore(預設 true,停用)— 法人 20 日淨買超 +10 分是 lagging indicator,2024 多頭 -13.4pp、2023 整理 -3.7pp(重蹈 InstitutionalFlow 失敗模式)
  • 程式碼保留作為未來研究 hook,可隨時 A/B 對照
📊 walk-forward baseline 建立(含確定性樣本)
  • 4 個 regime 區段:2022 全年(空頭 -22.6%)、2023 全年(整理 +26%)、2024 全年(多頭 +29.9%)、2025-08~2026-05(多頭 +73.7%)
  • 當前最佳設定 alpha:-5.4 / +16.8 / -9.0 / -41.1
  • 結果檔案:wf/wf2/wf3/tp_test/tp_wf/(共 32 個 JSON)
📝 設計教訓(已寫入 memory,跨會話保留)
  • Strategy-level regime gating 是錯的:mute 一條策略會把配額推給鄰居策略,鄰居在同樣的市場條件下可能更糟
  • 「分散優於集中」在主流產業強勢的多頭時為偽:產業 cap=2 等於把當年強勢主流主動讓出
  • 法人連買是 lagging indicator:等加分進場時漲幅已被法人吃掉(即 InstitutionalFlow 早已驗證的「法人打滿底、散戶接刀」陷阱)
  • Spot check 永遠不可信:3 次驗證單一區段挑最有利數字會誤導全局決策(S3 動態化、A3 退役、TP=35)
  • TakeProfit 是 regime-dependent:強多頭/強空頭適合 TP=35,整理/中等多頭適合 TP=15,沒有 universal 改善
  • 系統缺 pure momentum 子策略:Lurking 抓「橫盤後突破」,主升段中股票直接突破無橫盤,結構性錯過 alpha 來源
❌ 試過但實證失敗,已回退或預設停用
  • S3 roc20 動態化(多頭放寬上限至 +10%):Sharpe 1.59→1.09、MDD +6pp,已回退
  • A3 Awakening 退役(quota=0):Ignited 過度開倉 MDD 11.6→20%,已回退 quota=1
  • A2 產業分散 cap=2:2024 多頭 alpha -15.8pp,flag 預設 true 停用
  • S1 法人籌碼 +10 分:lagging,2024 多頭 -13.4pp,flag 預設 true 停用
  • TP=35 拉長停利:2024 多頭 alpha -13.86pp,維持預設 TP=15
🔍 trades 診斷揭示的 3 條 root causes(待後續研究)
  • TP=15% 切掉大波段:2025H2 報酬分佈 bimodal(90% 卡 -10~+5%,22% 擠在 +15~+25%),無單筆 ≥ 30%
  • 「5 日內 -5%」fast-fail 過敏感:23% trades 觸發、平均 -6.15%(未做 ablation 驗證)
  • Lurking 子策略最強(win 52%、avgRet +3.34%、best 24.8%)— edge 明確,問題在出場機制與配額分散
v1.9 2026-05-07
🟢 系統健壯性(第三級全部完成)
  • DataQualityAuditService 資料品質自動稽核:每日 18:00–19:00 自動跑 4 個健康檢查,Critical 推 LINE。
    • C1 InstFlowVsVolume:法人買賣張數 / 成交量 > 5x(金融/ETF 法人集中交易合理上限;過濾 < 100 張低流動性)→ Critical
    • C2 InstFlowOutlier:單檔 ForeignNet 離長期平均 ×100 → Warning
    • C3 DateConsistency:StockPrices vs InstitutionalRecords 覆蓋率(< 50% Warning、< 10% Critical、當日盤中 Info)
    • C4 AllZeroRatio:單檔 90 天內全 0 占比 > 50% → Warning
    • 去重邏輯:同 (Category, Symbol, IssueDate, Field) Open 狀態跳過 → 避免 LINE 警報疲勞,「只推新發現」
  • DbBackupService 自動備份:每日 02:00 用 SQLite VACUUM INTO 寫副本到 db_backups/,比 cp 安全(避免 WAL 不一致)+ 自動瘦身(實測 480→372 MB ~22% 縮減),保留 30 天
  • Logs 集中化(Serilog + TeeTextWriter):logs/app-{date}.log 全訊息(保留 14 天)、logs/error-{date}.log 僅 Error+(保留 30 天);TeeTextWriter 把所有 Console.WriteLine 同步寫到 logs/console-{date}.log,徹底解決 silent failure(如 5/5 那種 stdout 流失)
🐛 修復(資料正確性 — 重大)
  • 三大法人資料全表清洗(從 2883 凱基金問題追到全表)
    • 發現 Date 格式分裂:C# EF 寫入帶 00:00:00、Python FinMind 寫純日期 → PK 不匹配 → 23,977 對重複
    • 發現單位混亂:C# T86 端寫「張」(/1000)、FinMind 腳本寫「股」 → 同檔同日數值差 1000 倍
    • 修復:去重 23,977 筆 + 全表 ÷1000 統一「張」+ Date 規範化 38,982 筆
    • 防呆:StockDbContext.InstitutionalRecord.Date 加 HasConversion 強制 yyyy-MM-dd 格式;fetch_institutional_finmind.py 寫入前 round(buy/1000)
    • codebase 規範確立:InstitutionalRecords 全部「張」、StockPrices.Volume「股」、前端 _vlots() 顯示用「張」
  • 2026-05-05 整批 bulk 抓取缺漏修補:那天 1083 檔(中型股 + 上市 ETF)Volume 只抓到完整資料的 2-9% — TWSE bulk 在某時點被中斷。用 Python + curl 直接打 TWSE MI_INDEX,UPDATE Volume 顯著低於 TWSE 值的股
  • 下市股 prices 污染清理:刪除 3,256 筆「下市後污染 prices」(含 2301 東元 2447 筆,下市於 2002 但被持續寫入;其他多為 2025-02-06 bulk 抓取時意外帶入的單筆污染)
📊 第一級完成(影響策略可信度)
  • Survivorship Bias 修正:BacktestEngine 注入 optional IServiceScopeFactory,ApplyDelistedFilterAsync 在 RunAsync/RunWithPricesAsync 載入 prices 後截斷至下市前;StealthPortfolioBacktest 載入 delistedDates map,4a 持倉股若已下市 → 用下市前最後 close 強制平倉,4b 進場時 execDay ≥ DelistedDate → 跳過
  • InstitutionalRecords 歷史補抓:透過 fetch_institutional_finmind.py(FinMind TaiwanStockInstitutionalInvestorsBuySell),2018-2024 歷史覆蓋率 14.6% → 30% → 44%(866/1960 檔),總筆數 593K → 1,601K
  • 抓 263 筆 TWSE 下市清冊(POST /api/admin/fetch-delisted-stocks)
🎨 介面(圖表指標可調參數)
  • 工具列 ⚙ 按鈕 + 設定 modal:5 分頁切 MA / BB / RSI / MACD / KD,各指標可調:MA 週期清單(1-5 條,最多 5 條顏色輪播)、BB 週期 + 標準差、RSI 週期、MACD Fast/Slow/Signal、KD 週期
  • 後端 GET /api/stocks/{symbol}/indicators 接受 7 個 query 參數,含 Math.Clamp 防呆(macdSlow 強制 > macdFast)
  • localStorage key qts_indicator_params 持久化使用者偏好;ChartsLW.setMaPeriods([5,20,60]) 動態設定 MA 週期清單
  • modal 背景透明度從 .55 提升至 .85 + backdrop-filter: blur(3px) 模糊背後內容
✅ 新增 API 端點
  • POST /api/admin/run-audit — 立即執行一次資料品質稽核(同步等待結果)
  • GET /api/admin/data-quality-issues?status=&severity=&category= — 列出 issues(依嚴重度倒序)
  • POST /api/admin/data-quality-issues/{id}/resolve?status=&note= — 標記為 Resolved / Acknowledged / Ignored
  • POST /api/admin/run-backup — 立即執行一次 DB 備份(VACUUM INTO 寫副本至 db_backups/)
  • GET /api/admin/backups — 列出現有備份檔
  • GET /api/admin/logs — 列出 logs/ 目錄下的日誌檔
  • GET /api/admin/logs/{fileName}?tail=N — 讀取單一 log 檔的最後 N 行
  • POST /api/admin/fetch-single-day?date=YYYY-MM-DD — 重抓單一交易日全市場資料(修補 bulk 抓取缺漏用)
  • POST /api/admin/fetch-delisted-stocks — 從 TWSE 抓取下市公司清冊,更新 Stocks.DelistedDate + 標記 IsActive=false
  • GET /api/admin/delisted-stocks — 查詢下市股票清單
v1.8 2026-05-04 ~ 2026-05-05
🎨 介面(UI/UX 重構)
  • 選單移至左側 Sidebar:原本擠在 header 的 14 個 nav-btn 改為左側固定式選單(220px 寬),每項加上 emoji icon 與 active 項目左側發光指示條;行動裝置(≤900px)自動切換為漢堡按鈕+抽屜模式,點擊任一選單項後自動關閉抽屜
  • 頂部資訊條 Topbar:sticky 固定於上方,由左至右整合五大即時資訊模組
    • 🕐 即時時鐘:HH:MM:SS + 月/日 + 星期,每秒更新(純前端 setInterval)
    • 盤中/盤後燈號:綠燈(盤中、pulse 閃爍動畫)/黃燈(盤後)/灰燈(週末休市),30 秒輪詢 /api/realtime/status
    • 📈 加權指數即時報價:當前指數、漲跌點、漲跌幅(台股慣例紅漲綠跌),15 秒更新
    • 國發會景氣對策信號:紅/黃紅/綠/黃藍/藍五燈號 + 綜合分數 + 月份,6 小時更新
    • 📰 今日台股新聞跑馬燈:5 秒上滑切換一條(CSS transform 動畫),顯示新聞標題 + 來源 + 發布時間,hover 暫停輪播、點擊開原文新分頁
  • 新版面採用 CSS Grid(fixed sidebar + topbar + main),main 內距與 max-width 限制移除以充分利用螢幕;style.css 抽出 --sidebar-w (220px) / --topbar-h (56px) 兩個 layout 變數
✅ 新增 API 端點
  • GET /api/market/taiex — 加權指數即時報價(TaiexQuoteService),三層 fallback:TWSE 即時 API(tse_t00.tw)→ stooq CSV ^twii → DB 內 IX0001 最新兩筆。回傳 value/change/changePct/open/high/low/prevClose/asOf/source,盤中 15 秒快取
  • GET /api/market/economic-signal — 國發會景氣對策信號(EconomicSignalService),三層 fallback:國發會 OpenData JSON → 國發會首頁 HTML 解析 → Google News RSS 標題 regex 解析(搜「景氣對策信號 分」抓最新一篇媒體報導,從標題拿月份/燈號/分數)。回傳 color/colorName/score/period,6 小時快取
  • GET /api/news/market?limit=N — 全市場(台股總體)新聞(NewsService.GetMarketNewsAsync),鉅亨網 tw_stock category 不帶 code 抓全市場 → Google News RSS 以「台股 OR 台積電 OR 加權指數」搜尋備援,10 分鐘快取
🐛 修復(資料正確性 — 重大)
  • IX0001(加權指數)資料污染全面修復:TwseMarketBulkService 解析 MI_INDEX 時原本誤把後續 table 的「加權指數掩護性臺指買權價外5%報酬指數」(~7788) 覆寫到 IX0001 Close(真值約 18034),導致 2018-2024 大盤指數整段嚴重失真,所有 Alpha 計算、MarketFilterService MA20/MA60 判斷皆受影響
  • 修正 parser 為「精確比對『發行量加權股價指數』+ 外層 break」防止後續 table 覆寫;_saveTaiexAsync 在 update 時同步重寫 OHLC 全欄位
  • 透過 Yahoo Finance ^TWII 一次性重建 IX0001 完整歷史(2018-01-02 ~ 2025-11-28,共 1922 bars),所有年度報酬率與已知歷史精準對齊(2018 -9.18% / 2022 -22.62% / 2024 +29.89%)
  • 個股 CNY-eve 污染清理:偵測並刪除 310 筆異常列,集中於 2024-02-06(157 檔)與 2025-01-24(147 檔),兩個農曆過年前最後交易日的批次抓取資料污染(價格高於正常 4-6 倍 + 成交量錯亂)
  • BacktestEngine 修「0 筆交易卻有交易成本」bug:未平倉的最終強制平倉先前未計入 wins/losses 統計,導致 SignalType=Sell 從未觸發的策略顯示 TotalTrades=0 但有 commission/tax
✏️ 修改(回測引擎全面強化)
  • BacktestEngine 重寫:訊號 t 日收盤產生 → t+1 開盤成交(消除未來函數),加 SlippageBps(預設 10 bps)、加 MinDailyVolumeLots 流動性過濾(預設 100 張)、UseOpenPrice 預設改 true
  • BacktestEngine 績效指標升級:Sharpe 改用 log return(取代算術平均),新增 Sortino、Calmar、Profit Factor、CAGR、MaxDrawdownDays、TotalSlippageCost
  • StealthPortfolioBacktest 重構:同步套用上述全部修正(t+1 開盤、滑價、流動性、log Sharpe、Sortino/Calmar/PF/CAGR/MaxDDDays),並修復原本持倉天數計算用 tradingDays.IndexOf(O(n²)) 的效能災難,改用 EntryDayIdx 直接計算
  • StealthPortfolioBacktest 新增 IX0001 大盤對照:BenchmarkReturn + Alpha 自動計算並回傳
  • StealthPortfolioBacktest 新增 strategyName 參數(可指定單一策略而非寫死 4 個潛伏策略)+ symbolUniverse 參數(可限定股池而非全市場),支援按策略類型 + 自選股池做投組級回測
  • StealthBacktestApiRequest 暴露新欄位:slippageBps / minDailyVolumeLots / useOpenPrice / strategyName / symbolUniverse;回測期間限制由 6 個月放寬至 5 年(支援 walk-forward)
✅ 新增
  • POST /api/admin/purge-taiex:清除 IX0001 全部歷史資料(用於修復雙資料源污染後重抓,與 fetch-taiex 搭配使用)
  • BacktestResult 新欄位:Cagr、SortinoRatio、CalmarRatio、ProfitFactor、MaxDrawdownDays、TotalSlippageCost
  • StealthBacktestResult 新欄位:Cagr、SharpeRatio、SortinoRatio、CalmarRatio、ProfitFactor、MaxDrawdownDays、TotalSlippageCost、BenchmarkReturn、Alpha
  • BacktestOptions 新欄位:SlippageBps、MinDailyVolumeLots、LiquidityLookbackDays
📊 驗證(21 策略 × 7 年 walk-forward)
  • 修完所有 bug 後,用修正版投組引擎對全部 21 策略執行 2018-2024 跨年驗證(每年使用該年「日均量 ≥ 100 張、≥ 200 個交易日」之全 4 碼上市股池,50 slot / 2% per slot / SL 10% / TP 20% / Hold 30d)
  • 結論:21 策略全部 mean Alpha 為負(最佳 -8.54%、最差 -24.90%),無任何策略達到「≥ 5/7 年正 Alpha 且 mean Alpha > 0」之強候選門檻
  • 4 個籌碼類策略(籌碼集中、底部籌碼集中、籌碼背離蓄勢、抗跌蓄勢)因 InstitutionalRecords 歷史資料缺失與 RelativeStrengthStrategy IX0001 注入未在「指定策略名稱」路徑生效,產生 0 trades,待後續修復後再測
  • 窒息量回溫策略在 2021(Alpha +1.07%、Sharpe 1.70)與 2022(Alpha +14.39%)兩個年度顯示部分價值,待進一步深挖大盤狀態切換邏輯
✅ 新增(賺價差實戰系統 — 2026-05-05)
  • SuffocationDailyScanService 每日盤後自動掃描:每交易日 14:00(收盤後 30 分鐘)對全市場 4 碼上市股執行「窒息量回溫」策略掃描,篩出信心度 ≥ 0.55 的 BUY 訊號
  • 自動 Paper Trade 連動:訊號出現後自動建立模擬部位(3 倉×33% 配置),達停損 8% / 停利 15% / 持倉 30 天時自動平倉,全程不需人工介入
  • SuffocationPositions 獨立資料表:與使用者手動 PaperTrades 完全隔離,紀錄進場日/價/股數/信心度、出場日/價/原因、損益 % / 金額
  • LINE / Telegram 即時推播:每日掃描後推送「今日平倉清單(含損益)+ 新建倉清單 + 未進場訊號清單 + 配置參數」
  • API 端點:GET /api/suffocation-paper/active(當前持倉+即時損益)、GET /api/suffocation-paper/history(歷史交易)、GET /api/suffocation-paper/performance(累積績效摘要:勝率/PF/累積報酬等)、POST /api/suffocation-paper/close/{id}(手動平倉)
  • POST /api/admin/trigger-suffocation-scan:手動觸發完整 cycle(測試用)
✅ 新增(財報資料管理 — 2026-05-05)
  • 「💰 財報管理」admin tab:覆蓋率即時統計卡片、季度涵蓋分布表、批次抓取/強制重抓/停止按鈕、即時進度條(僅管理員可進入)
  • 儀表板 + 自選股「📊 財報」按鈕:所有登入使用者點擊任一股票可開啟「財報簡評 modal」,顯示健康度評分(0-100,🟢🟡🟠🔴 標示)、最新季關鍵數字(EPS/營收/毛利率/營益率/負債比/自由現金流,含 YoY/QoQ)、文字評估摘要、近 8 季財務趨勢表
  • FinancialAutoFetchService 排程:每 6 小時檢查,當「上一個財報公告截止日後 7 天內」+「完整三表覆蓋率 < 70%」時自動觸發(截止日:Q1=5/15、Q2=8/14、Q3=11/14、Q4=隔年 3/31)
  • fetch_financials_yahoo.py 慢速備援抓取:透過 yfinance 從 Yahoo Finance 抓取全市場財報(每檔 2 秒間隔,避免限速)。實測 1957 檔處理 83 分鐘,寫入 5826 筆,覆蓋率從 4.2% 提升至 46.5%
  • API 端點:GET /api/financial/{symbol}/summary(個股財報簡評)、GET /api/admin/financials-coverage(覆蓋率統計)、POST /api/admin/batch-fetch-financials(觸發批次)、GET /api/admin/batch-fetch-financials-progress(進度)、POST /api/admin/batch-fetch-financials-stop(停止)
📚 學習(策略優化反例 — 2026-05-05)
  • 對「趨勢突破複合」做參數優化(Python signal-level grid search):找到 (5,15,90,1.0) 配置 — IS PF 1.06 / OOS PF 1.06 完全一致,trade-level edge 驗證為真(非過擬合)
  • 但同參數套到 C# portfolio walk-forward 反而變更差:mean Alpha 從原版 -11.53% 跌到 -12.12%
  • 原因:優化版去掉量能過濾後訊號數 1.5x,portfolio 50-slot 容量有限 → 多出來的訊號稀釋好訊號
  • 結論:Trade-level edge ≠ Portfolio-level Alpha;後續做策略優化時必須在 portfolio level 直接做 grid search(慢但結果可信)
  • 研究決定:暫停「13 策略逐一參數優化」計畫;接受 25 策略 + 因子 + 1 優化嘗試全敗的結論,回歸窒息量單策略 paper trade 觀察
🐛 修復(FinMind 整合 — 2026-05-05)
  • MopsFinancialService FinMind token 從未注入:constructor 與 DI 註冊均未讀取 appsettings 中的 FinMindToken,導致所有 FinMind 呼叫無 auth → 觸發限速 → IP 被封;已修正讀取與帶入 token query string
  • silent catch 吞錯誤導致 failed 計數器永遠為 0:批次抓取時所有 FinMind 失敗都被 _fetchAllQuartersAsync 內部 try/catch 默默吞掉,外層只看到「0 trades」誤以為成功;改為損益表抓取失敗即拋出,由批次層計入 Failed
  • 連續失敗無自動停止機制:被 FinMind 封 IP 後仍繼續打 2000+ 次無效呼叫;新增「連續 5 檔失敗自動停止」並提示「可能被限速/封 IP,請設定 FinMindToken 後重試」
  • StealthPortfolioBacktest 「指定 strategyName」路徑下 RelativeStrengthStrategy 未注入 IX0001:導致「抗跌蓄勢」走單策略路徑時永遠回傳 Hold(0 trades);已修正在 StrategyName 路徑下檢查 IStrategy 是否為 RelativeStrengthStrategy 並呼叫 SetTaiexPrices
v1.7 2026-04-27
✏️ 修改
  • 成交量對外單位全面統一為「張」— 所有 API 回傳 StockPrice / RealtimeQuote 改吐 volumeLots(張),DB 內部仍維持「股」精度,前端不再做 /1000 換算
  • StockPrice / RealtimeQuote Model 重整:原 Volume 欄位加 [JsonIgnore] 不對外暴露,新增 VolumeLots 計算屬性;RealtimeQuote 依 DataSource 自動換算(TWSE 即時報價原生即「張」直接輸出,Yahoo fallback「股」/1000 換算)
  • 前端圖表改用 volumeLots:charts-lw.js(歷史 K 線量柱、盤中 K 棒)、charts.js、app.js 即時報價量值,移除舊有 /1000 邏輯
🐛 修復
  • 修復盤中即時 K 棒量柱單位錯亂 — 原本 TWSE 來源(已是「張」)被前端再除以 1000 變「千張」,使盤中 K 棒量柱比歷史 K 棒小 1000 倍
  • 修復 Yahoo Finance fallback 報價時,dashboard 即時成交量誤把「股」當「張」顯示的 bug
✅ 新增
  • 全系統 Volume insert/update 稽核:通過 11 處 DB 寫入點的「股 ↔ 張」單位轉換審查(FinMind / stooq / TWSE STOCK_DAY / MI_INDEX / TPEX / Yahoo OTC / TWSE MIS 即時 / Yahoo fallback / T86 法人 / MI_MARGN 融資融券),確認所有來源轉換邏輯正確、無單位錯亂
v1.6 2026-04-22
✅ 新增
  • 動態休市日機制 — 自動偵測颱風假等無法事前預知的休市日,批次抓取時若 TWSE/TPEX 均回傳 0 筆資料,系統自動記錄為動態休市日
  • 動態休市日管理 API:GET/POST/DELETE /api/admin/dynamic-holidays,支援查詢、手動新增與刪除
  • 無效股票清理端點 — POST /api/admin/clean-invalid-stocks:支援乾跑模式(dryRun=true)預覽 + 正式刪除,修復 OTC 8557 筆異常記錄
  • 資料稽核統計強化 — 缺漏交易日明細:data-audit API 新增 missingDates(具體缺漏日期列表)、holidaysInRange(已排除假日數)、totalCalendarDays 欄位
✏️ 修改
  • 非交易日判斷全面升級 — IsMarketOpen 及 8 個服務統一使用 TaiwanTradingCalendar,國定假日(含彈性放假)不再觸發無效 API 請求
  • 背景服務假日保護 — PriceAlertBackgroundService 在國定假日自動停止即時報價抓取與價格同步
  • OTC 股票代號驗證加嚴 — 新增 IsValidStockSymbol(前 4 碼必須為數字),防止 TPEX 回傳的分類標題等非股票項目被錯誤收錄
  • 稽核儀表板顯示優化 — 覆蓋率卡片顯示「已排除 N 假日」、缺漏卡片顯示前 5 筆缺漏日期明細
🐛 修復
  • 修復國定假日 09:00–13:30 時段 IsMarketOpen 誤回傳 true,導致背景服務向 TWSE 發送無效請求
  • 修復法人資料補抓、融資融券、基本面等服務在國定假日仍嘗試呼叫 API 的問題
  • 修復 OTC 股票總數顯示 8557(實際約 800-900)的資料汙染問題
v1.5 2026-04-22
✅ 新增
  • 潛伏偵測系統 — 全新「左側偵測型」選股引擎,從傳統「趨勢確認(右側)」優化為「潛伏偵測(左側/起漲初始)」,在主力佈局階段即偵測蓄勢訊號
  • 7 個左側偵測指標:OBV 線性回歸斜率(暗中吸貨偵測)、量比衰減率(縮量蓄勢)、波動率收斂比(ATR squeeze)、BB 寬度百分位(Bollinger 壓縮偵測)、支撐帶測試分析(底部型態量化)、量價背離分數(價跌量升偵測)、OBV 計算
  • 5 個潛伏偵測策略:量價背離潛伏(價格盤整但 OBV 暗中堆積)、波動收斂爆發(BB squeeze + ATR 收斂 = 噴發前兆)、底部籌碼集中(法人小口吃貨暗盤偵測)、支撐確認蓄勢(W 底/三重底量化抽象)、抗跌蓄勢(大盤回檔時個股抗跌 = 有人護盤)
  • 潛伏偵測組合回測引擎:每交易日掃描全市場,訊號出現即模擬買進,支援停損/停利/最大持倉天數/最大持倉檔數/最低信心度等參數,產出績效摘要、各策略分項勝率、淨值曲線、交易明細
  • 蓄勢階段分類器:Stage0(下跌末端)→ Stage1(止穩築底)→ Stage2(暗中吸貨)→ Stage3(彈簧壓緊)→ Stage4(起漲初始),量化判斷個股處於蓄勢週期的哪個階段
  • 蓄勢分數加權評分:量能結構(OBV 背離 + 量比衰減)、波動收斂(BB% + ATR 比)、技術結構(支撐測試 + RSI 墊高)、量價背離,正規化為 0-100 分,S/A/B/C 等級
  • 前端「潛伏偵測」頁簽:三個子頁 — 組合回測(績效卡片 + 策略分項表 + canvas 淨值曲線 + 交易明細)、全市場掃描(Top 50 蓄勢分數排行)、個股分析(指標儀表板 + 蓄勢階段)
  • 後端 API:POST /api/stealth/backtest(組合回測)、GET /api/stealth/scan(全市場掃描)、GET /api/stealth/analyze/{symbol}(個股蓄勢分析)、GET /api/stealth/strategies(潛伏策略列表)
v1.4 2026-04-14
✅ 新增
  • 智慧選股 — 未起漲潛力股標籤頁(🌱):全市場掃描尚未過熱的潛力股,條件:RSI(14) 30–58、站穩 MA60、現價距 MA60 ≤ 25%、距 52 週高點 ≥ 5%
  • 未起漲潛力股 — 五大加分條件:縮量守高、OBV 上升趨勢、投信連買、外資投信共振、MA 多頭排列,評分 0–5 分
  • 未起漲潛力股 — 表格顯示停損(紅)/ 停利(綠)/ 風險報酬比,點擊個股可跳轉完整分析師報告
  • 後端 API:GET /api/screener/prebreakout(未起漲潛力股篩選,含智慧停損停利與風報比)
✏️ 修改
  • 智能多因子分析(AutoScreen)— 停損/停利計算改良:由固定比例(×0.92 / ×1.15)改為智慧計算:停損取近 20 日最低低點 × 0.99 / MA20 × 0.97 / 現價 × 0.88 三者取高;停利取 52 週高點(若 > 現價 × 1.10),否則現價 × 1.15
  • 在線用戶顯示修正:管理者後台現可看到所有帳號的在線狀態與最後活動時間(含 LastSeenAt 即時更新機制)
  • 分析師報告 — AI 分析快取:已生成的 AI 分析快取至隔日開盤前,開盤時每小時最多重新生成一次,按鈕顯示剩餘可再生成時間
  • 分析師報告 — 樣式優化:各分析段落套用財金主題顏色標示(技術面藍、籌碼面紫、風險橘、操作建議金)
v1.3 2026-04-13
✅ 新增
  • 自選股 — 分析師建議按鈕:每張股票卡片新增「分析師建議」按鈕,點擊後開啟完整分析師報告 Modal
  • 自選股 — 多因子評分條:每張卡片即時顯示多因子評分進度條與等級(強烈買進 / 中性偏多 / 中性觀望 / 中性偏空 / 謹慎看空)
  • 分析師報告 Modal:涵蓋均線排列(MA5–MA240)、RSI(14)、MACD 柱狀、布林通道、ATR(14)、年化波動率、52 週位置、法人籌碼(外資/投信近 5/20 日)、量能(今日/月均/季均)、三期動能(5/20/60 日)、支撐壓力、重點分析文字、投資建議
  • 分析師報告 — 多因子評分明細:七大維度(均線趨勢 /RSI/MACD/ 量能 / 法人籌碼 / 動能 / 52 週位置),各維度分數進度條
  • 圖表標題列「加入自選股」按鈕:切換個股時自動同步資料庫狀態,顯示 ★ 已自選 / ☆ 加入自選
  • 後端 API:GET /api/analysis/{symbol}(完整分析師報告,含七大因子評分)
  • 後端 API:POST /api/analysis/batch-score(批次多因子評分,供自選股卡片使用)
  • 資料完整性稽核 — 三層檢查:歷史長度 ≥50%、近 60 日覆蓋率、6 個月內部缺口(<70% 覆蓋率)
  • 後端 API:GET /api/admin/audit-gaps(按股票掃描內部缺口)、POST /api/admin/fix-gaps(補抓缺口資料)、GET /api/admin/gap-fix-progress(進度查詢)
  • K 線補齊機制:偵測個股內部資料缺口(如春節缺口),自動以 stooq 優先、Yahoo/TWSE 月份資料備援補回
✏️ 修改
  • 自選股:存取由 localStorage 改為資料庫(WatchlistItems 表),多裝置共用、不因清除快取遺失
  • K 線圖 — MA60 暖機修正:displayFrom 改為動態計算(取第 61 筆資料日期),確保 MA60 從第一根可見 K 線起即完整
  • K 線圖 — 日期格式:由「dd m月 'yy 00:00:00」改為「yyyy/mm/dd HH:mm:ss」
  • K 線圖 — Crosshair 懸停資訊:主圖顯示開/高/低/收(紅漲綠跌),量能圖顯示成交量(張),即時跟隨游標
  • Backfill 進度回報:失敗日期(FailedDates)區分「假日類(如颱風停市)」與「不明原因失敗」兩類,避免混淆
  • 上櫃股補齊選擇邏輯修正:由「歷史筆數 <50%」改為三條件聯集(歷史不足 OR 近 6 月覆蓋 <70% OR 近 60 日無資料)
v1.2 2026-04-10
✅ 新增
  • 全策略共振掃瞄 — 搜尋列:掃瞄完成後顯示搜尋框,可依股票代號或名稱即時過濾結果
  • 全策略共振掃瞄 — 複合排序:依維度共振數降序,維度數相同時再依觸發策略數降序排列
  • 全策略共振掃瞄 — 智能多因子分析欄:每列新增「🧠 分析」按鈕,點擊後顯示五大維度評分與訊號(趨勢/動能/量價/籌碼/基本面),綜合加權總分→等級 A+/A/B+/B/C+/C
  • 除權息日曆 — 自選股分頁:進入除權息頁自動載入自選股當年+明年的除權息資訊,標示剩餘天數(今日/≤14天/≤60天色彩提示)
  • 自選股清單 — 除權息標示:即將除權息(60天內)的股票卡片自動顯示除權息日期與金額標籤
  • 後端 API:GET /api/screener/multi-factor/{symbol}(多因子分析)
  • 後端 API:GET /api/dividend/watchlist(自選股除權息,需登入)
✏️ 修改
  • 除權息日曆:修正 TWSE TWT49U API 欄位順序(日期/代號/名稱)及日期格式(115年04月01日)解析
  • 除權息日曆:快取改為多年字典,支援當年+跨年查詢
  • 除權息日曆:類型判斷改用「息」/「權」關鍵字(原錯誤使用「除息」/「除權」)
v1.1 2026-04-09
✅ 新增
  • 個人設定頁面:帳號基本資料維護(Email)及修改密碼功能
  • 個人設定頁面:Bot 設定頁簽,每位帳號可獨立設定 Telegram Bot 及 LINE Messaging API
  • 管理頁面:在線人員清單,顯示 IP、帳號、登入時間及停留時間(30 分鐘 session)
  • 管理頁面:帳號清單,每頁 20 筆分頁瀏覽,不顯示密碼
  • 管理頁面:SMTP 設定,管理員可於後台設定郵件伺服器並發送測試信件
  • 登入頁面:忘記密碼功能,輸入 Email 後發送密碼重設連結至信箱
  • 密碼重設流程:token 連結有效期 1 小時,點擊後進入 reset-password.html 設定新密碼
  • 個股三大法人動態:選擇個股後顯示近期外資、投信、自營商買賣明細與圖表
✏️ 修改
  • 通知頁面:移除「渠道設定」頁簽,Bot 通知設定整合至個人設定頁面,通知頁保留「價格警報」及「推送歷史」
  • 伺服器重啟按鈕:改為僅管理員(admin)帳號可見,一般使用者不顯示
  • 三大法人動態:由固定顯示大盤資料改為選擇個股後才顯示,顯示內容為個股資料
  • 管理頁面新增「📧 SMTP 設定」頁簽
  • 登入頁面新增「忘記密碼」頁簽
  • Auth.isAdmin() 邏輯加強:同時解析 JWT payload,避免舊 localStorage 快取導致判斷錯誤
🗑️ 移除
  • 登入頁面:預設管理員帳號提示文字(admin / admin123)
  • 儀表板:大盤三大法人即時動態 widget(已由個股三大法人功能取代)
v1.0.1 2026-04-04 ~ 2026-04-08
✅ 新增
  • 多使用者帳號系統:AppUsers 資料表、JWT 登入、BCrypt 密碼雜湊、預設 admin 帳號自動建立
  • 多使用者資料隔離:PriceAlerts、HoldingRecords、PaperAccounts、PaperTrades、WatchlistItems 各自以 UserId 區隔
  • NotificationSettings 新增 UserId 欄位,每位使用者可獨立設定通知渠道
  • 上櫃(OTC)歷史資料補抓:FetchTpexOnlyAsync 繞過日期快取強制補抓,補回 5,333 筆上櫃股票資料
  • 新增 POST /api/admin/fetch-tpex 端點,可指定天數補抓上櫃歷史
  • 外部網路存取:Caddy 反向代理設定,可透過 http://rabbitrunrun.duckdns.org 存取系統
  • POST /api/admin/clean-holiday-prices:清除國定假日(含補假)錯誤股價資料
✏️ 修改
  • 安全性:CORS 限縮為指定來源(localhost:5002、rabbitrunrun.duckdns.org),移除 AllowAnyOrigin
  • 安全性:前端 XSS 漏洞全面修復,所有插入 DOM 的外部字串加 _escHtml / _escJs 處理
  • 安全性:所有 HTTP 外部請求加入 30 秒 Timeout(CancellationTokenSource)
  • 效能:ScreenerController 全市場掃描由 N+1 查詢改為批次讀取,大幅降低 DB 查詢次數
  • 效能:StockPrices 資料表加入 Symbol、Date 複合索引,加快 K 線查詢速度
  • 可靠性:靜默 catch 區塊全面加入日誌記錄,異常不再被吞掉
  • 可靠性:回測引擎暖機期從硬編碼 20 根改為依策略動態計算(最大 35 根)
  • 可靠性:AutoScreenController _analyzeOne 方法簽名修正,解決非同步呼叫錯誤
  • TPEX 資料解析:修正上櫃 API 格式由舊版 aaData 改為新版 tables[0].data 巢狀結構
  • 股票 Market 欄位修正:更新 _upsertAsync 邏輯,上櫃股票正確標記為 OTC,不再被覆蓋為 TWSE
  • Port 改為 5002(原 5001)
v1.0 2026-03-01
✅ 新增
  • 系統初始版本上線
  • 儀表板:股票搜尋、K 線圖(TradingView Lightweight Charts)、技術指標(MA、BB、RSI、MACD)
  • 回測引擎:支援 MaCross / RSI / MACD / BollingerBand / KD / VolumeBreakout / DualMaRsi / MeanReversion 等策略
  • 智慧選股(篩選器):多策略條件掃描全市場
  • 自選股:新增、刪除、備註,持久化存於資料庫
  • 持股管理:買賣紀錄、損益計算、CSV 匯出
  • 模擬交易(紙上交易):虛擬帳戶,初始資金 100 萬
  • 價格警報:突破 / 跌破條件觸發通知,支援策略訊號警報
  • 除權息日曆:顯示月曆格式的除權息紀錄
  • 三大法人歷史資料:外資、投信、自營商近 N 個交易日明細
  • 基本面資料:本益比、殖利率、股價淨值比
  • 財務報表:最新一季 EPS、毛利率、營業利益率等指標
  • 新聞聚合:個股相關新聞(MOPS / Yahoo)
  • LINE / Telegram 通知整合
  • 多使用者帳號系統:JWT 認證,資料各自隔離
✕ 關閉
載入個股數據中…