Files
easy_tdx_max/tests/unit/test_quote_decimal_digits.py
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

42 lines
2.1 KiB
Python
Raw Permalink 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.
"""报价小数位推断(Issue #8 + 看板指数 ×0.1 修复)的语义锁定测试。"""
from __future__ import annotations
import pytest
from easy_tdx.commands.security_quotes import _price_decimal_digits
from easy_tdx.models.enums import Market
@pytest.mark.parametrize(
("market", "code", "expected", "why"),
[
# ── 大盘指数:点位恒两位小数(科创50 1647.53),原始单位是「分」 ──
(Market.SH, "000001", 2, "上证指数"),
(Market.SH, "000300", 2, "沪深300(实测 4611.44,按 3 位曾缩成 461.144"),
(Market.SH, "000688", 2, "科创50(实测 1647.53,按 3 位曾缩成 164.753"),
(Market.SH, "000905", 2, "中证500"),
(Market.SH, "000016", 2, "上证50"),
(Market.SZ, "399001", 2, "深证成指(深市指数走默认分支,一直正确)"),
(Market.SZ, "399006", 2, "创业板指"),
# ── 统计指数:字段是计数语义(price×10 还原家数),必须保持 3 位 ──
(Market.SH, "880005", 3, "全市场行情统计(market_stat 依赖)"),
(Market.SH, "880006", 3, "涨跌停统计"),
# ── 板块指数:与大盘指数同口径,两位小数 ──
(Market.SH, "881106", 2, "行业板块指数(种植业,实测 1039.93)"),
(Market.SH, "885418", 2, "概念板块指数"),
# ── 基金/ETF:真实三位小数(Issue #8)──
(Market.SH, "510300", 3, "沪深300ETF(价格如 4.611"),
(Market.SH, "588000", 3, "科创50ETF"),
(Market.SZ, "159915", 3, "创业板ETF"),
# ── 股票:两位 ──
(Market.SH, "600519", 2, "主板"),
(Market.SH, "688981", 2, "科创板"),
(Market.SZ, "000001", 2, "深市 000 开头是股票(平安银行),与 SH000001 同码不同义"),
(Market.SZ, "300750", 2, "创业板"),
(Market.BJ, "920002", 2, "北交所"),
],
)
def test_price_decimal_digits(market: Market, code: str, expected: int, why: str) -> None:
assert _price_decimal_digits(market, code) == expected, why