Files
easy_tdx_max/web-ui/src/market.ts
T
GitHub 33d44ba5d6 feat(webui)!: 行情终端重大升级——市场看板/自选/个股与板块弹窗 + SSE 实时推送
展示层对标专业看盘终端(tick-stock-panel 模式),数据全部来自通达信协议直连:

- 市场看板:五大指数实时条(迷你分时)、涨跌统计、四维情绪雷达、
  全市场涨跌分布直方图(约 5500 只 22 桶、鼠标跟随浮窗)、涨停雷达、
  行业/概念热冷榜(可下钻)、涨幅/跌幅/成交额/换手四联排行榜、异动雷达
- 自选行情:6 位代码即加(symbol-info 自动取名)、SSE 实时全表刷新、
  行内迷你分时;SQLite 持久化(watchlist.db,幂等加删)
- 个股弹窗:五档盘口 + 1/3/5 日分时 + 日K(MA/BOLL/EMA + MACD/KDJ/RSI
  前端本地计算)+ 一键加自选 + 一键全策略寻优
- 板块弹窗:板块分时/日K + 成分股涨跌榜直达个股
- SSE 架构:QuoteStreamer 单循环轮询 fan-out(独立队列 + 背压丢旧、
  无订阅休眠、盘中 8s/盘外 60s 降频);前端 pinia 单连接指数退避重连
- fix(codec): SH 000 系大盘指数与 881/885 板块指数报价按 2 位小数解析
  (曾缩小 10 倍:科创50 1647.53→164.753);880 统计指数保持 3 位
- fix: 前端批量五档路径 /security/quotes→/quotes、SSE 五档白名单
  bid1_vol→bid_vol1、MAC 排行 close 列归一化、日K v-if 撑满、
  寻优查看跳转 /→/backtest、FastAPI 0.141 _IncludedRouter 测试适配

新增 27 个单测(streamer/自选/小数位语义),全套 1078 passed
2026-09-01 17:45:07 +08:00

54 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// A股代码 → 市场智能识别。
// 用户只输入 6 位代码,按代码段规则自动匹配 沪市(SH)/深市(SZ)/北交所(BJ)
// 拼成后端要求的 "市场:代码" 格式(如 SZ:000001)。
export type Market = 'SH' | 'SZ' | 'BJ'
/**
* 根据 6 位股票代码智能判断所属市场。
*
* 规则(按优先级,先匹配到的为准):
* - 北交所(BJ)43/83/87/92/93/920(小盘/三板)或 4xx/8xx 开头
* - 沪市(SH) 6/9 开头(主板 60/68 科创、B 股 900)或 5 开头(基金 50/51/56/58
* - 其余归深市(SZ)000/001/002/003/300/301 创业板、200 B股 等
*
* @param code 6 位股票代码(纯数字)
* @returns 市场代码 SH/SZ/BJ;无法判断时默认深市(覆盖面最广)
*/
export function detectMarket(code: string): Market {
const c = code.trim()
if (!/^\d{6}$/.test(c)) return 'SZ'
// 通达信板块指数(沪市):880 统计 / 881 行业 / 885 概念等
if (/^88[0-9]/.test(c)) return 'SH'
// 北交所:43/83/87/92(含920段)/93 + 4xx/8xx(三板/小盘)
if (/^(43|83|87|92|93|4|8)/.test(c)) return 'BJ'
// 沪市:6xx(主板/科创板 60/68)、9xxB股)、5xx(沪市基金 50/51/56/58/50ETF 等)
if (/^[695]/.test(c)) return 'SH'
// 其余归深市:000/001/002/003/300/301/200 等
return 'SZ'
}
/**
* 把 6 位代码转成后端要求的 "市场:代码" 格式。
* @param code 6 位股票代码
*/
export function toSymbol(code: string): string {
return `${detectMarket(code)}:${code.trim()}`
}
/** 市场中文显示名。 */
export function marketLabel(market: Market): string {
switch (market) {
case 'SH':
return '沪市'
case 'BJ':
return '北交所'
default:
return '深市'
}
}