Commit Graph
4 Commits
Author SHA1 Message Date
Jinfeng SunandClaude Fable 5 b0d1f2f742 feat: 自选/个股分析/K线查询接入 ETF (#58)
* feat: 自选/个股分析/K线查询接入 ETF

数据层此前已完成 ETF 同步与存储 (instruments_etf / kline_etf_* /
adj_factor_etf), 但查询侧仍只走股票路径。本次把已有的 ETF 读取能力
接到面向用户的接口上:

- repository: 新增 get_etf_symbol_set / resolve_asset_type 按 symbol
  判定资产类型; get_minute / get_minute_batch / latest_minute_date
  增加 asset_type 参数切换 ETF 分钟K存储
- kline API: instruments/search 增加 asset_types 参数 (默认 stock,
  既有调用方行为不变), 结果附 asset_type; instruments/names 合并
  ETF 名称; /daily /minute /minute-batch 按资产类型分流
- watchlist API: /enriched 合并 ETF enriched 缓存行, 名称补齐支持 ETF
- 个股分析: /levels 与 AI 分析按资产类型分流, ETF 无财务数据走
  已有兜底提示
- 前端: 自选搜索框传 asset_types=stock,etf 并显示 ETF 标记

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: 修复 ETF 接入的审查发现问题

多智能体代码审查确认的 9 处问题修复:

- watchlist /enriched: 仅自选实际含 ETF 时才加载 ETF enriched 缓存,
  避免无 ETF 用户在缓存冷启动时触发全量懒加载阻塞请求; 恢复股票
  enriched 预热期间 all-or-nothing 旧契约 (不再返回只有 ETF 的部分结果);
  as_of 取股票/ETF 两类缓存中较旧者, 不再把旧 ETF 行标成股票缓存日期
- repository: refresh_cache 失效 _etf_enriched_cache, 盘后管道跑完
  ETF 行不再停留在旧日期; get_etf_symbol_set / get_index_symbol_set
  增加 memo (随 instruments 缓存失效), 热路径不再每请求重建全量集合;
  新增 get_name_map 统一股票+ETF 名称解析, 收敛三处重复合并逻辑
- kline /daily: 实时蜡烛注入改为资产感知, ETF 开启实时拉取时同样
  注入今日 bar (未开启时由"非今日不注入"守卫自然跳过)
- kline search: 空关键词早退提前到数据处理之前; symbol 列 dtype
  归一到 Utf8, 防两份缓存来源 dtype 不一致导致 concat SchemaError

已知限制 (不在本次范围): kline_etf_minute 目前无盘后同步写入方,
ETF 分时依赖"本地缺失 → TickFlow 实时补拉"路径, 与其他未同步分钟K
标的行为一致。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:26:40 +08:00
shy3130 00d856191b refactor(stock-analysis): 价位体系重构 — 价量支撑 + 通道拆分 + 右侧标签带
压力支撑语义归位:从 BOLL 波动通道改为 Volume Profile 成交密集区
(价+量驱动,真正的市场结构支撑/压力),原 profile 组并入 sr 组。

通道拆分:原合并的「波动通道」拆为 4 个独立开关 —— 布林带(含中轨
MA20)+ Keltner 短/中/长三档,各自显隐。

图表布局:
- 价位文字改用 line series + endLabel 显示在右侧 grid.right 预留带,
  不再压在蜡烛上;预留带加宽至 144px 保证标签完整
- 标题栏改两端布局,当前价右置并加大加粗、带涨跌色
- 价位统计面板恢复至图表下方

默认开启:压力支撑 + 枢轴点 + Keltner短期。
2026-06-26 23:34:54 +08:00
shy3130 3948d2555e feat(stock-analysis): 带状指标改为跟随行情漂移的曲线
布林带/Keltner通道/ATR止损从「水平直线(仅最新值)」改为
「跟随时间漂移的曲线(ECharts line series)」,还原通道的真实形态。

后端(stock_analysis.py):
- 新增 _build_series(): 提取 5 组带状指标每日时间序列
  · boll(布林带上下轨)
  · keltner_s/m/l(短/中/长三档 MA±n×ATR,MA120 现场算)
  · atr(close±2ATR 动态止损止盈)
- get_levels 返回新增 dates + series 字段

前端(AnalysisKChart.tsx):
- Props 加 series/seriesDates,数据预处理做日期对齐映射
- buildOption 按开关添加 type:'line' 曲线(复刻 maLine 模式)
- collectPriceLines 过滤布林带/Keltner/ATR 水平线,避免与曲线重复
- Keltner 三档渐变青色系区分档位
- 水平直线(枢轴/前高前低/成交密集/缺口/斐波那契/整数关口)不变
2026-06-26 16:02:16 +08:00
shy3130 2015ef0c78 feat: 个股分析(Beta) — 专用日K + 9类关键价位 + AI四维分析
新增个股分析页,以行情与关键价位为视觉主体,与财务分析(财务质量评级)定位互补:

后端:
- indicators/levels.py: 9 类关键价位纯函数计算
  · 压力支撑(布林带)/ 成交密集区(POC)/ 枢轴点(可配档位)/ 前高前低
  · Keltner通道(MA±n×ATR 短/中/长)/ ATR止损(close±nATR)
  · 缺口位(未回补跳空)/ 斐波那契回撤 / 整数关口(自适应步长)
- services/stock_analyzer.py: AI 四维(技术/基本面/财务/消息面)流式分析,NDJSON
- services/stock_reports.py: 报告持久化(最多50条),独立 JSON 存储
- api/stock_analysis.py: levels/analyze/reports 端点

前端:
- AnalysisKChart: 专用 ECharts 日K(主图+成交量+滑块),9 类价位开关
- 蓝色胶囊(Bubble/Host/Dialog),与财务分析紫色主题并存
- stockAnalysisStore: useSyncExternalStore 全局存储,后台流式
- useLastStock + LastStockChip: 记忆最近查看个股(财务/个股分析页)

其他优化:
- AI 设置页:一键清空配置(保留UA) + 保存后乐观更新连接状态/菜单
- MarkdownRenderer: 去除 space-y-0 遮蔽,各块间距与分隔线可见性优化
- 个股分析页 Beta 标识(标题 + 菜单)
- 版本号 0.1.45 → 0.1.50
2026-06-26 15:36:52 +08:00