shy3130
|
918c7ade7e
|
refactor(core): 策略与信号全面去内置化, 转为用户自定义定义
- 策略: 引擎只加载 data/strategies/{custom,ai,composite} 与研究模板目录,
原 25 个内置策略一次性迁移为用户自定义文件(ID 不变, 引用零迁移);
研究模板移至 app/strategy/research, 打包 spec 同步; 新装环境策略库为空
- 信号: 管线不再硬编码任何信号表达式; 涨跌停判定价成为运行时列
limit_up_price/limit_down_price(生效价∓0.005 容差), 20 个信号转为
data/user_data/custom_signals 定义(显式 column 沿用 signal_* 原列名);
依赖解析/注入顺序/当日路径 prev-join 全部定义驱动; 语义统一为历史路径
口径(顺带修正当日路径 BOLL 比较符与翘板/炸板空值两处既有偏差)
- 前端: 信号库单列表(全部可编辑), SignalPicker/监控选项/信号标签全走
定义接口; 回测页新增免责声明(模拟性质/数据源准确性不作保证/不构成
投资建议)
- 测试: 25 个策略夹具与 20 个信号种子入库 tests/fixtures, 受影响测试
全部自包含化(不依赖运行目录用户数据); 77 万行 MA 死叉新旧表达式对拍
逐行一致; 回测实跑 45 笔卖点信号出场验证矩阵链路
- 同批包含工作区既有进度: 策略结果 ext 列同日投影修复(含测试)、数据源插件、fuyao/auth/api_gateway/data_integrity 调整、README 信号库
描述与 strategy.md 导入路径补充
验证: 后端 2592 passed(空数据目录 CI 模拟 2588 passed, 4 例为模拟环境
伪影复验排除); 前端 vitest 125 passed + tsc 0 错 + vite build 通过
|
2026-10-10 21:10:44 +08:00 |
|
shy3130
|
f17260587b
|
fix(watchlist): 分时缩略图续画按资产类型行情日期守卫, ETF 旧价不再拼尾K
enriched 响应新增 dates; 未开实时拉取的资产类型 (enriched close 为旧日K回退值)
不续画, 修复自选页 ETF 分时尾部错价长刺。
|
2026-10-08 12:04:41 +08:00 |
|
 richardandClaude
|
5123274fb0
|
feat(watchlist): 新增「加入日期」「加入以来」两列与日K加入自选日标注
自选 parquet 一直记着 added_at, 但前端从未消费过, 用户看不到加入时间也算不出加入以来收益。
本次在 /api/watchlist/enriched 读时计算并下发 (与涨跌停价同属现算、不落盘):
- added_at 原样透传 (naive UTC), 前端按 UTC 解析后转北京时间展示
- pct_since_added 以「加入日或之前最近交易日」的前复权收盘价为基准, 小数口径 (与 momentum_*
一致); 超出内存历史缓存窗口 (约 300 自然日) 与 ETF/指数显式降级为 null —— 该端点位于
SSE 行情失效前缀, 每几秒被重拉一次, 故不做逐只 scan 兜底
- 新增 KlineRepository.get_enriched_history_span(): 纯读 O(1), 用于区分「预热中」与「日期超窗」
(get_enriched_range 对两者都返回 None)
前端两列默认隐藏 (自定义列 → 自选分组); K线弹窗日K主图用 custom series 画蓝色竖虚线 +
带框「自选」标签, 从该根K线下沿连到网格底边, 缩放后自动重绘, 工具栏提供独立开关。
日期不在可视区间 / 周末节假日加入时竖线不画 (不做 snap), 由工具栏文字兜底。
验证: 后端定向 pytest 45 passed, ruff 相对改动前基线零新增; 前端 pnpm build 通过, vitest 20 passed
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-09-19 16:35:26 +08:00 |
|
shy3130
|
51be43e951
|
feat(watchlist): 自选页新增 今开/最高/最低/昨收/成交量/涨停价/跌停价 列 (#328)
- open/high/low 后端本就返回, 纯前端加列; prev_close/volume 在 enriched
缓存已有, _WATCHLIST_COLS 白名单补 2 字符串即透传, 零新增 IO
- 涨跌停价在端点内对自选行(几十~几百行)用 polars_price_limit_pct +
polars_limit_price 向量化现算(交易所整数分半进位口径, 含主板 ST
2026-07-06 新老划断), 亚毫秒级; ETF/指数涨跌幅规则不在覆盖范围内,
置 null 由前端渲染 "—"
- 前端 7 列默认隐藏(未开启用户零渲染/排序成本), mergeColumns 对老用户
持久化配置自动补齐新列, renderBuiltinDataCell/getSortValue 各加 7 case,
支持排序与数值筛选; 涨停价红色/跌停价绿色, 成交量按万手/亿手换算
- 测试: watchlist_enriched 契约(含 ST 划断前后两种数据日) + mergeColumns
老配置兼容(vitest)
|
2026-09-17 16:04:25 +08:00 |
|
intfoo
|
42df0a22a8
|
feat: 指数(asset_type=index)后端接入 — 数据路由/自选enriched/监控指数轮/隔离防污染
- 数据路由: get_name_map 合并指数维表; get_enriched_latest_asset("index") 缓存+flush/merge 分支; daily-batch 按资产分组
- 自选: watchlist_enriched 指数分支 + 行级 asset_type 标注
- 监控: MonitorRuleEngine 第三轮指数评估 (signal/price); 指数实时焐热复刻 ETF flush; Free档自选实时资产分流; 规则校验 (禁 strategy/market/ladder/分时信号)
- 隔离: _resolve_universe 过滤指数防污染股票日K/分钟K; 指数轮 reset_strategy_results=False; 策略/回测/screener 零改动
- AI 分析: prompt 指数无财务文案
|
2026-07-26 18:35:31 +08:00 |
|
shy3130
|
2f288f0221
|
fix(watchlist): 保留冷缓存自选占位行
|
2026-07-10 15:07:14 +08:00 |
|
 wshyandGitHub
|
4c17db6c82
|
fix(watchlist): 自选页 enriched 改为 LEFT JOIN, 修复不在缓存 universe 的自选股被静默丢弃 (#70)
后端 watchlist_enriched 原以 enriched 缓存为主表执行 inner filter
(df_e.filter(is_in(stock_symbols))), 方向反了: 不在缓存 universe 里的自选
标的 (新股/冷门股/新用户未同步) 被整行丢弃. 改为以自选列表为主表 LEFT JOIN
enriched, 缺失标的指标为 null, 前端已有 '—' 占位渲染兜底. ETF 分支同理.
前端 Watchlist 顶部胶囊区原 hiddenCount = allSymbols - sortedRows, 把 '数据
未返回' 误算为 '被筛选隐藏'. 拆分为两个口径:
- hiddenCount: rows.length - sortedRows.length (真正被筛选条件隐藏)
- pendingCount: sortedRows 中 close 为 null 的行数 (指标未就绪)
并新增 '待数据 N' 灰色提示与原 '已过滤 N' 区分.
新增 4 个回归测试覆盖核心契约.
|
2026-07-08 11:06:56 +08:00 |
|