shy3130
|
65f46a1e7f
|
feat(mainline): 主线与情绪周期统计默认剔除风险警示(ST)股
问题: ST板块 241 天中 209 天上主线榜、108 天第一。原因: ① ST 是跨行业
状态桶(416只)非投资题材, 真实主线被概念拆分而 ST 统一聚桶; ② 主板 ST
2026-07-06 前涨跌幅 5%(价格规则已内置切换日), 封板成本减半, 弱市刷板
(7/1 全市场 218 家涨停中 67 家 ST); ③ 概念成分/ST 标记按当前维表快照
回写历史存在归属污染。
改动:
- market_mainline: load_risk_warning_symbols(维表名称含 ST, 与涨跌停
判定共用 price_limits 权威实现, 600s 缓存); compute_mainline_range
聚合前剔除, exclude_st 参数可覆盖
- regime_builder: run_regime_batch 汇聚点统一剔除(情绪驱动与主线同
口径); 宽度类指标同 df 过滤, 占比几乎不受影响
- preferences: sentiment_exclude_st 默认 True; 经 mainline-filter
API 可读写; 前端过滤面板加开关, 切换时自动全量重算
- 测试: 符号集加载/缓存、主线剔除(计数/龙头/最小涨停门槛交互)、
regime 剔除 A/B、偏好往返; 说明书 FAQ 24.11
验证: 后端 918 测试通过(新增 5 个); tsc 通过; 全量重算后主线 0 行
ST 上榜(此前 209 天), rank1 变为海工装备/卫星导航/液冷服务器等真实
主题; 7/1 涨停数 218→151 与 ST 占比精确吻合; A/B 对照: 阶段标签
34/242 天变化(rally/ignite→repair 为主, 方向符合预期 — 剔除 ST 灌水
后正面阶段更难触发), repair 主导(78%)为口径切换前既有特征。
|
2026-08-17 16:49:28 +08:00 |
|
shy3130
|
7c30f5bcac
|
feat(regime): 情绪周期易用性完善 — 阶段指南/历史分位/阶段规律/切换提醒
- 当前阶段卡: 阶段含义 hover 提示 + 应对建议常显 (六阶段操作指引)
- 5 张指标卡: 所选时间窗口内的历史分位徽标 p{N} (≥20 样本才显示)
- 阶段规律卡: 当前阶段历史段数/平均/最长天数 + 下阶段转移分布,
持续天数超历史平均时给警示徽标
- 时间轴: 今日竖线 markLine + ▲彩色阶段切换点 markPoint
- 后端: regime_builder.latest_phase_transition 检测末两日阶段切换,
daily_pipeline 计算后经 push_alerts 推送通知 (切入退潮/冰点为 warn,
其余 info); 软失败不阻断管道
验证: tsc 通过; pytest regime/phase/market 67 通过;
浏览器实测 (截图 + DOM 双重核实): 应对建议/分位徽标 p27~p100/
阶段规律 31段平均50天/今日线与切换点均正常渲染;
ruff 相对 HEAD 无新增问题。
|
2026-08-17 15:23:32 +08:00 |
|
shy3130
|
867698a696
|
fix(monitor): 通知进入/移出配色对齐 A 股红涨绿跌惯例
原配色: 进入=绿(emerald)/移出=黄(warning)+列表里移出=红, 语义反直觉。
调整为 进入=红(text-danger)/移出=绿(text-bear), 与买入/卖出、涨跌幅
配色语义一致 (红=正向, 绿=负向)。
- strategyMonitorEvents.ts META: 事件动作短语配色中心定义, 弹窗/监控页/
看板/语音播报四处共用, 一处修改全局生效
- AlertToast.tsx SOURCE_BADGE: 弹窗顶部"进入/移出"角标同步换色
- Monitor.tsx renderMessage: 正则补"进入"分支 (原只匹配 新入选|移出,
实际通知文案是"策略「X」进入选股结果…", 进入消息从未着色) + 换色
验证: tsc 通过; 实测监控中心页面 getComputedStyle — 进入选股结果
rgb(242,76,64)/红, 移出选股结果 rgb(38,192,120)/绿。
|
2026-08-17 13:19:18 +08:00 |
|
shy3130
|
41e99b6974
|
feat(regime): 阶段×主线表格限高滚动 + 吸顶表头
段数多时(2y 范围 50+ 段)表格把页面拉得很长。改为 max-h-420px 内滚动,
表头 sticky 吸顶保证滚动时列名可见。
实现注意:
- sticky 必须加在 th 而非 tr (后者在 Chromium 不生效)
- 表格改 border-separate border-spacing-0 — Chromium 在 preflight 默认的
border-collapse:collapse 下表格元素 sticky 完全失效 (computed 为 sticky
但不粘, crbug.com/702927); separate 模式下 tr 边框不绘制, 行分隔线
相应从 tr 挪到 td, 视觉不变
验证: tsc 通过; 实测容器 clientH=420/scrollH=1860 (页面少滚 ~1440px),
容器内滚动 1441px 后 th 与容器顶 delta=0 (吸顶生效), 截图确认列名行
固定、数据行正常。截图 gui-test-screenshots/regime-segments-*.png
|
2026-08-17 13:03:19 +08:00 |
|
shy3130
|
72c56963dd
|
feat(regime): 市场环境/情绪周期 tab 切换 — 减少单页滚动高度
页面原为长滚动: 情绪周期组(阶段概览/时间轴/阶段×主线/主线排行)与
市场环境组(最新日概览/状态时间轴/趋势分布/日历热力图)全部纵向堆叠。
- 头部下方新增「市场环境 / 情绪周期」分段切换 (样式对齐时间范围按钮组),
副标题随视图切换; 默认市场环境 (基础数据始终有, 情绪周期需重算回填)
- 两组区块分别包 hidden 容器切换显隐 — 保持挂载不销毁 ECharts 实例,
切回无需重建
- useEChart 在 setOption 后追加 resize(): 容器从 display:none 恢复可见时
画布尺寸从 0 重算; 三个图表 deps 增加 view 触发
验证: tsc 通过; 实测默认加载/切情绪周期/切回三态 — tab 激活正确、
两组内容互斥显隐、图表 canvas 尺寸随可见性正确变化 (1254x280 /
822x320 / 391x320, 隐藏态 0), 截图存 gui-test-screenshots/regime-tab-*.png
|
2026-08-17 12:53:53 +08:00 |
|
shy3130
|
5d6669d4f3
|
fix(regime): 情绪周期时间轴冷加载空白 — useEChart 惰性 init
useEChart 的 init effect 依赖为 [] 仅组件挂载时执行一次, 而情绪周期图的
容器 div 是条件渲染 (hasPhaseData && rows.length > 0)。冷加载/硬刷新时
history 查询异步未返回 → 首帧 rows 为空 → div 不在 DOM → init 扑空且
永不再执行; 数据到达后卡片出现但 ECharts 实例从未创建, 280px 画布永久
空白 (趋势图/分布图容器为无条件渲染故不受影响)。5 分钟缓存内的二次
导航首帧即有数据, 所以表现为"时好时坏"。
修复: init 从挂载 effect 挪入 setOption effect 做惰性创建 — option 变化
时若 div 已挂载且实例不存在则补建, 再 setOption。无条件容器行为不变。
验证: tsc 通过; 新标签页冷加载 /regime 实测 — canvas 数 3 (修复前冷加载
该图为 0), 情绪周期画布 1254x280, 截图确认红线/琥珀柱/蓝虚线/图例/
双轴刻度/缩放滑块/阶段色带全部渲染 (gui-test-screenshots/regime-phase-
chart-after-fix.png)。
|
2026-08-17 12:43:33 +08:00 |
|
shy3130
|
8929cb310e
|
fix(depth): 五档盘口轮询依赖实时行情开关
depth 盘中轮询原只受「连板梯队监控」开关 + DEPTH5_BATCH 能力门控,
与实时行情开关无关。实时行情关闭时 enriched 内存缓存停留在上一
交易日, 轮询线程整个盘中反复拉取陈旧的涨跌停名单 (如周一开盘仍在
拉上周五的 49 只), 浪费 API 额度且数据无意义。
- start_polling 增加 realtime_quotes_enabled 门控: 三重 AND
(监控开关 ∧ 实时行情 ∧ 能力), boot 启动/监控开关切换路径自动生效
- update_realtime_quotes 保存偏好后同步启停 depth 轮询: 开实时行情
→ start_polling (仍受监控开关/能力门控), 关 → stop_polling 立即停
盘后 15:02 定版 job 与启动补跑 (boot_check/finalize 单次拉取) 不受
影响, 历史 sealed 数据链路保持完整。
验证: 5 组偏好组合单测门控行为; 13 个 depth 窗口测试通过;
实测重启后 (监控开+实时关) 不再出现「盘中轮询已启动」。
|
2026-08-17 12:18:17 +08:00 |
|
shy3130
|
eb869c7ad2
|
fix(logging): 开发模式追加文件日志 backend.log
dev 模式 (uvicorn) logging.basicConfig 只有 StreamHandler, 同步/管道等
运行时日志 (daily_pipeline 的 logger.info 等) 仅出现在 dev 终端, 关掉或滚屏
后即丢失, 排查「同步后日志没落」时无处可查。
追加 RotatingFileHandler 落盘到 data/backend.log, 与桌面版
(desktop.py:_setup_logging → desktop.log) 行为对齐。frozen (桌面版) 已由
desktop.py 负责, 此处跳过避免重复落盘。RotatingFileHandler (10MB×3) 防止
长期运行/频繁 reload 导致文件无限增长。
注: 同步进度日志 (job_store JSON, 经 /api/pipeline/jobs 返回) 一直正常落盘,
本次只补应用级日志的文件落盘。
|
2026-08-14 13:40:57 +08:00 |
|
shy3130
|
a0cb899163
|
perf(backtest): 因子批量回测预计算共享下期收益并向量化统计
P1 — run_batch 进入因子循环前对 close 有效序列计算一次 _next_return
(仅依赖 symbol/date/close/rebalance, 与因子无关), 通过 left join 附着到
共享面板; _evaluate_panel 检测到预计算列时直接复用, 跳过逐因子 shift/
调仓日 JOIN。因子空值集中在预热期前缀, 过滤后无内部空洞, 故与逐因子
在过滤后面板上重算的结果完全等价 (daily/weekly/monthly 均数值一致)。
P2 — 将 _calc_group_nav / _calc_group_stats / _calc_long_short 三段
逐行 Python 循环改为向量化:
- 分组净值: Polars cum_prod 替代 dict 累乘
- 分组统计: numpy maximum.accumulate 计算回撤, 向量化周期收益序列
- 多空组合: cumprod 合成净值, 向量化峰值/回撤
峰值初值沿用原逻辑 max(1.0, 历史最高), 400 组随机序列 (含 null/负收益)
下与旧实现逐值等价。
测试: tests/backtest 全量 184 passed。
|
2026-08-14 13:24:24 +08:00 |
|
shy3130
|
2b792dee44
|
chore(dev): uv run --no-sync 跳过依赖解析
从 --frozen 改为 --no-sync, 直接用已安装的 .venv, 不再校验 lockfile。
避免镜像源 403/网络抖动导致后端起不来。与 main 保持一致。
|
2026-08-14 13:10:01 +08:00 |
|
shy3130
|
81daf018c5
|
perf(indicators,kline): 热路径信号缓存 + 日K快路径跳过全量指标
三处性能优化 (后端内部, 不改 API 契约):
1. 增量热路径自定义信号缓存 (pipeline.py)
compute_enriched_today 每秒级执行, 原每轮 glob + 读所有 JSON + 重编译
表达式。新增 _custom_signal_exprs_today 模块级缓存 (allow_shift=False),
与全量版分开缓存, invalidate_custom_signals 统一失效。
2. ETF/指数迷你蜡烛图跳过全量指标 (repository.py)
get_index_daily/get_etf_daily 增加快路径: 请求列全是 parquet 存储列时
scan + 列下推直接返回, 跳过 150 天 warmup + 全套指标计算。缺列回退完整路径。
3. 单股日K跳过全量指标 (repository.py)
get_daily 同样加快路径并保留缓存覆盖最新日。采用最保守的列下推方案,
不引入 needed 裁剪, 避免依赖闭包漏算金融数据的风险。
验证: pytest 全套 582 passed; Ruff 无新增告警; 快路径功能验证通过。
|
2026-08-14 13:08:57 +08:00 |
|
shy3130
|
8fe5dac7bd
|
feat(v0.2): 完善量化研究与二次开发能力
|
2026-08-13 20:16:02 +08:00 |
|
shy3130
|
57eb641275
|
fix(backtest): 修复市场环境过滤未生效
|
2026-08-11 12:43:46 +08:00 |
|
shy3130
|
2a2d3b764e
|
feat: add watchlist groups and multi-day intraday view
|
2026-08-10 11:39:08 +08:00 |
|
shy3130
|
ecfddb451e
|
feat(monitor): 新增板块异动监控
|
2026-08-06 19:28:39 +08:00 |
|
shy3130
|
8b83f9e1bd
|
fix(regime): 修复日历热力图交易日错位到周末列
calendarMonths 只在月初按 dow 算了前导空位, 之后把真实交易日逐个 push,
不按日期补齐缺失的天。当某月数据不是从 1 号连续到月末(最早月份只有
下半月数据或中间缺几天)时, 后续交易日格子整体左移, 被挤到周末列,
看起来像周六周日也有数据。
改为遍历该月每一个自然日: 交易日且有数据填 RegimeRow, 其余日子填 null,
每个格子都对齐到正确的周几列。月内数据不连续不再错位。
验证: pnpm build 通过。
|
2026-08-06 19:12:04 +08:00 |
|
shy3130
|
f8fca96f42
|
修复停复牌股票实时涨跌停漏算
|
2026-07-30 13:09:07 +08:00 |
|
shy3130
|
4b6e94e020
|
修复回测风控参数恢复旧缓存的问题
|
2026-07-29 21:27:02 +08:00 |
|
shy3130
|
6e4d6b9784
|
docs: 完善项目贡献与复审指南
|
2026-07-28 18:55:05 +08:00 |
|
shy3130
|
b29efebe68
|
docs: 新增项目完整操作说明书
|
2026-07-28 13:34:03 +08:00 |
|
shy3130
|
60fe9e6fa6
|
修复回测指标数据缺失提示问题
|
2026-07-22 13:30:02 +08:00 |
|
shy3130
|
a12e49d66d
|
修复实时行情下策略图表闪烁问题
|
2026-07-22 11:42:57 +08:00 |
|
shy3130
|
2d9fe4a4af
|
修复策略文件无法删除问题
|
2026-07-22 11:21:13 +08:00 |
|
shy3130
|
2c14fde788
|
完善个股点位提醒并发布0.1.87
|
2026-07-21 22:14:07 +08:00 |
|
shy3130
|
b4dae4bca1
|
修复股票与ETF切换误清策略池
|
2026-07-21 21:39:05 +08:00 |
|
shy3130
|
0ac6d6f56c
|
修复分析报告复制按钮兼容性
|
2026-07-21 20:50:34 +08:00 |
|
shy3130
|
0cb0b38437
|
修复看板监控通知个股弹窗
|
2026-07-20 17:10:15 +08:00 |
|
shy3130
|
c8c1a01d55
|
更新交流群二维码
|
2026-07-20 13:56:04 +08:00 |
|
shy3130
|
72918fe602
|
优化策略卡片结果加载性能
|
2026-07-20 13:01:03 +08:00 |
|
shy3130
|
0635698a08
|
修复策略监控开启后结果归零
|
2026-07-20 11:12:19 +08:00 |
|
shy3130
|
e1dbd1cafb
|
修复监控中心涨跌停信号误报
|
2026-07-20 10:33:06 +08:00 |
|
shy3130
|
ed41f7b950
|
修复:个股详情量比开关显示异常
|
2026-07-20 09:59:14 +08:00 |
|
shy3130
|
4df3062002
|
fix: 完善自定义分钟数据源配置与异常处理
- 补齐资产类型和周期参数在 API、YAML 与前端编辑器中的保存回读
- 权限判断和分时监控统一复用安全的数据源解析边界
- 增加配置往返及解析异常回归测试
|
2026-07-19 17:01:33 +08:00 |
|
shy3130
|
b1b2494db9
|
merge: 合并 PR #128 自定义分钟数据源支持
|
2026-07-19 16:52:52 +08:00 |
|
shy3130
|
b17c882e27
|
feat: 完善历史换手率重算入口
- 财务数据统计纳入历史股本,并在数据页提供分批重算入口
- 缺少股本历史时阻止重算,并接入现有任务进度
- 财务分析卡片使用更新图标,明确数据拉取语义
|
2026-07-19 16:42:03 +08:00 |
|
shy3130
|
8e4258cf20
|
feat: support historical price limits and share capital
|
2026-07-18 23:37:54 +08:00 |
|
shy3130
|
e462c63b45
|
fix: align AI strategy prompt constraints
|
2026-07-18 18:31:02 +08:00 |
|
shy3130
|
ff12790042
|
feat: add trading-day volume comparison
|
2026-07-18 17:46:58 +08:00 |
|
shy3130
|
44ab51e65d
|
feat: improve strategy scoring and backtest execution
|
2026-07-18 16:59:53 +08:00 |
|
shy3130
|
a1e8be58db
|
feat: release v0.1.86
|
2026-07-18 00:49:28 +08:00 |
|
shy3130
|
34eaba3010
|
fix: handle uncovered walk-forward folds
|
2026-07-17 14:00:16 +08:00 |
|
shy3130
|
1e38c8cebb
|
fix: reset strategy builder identity
|
2026-07-16 16:12:06 +08:00 |
|
shy3130
|
c763a6970f
|
fix: restore strategy and data compatibility
|
2026-07-16 14:34:07 +08:00 |
|
shy3130
|
77876c7ee4
|
fix(data): avoid destructive enriched rebuild cleanup
|
2026-07-15 21:34:44 +08:00 |
|
shy3130
|
0b3b769ca8
|
fix(strategy): clear saved strategy drafts
|
2026-07-15 20:51:07 +08:00 |
|
shy3130
|
f317377bef
|
fix(strategy): apply saved params to builtin screeners
|
2026-07-15 20:06:11 +08:00 |
|
shy3130
|
89115e6f73
|
fix(strategy): apply saved parameters during execution
|
2026-07-15 19:03:48 +08:00 |
|
shy3130
|
de1b1713fa
|
fix(backtest): 参数优化页日期选择器被布局遮挡
根容器缺少高度约束, 配置列内容撑高后整页在外层滚动容器滚动,
DatePicker 弹层 (absolute 内联) 被裁剪无法完整显示。
对齐 StrategyBacktest 的布局: 根容器加 h-full min-h-0 overflow-hidden
使整页不滚动, 配置列/结果列各自 overflow-y-auto 内部滚动, 日期弹层
向下展开时在可视区完整显示。
|
2026-07-10 17:31:07 +08:00 |
|
shy3130
|
e61c228002
|
fix(ai): base_url 归一化保留非 v1 版本段, 修复 GLM /v4 被 404
normalize_openai_base_url 旧实现只检查「是否以 /v1 结尾」, 不是就强制补 /v1。
智谱 GLM 的 OpenAI 兼容地址是 /api/paas/v4, 被补成 /api/paas/v4/v1,
SDK 再拼 /chat/completions → 不存在路径 → 404。
改用正则检测 URL 末尾已有的版本段 (/v1、/v2、/v4、/v1.1 等):
- 已有版本段 → 保持原样
- 无版本段 → 补 /v1 (无版本号网关行为不变)
- 去 /chat/completions 后缀逻辑保留
补 4 条单测覆盖 GLM /v4 场景, 原有 v1/无版本网关回归不变。
Closes #60
|
2026-07-10 17:06:17 +08:00 |
|
shy3130
|
fd0a83b276
|
polish(layout): SSE 断连提示移至底部居中 + 文案调整
|
2026-07-10 16:37:31 +08:00 |
|
shy3130
|
d9fe050b1f
|
fix(realtime): 策略页实时行情闪烁 + 策略结果刷新机制
策略页开启实时行情时, 被监控的策略列表反复闪烁 (变 0 → 全部失效 → 又出现),
非监控策略不受影响。
根因: 每个行情周期后端先广播 quotes_updated 再重算策略, 重算时先清空内存结果
再逐个回填 (非原子窗口)。前端 quotes_updated 与 strategy_results_updated 两个
SSE 事件都刷新 screener-cached, 第一次撞上清空窗口拿到空结果, 第二次拿到重算
结果, 每周期重复 → 闪烁。
修复:
- 前端: 从 SSE_INVALIDATE_PREFIXES 移除 screener, quotes_updated 不再刷新策略页,
每周期只剩 strategy_results_updated (重算完成后才发) 触发一次刷新。
- 后端: monitor.evaluate 改为临时容器收集结果, 算完后整体替换 _latest_strategy_results,
/cached 并发读取永远拿到完整结果, 不会读到空中间态。
配套:
- 新增 strategy_results_updated SSE 事件 + subscriber 合并通知机制
- 策略卡片 loading 时不显示旧命中数, 避免刷新时数字跳动
|
2026-07-10 16:37:11 +08:00 |
|
shy3130
|
9c6c1fce61
|
fix(watchlist): 支持重置全部筛选
|
2026-07-10 15:18:40 +08:00 |
|
shy3130
|
fdee661d47
|
fix(watchlist): 保留冷缓存自选占位行
|
2026-07-10 15:07:14 +08:00 |
|
shy3130
|
be626c73e1
|
release: v0.1.83
|
2026-07-10 12:00:49 +08:00 |
|
shy3130
|
aea694ee83
|
fix(strategy): keep AI-generated strategies in AI pool
|
2026-07-08 18:38:14 +08:00 |
|
shy3130
|
f8914c9140
|
feat: 新增企业微信推送、个股分析页重构、价位算法优化及多处交互改进 (v0.1.82)
- 推送: 新增企业微信群机器人通道(与飞书并列), 监控告警/复盘报告多渠道分发
- 个股分析: 历史报告改为右侧常驻栏(展示全部股票报告), 进页面自动恢复上次选股
- 价位算法: 成交密集区改用换手率衰减模型(国内主流筹码分布); 缺口回补判定修正(必须完全穿越缺口)
- 回测: 回撤止盈改纯峰值口径(与 trailing_stop 一致); 佣金/印花税/滑点合并一行; 建仓口径加问号气泡说明
- 分时图: 自选列表迷你分时图加渐变填充(对齐个股对话框风格)
- 图表: 个股分析日K图右侧标签适配浅色主题; 价位标签与下方文字行双向 hover 高亮联动
|
2026-07-07 17:56:25 +08:00 |
|
shy3130
|
03e99bd05f
|
feat(stock-sdk): 取数入口补充 INFO 日志, 便于确认切换后实际走 stock-sdk
|
2026-07-07 13:07:59 +08:00 |
|
shy3130
|
9b22030166
|
fix: 数据源切换按 datasets 动态分流, 修复切换到 stock-sdk 后分钟K仍走 tickflow
- DataSources.tsx switchProvider 非 tickflow 分支原只传 4 个字段(漏 minute_data_provider),
后端 exclude_none 保留旧值导致 minute 永远停在 tickflow。改为按源声明的 datasets
动态构建: 支持的数据集切到该源, 不支持的显式写 tickflow(消除 UI/后台不一致)
- README License 段补充 stock-sdk (ISC) 协议声明
|
2026-07-07 12:39:23 +08:00 |
|
shy3130
|
fb7cf921a9
|
feat: 看板刷新按钮改为后端缓存重载
原「刷新」只重新请求前端数据(overview.refetch), 不动后端缓存, 跨天
残留时拿到的是旧数据。改为「重载」:
- 新增 POST /api/data/refresh-cache 端点: clear_cache + refresh_cache
重建 enriched 内存缓存, 同时清 overview 聚合缓存 + screener TTL 缓存
- 看板按钮先调后端重建缓存, 再刷新看板数据
- 与设置页「清理并刷新」(清前端 react-query)互补, 这个重建后端 Polars 缓存
|
2026-07-07 11:43:39 +08:00 |
|
shy3130
|
a688690f15
|
fix: 盘前维表同步后刷新 enriched 缓存, 修复跨天连板梯队不准
根因: 服务跨天不重启时, enriched 内存缓存残留前一交易日数据, 连板梯队/
选股读到旧的涨跌停信号。盘前维表 (instruments) 含当日精确涨跌停价, 但同步
完成后未触发缓存重建。
修复: run_instruments_sync 完成后 (rows > 0), 执行 clear_cache + refresh_cache,
让 enriched 缓存基于最新维表 (含当日 limit_up/down) 重建。与设置页「清理并刷新」
按钮同等效果, 但盘前自动执行, 无需手动操作。
|
2026-07-07 11:10:17 +08:00 |
|
shy3130
|
9217efa1da
|
docs: README 添加交流群二维码
- 新增「💬 交流群」板块(免责声明上方)
- 二维码文件重命名为英文 community-qr-code.jpg
|
2026-07-07 10:48:58 +08:00 |
|
shy3130
|
9f78fdebd4
|
style: 主题切换只保留图标, 与设置同行
左侧菜单底部: 主题切换(纯图标)+ 设置同一行排列, 更紧凑。
原来上下两行各占满宽, 现在左边小图标按钮 + 右边设置占满剩余空间。
|
2026-07-06 17:45:25 +08:00 |
|
shy3130
|
9ef9b4e6ec
|
chore: bump to 0.1.81
|
2026-07-06 17:42:19 +08:00 |
|
shy3130
|
966d94ab03
|
feat: 数据源插件化架构 + stock-sdk 首个插件
将可选数据源改为插件化架构: 插件代码放 backend/app/plugins/<name>/,
用户在设置页点击安装依赖, 主仓库不背运行时依赖(nodejs 等)。
架构:
- loader.py 新增 _load_builtin_plugins() 扫描 plugins/ 目录, 通过
plugin.yaml 清单动态发现并注册插件(委托自检 + 优雅降级)
- runtime 字段支持 node/python, 安装/卸载分别用 npm/pip
- 现有 tickflow + YAML 自定义源逻辑 100% 保留, 插件是叠加层
stock-sdk 插件 (plugins/stocksdk/):
- 原始实现来自 @forrany 的 PR #57, 迁移到插件化架构, 署名保留
- Node 桥接 (bridge.py/mjs) + Python provider, 覆盖日K/除权/分钟/实时
- 设置页主列表直接显示: 未装灰显+安装按钮, 装完可切换/卸载
配套:
- instrument_sync: 通用增强, 任何 provider 都能提供标的维表
- install/uninstall: uv 优先回退 pip, 容错坏 uv.toml + 国内镜像
- 10 例单测全过, tsc 零错误
|
2026-07-06 17:00:56 +08:00 |
|
shy3130
|
cc697e8ea4
|
fix: 分时图跟随实时行情自动轮询
实时行情开启后(realtimeRunning), 自选列表分时图自动按 15s 轮询刷新,
无需用户单独开启 minute_intraday_refresh 开关。
|
2026-07-06 17:00:55 +08:00 |
|
shy3130
|
17188e16db
|
docs: 补传缺失的使用文档(configuration/deployment/features/strategy)
|
2026-07-03 15:23:24 +08:00 |
|
shy3130
|
60dec142ea
|
Merge PR #45: feat 亮色主题 — 明暗切换 + 全部图表主题化
|
2026-07-03 14:12:13 +08:00 |
|
shy3130
|
2cbdc99659
|
Merge PR #44: fix(docker) 修复 .env 相对路径覆盖导致每次重建容器丢数据
|
2026-07-03 14:07:55 +08:00 |
|
shy3130
|
c1a5a6c367
|
Revert "fix: 修复海外服务器部署后交易时段时区误判为休市"
This reverts commit f02a88ebaa.
|
2026-07-03 14:07:26 +08:00 |
|
shy3130
|
574b163cb3
|
docs: README 与首次引导页增加"非 TickFlow 官方项目"声明
- README 顶部加醒目声明 badge(红+绿)+ 声明正文,功能介绍改为按页面分组的清单
- Onboarding 引导页新增 Step 0"使用前请知悉"声明步骤(个人开源/与官方无关/盈亏自负/不建议商用),原 4 步顺延为 5 步
|
2026-07-03 13:31:40 +08:00 |
|
shy3130
|
f02a88ebaa
|
fix: 修复海外服务器部署后交易时段时区误判为休市
- 新增 backend/app/timezone.py 统一上海时区入口(ZoneInfo + UTC+8 兜底)
- quote_service / depth_service 的 _is_trading_hours() 改用显式 Asia/Shanghai
- Dockerfile 加 ENV TZ=Asia/Shanghai + tzdata,docker-compose.yml 加 TZ 环境变量
- 代码与容器双保险,解决裸 datetime.now() 在 UTC 容器下永远判为休市的问题
|
2026-07-03 13:31:33 +08:00 |
|
shy3130
|
7c51bf5054
|
refactor(docs): 策略提示词文档统一归入 prompts/,docs/ 专放使用指南
将 4 个策略运行时文档(strategy-guide/step1/step2/example)从 docs/
迁至 backend/app/strategy/prompts/,与运行时加载路径一致;docs/
回归「项目使用指南与配置说明」定位。
- prompts/ 现自包含 4 个 md,guide 内对 example 的相对链接可正确解析
- 更新 README 与前端 StrategyBuilderDialog 的引用路径
- docs/ 保留 deploy-password.md / screenshots / zhihu 等面向人类的文档
承接 #41 Docker 文档缺失修复
|
2026-07-03 11:03:24 +08:00 |
|
shy3130
|
56276384e5
|
fix(strategy): 修复 Docker 镜像中 AI 策略提示词文档缺失
将运行时依赖的 3 个提示词文档(strategy-guide.md / step1 / step2)
从 docs/ 复制到 backend/app/strategy/prompts/,使其随 COPY backend/app
自动进入镜像;并将 GUIDE_PATH/_DOCS_DIR 改为相对当前文件的 prompts/,
路径在开发环境与 Docker 容器中解析一致。
修复 #41
|
2026-07-03 09:51:30 +08:00 |
|
shy3130
|
b203e07e22
|
chore: 更新 uv.lock
|
2026-07-02 17:46:31 +08:00 |
|
shy3130
|
d4dcbb1797
|
chore: 版本号升至 0.1.70
|
2026-07-02 17:45:30 +08:00 |
|
shy3130
|
e283d487ce
|
feat: Free 档实时行情监控限制提示
实时行情开关区新增 Free 档限制提示「监控自选股前 5 只,
全市场监控需 Starter+」,位于交易时段状态上方,可手动关闭
(不持久化,刷新后恢复显示)。
|
2026-07-02 17:40:41 +08:00 |
|
shy3130
|
fca0e261db
|
feat: 系统工具页新增封单监控触发验证
- 新增封单监控 tab: 模拟触发 (纯条件判断) 与真实触发 (落盘+推送)
供验证规则是否生效
- 页面标题与文案中性化, 避免暴露内部调试性质
|
2026-07-02 17:22:52 +08:00 |
|
shy3130
|
33a7be0deb
|
feat: 连板梯队封单监控卡片 UI 与 API
- monitor_rules API: RuleModel 加 metric/threshold 字段; ladder 类型
需 DEPTH5_BATCH 能力校验; 加模拟触发与真实触发端点供验证
- 连板梯队卡片: 右上角监控按钮 + 设置菜单 (段控指标/阈值+单位/
胶囊推送/权限提示); 开启监控的卡片置顶 + 背景区分
- 推送默认取全局设置; 单位默认万手/亿元
- 非付费用户可见功能入口但保存禁用, 提示后续适配免费数据源
|
2026-07-02 17:22:42 +08:00 |
|
shy3130
|
000a9ead77
|
feat: 连板梯队封单监控规则引擎
- monitor_rules 新增 ladder 类型 (封单量/封单额 <= 阈值预警)
- monitor 加 _evaluate_ladder: 封单判断 + 炸板/翘板预警, message 体现封单量
- monitor 加 has_rule_type 供评估前判断是否需注入特殊数据
- quote_service: 有 ladder 规则时从 depth_service 注入封单量到 enriched
|
2026-07-02 17:22:32 +08:00 |
|
shy3130
|
255688fab4
|
feat: 概念涨幅轮动 AI 分析
- 新增 concept_rotation_analyzer: 从涨幅排名矩阵预计算轮动信号
(主线/新晋/退潮/机构vs游资), 结合大盘背景生成分析报告
- rps API 加 /rotation-analyze 流式端点 (NDJSON)
- 轮动对话框: AI 占位替换为流式 Markdown 报告区 + 自动滚动
- 删除搜索框, 新增选中概念排名行 (前10红/后10绿)
|
2026-07-02 17:22:16 +08:00 |
|
shy3130
|
c394a365e1
|
revert: 撤回连板梯队 queryKey 扁平化修复
撤回 e7615fb 中 [...QK.limitLadder(...)] 改写, 恢复为 [QK.limitLadder(...)]
嵌套写法。
|
2026-07-02 12:28:16 +08:00 |
|
shy3130
|
09ec2a55c3
|
fix: 当日涨跌停判定改用维表 limit_up/limit_down 权威值
原逻辑用 _limit_price(prev_close, 推断涨幅) 自算理论涨停价, 涨幅靠 symbol
前缀 + ST 名字匹配推断, 存在两类缺陷:
1. 浮点精度: 自算涨停价比真实价多 0.01, 超出 0.005 容差导致漏判 (12 只)
2. ST 匹配漏洞: 名字含 "S" 不含 "ST" (如 S佳通) 被漏判 ST 5% 档 (1 只)
改为优先读 instruments 维表的 limit_up/limit_down (交易所级别精确价),
仅新股 (limit_up 为 null 或哨兵 100000) 回退自算。输出 schema 不变,
下游 depth_service/screener/market_overview 零改动。
历史路径 compute_limit_signals 不动 (instruments 仅存当天 as_of)。
|
2026-07-02 12:28:13 +08:00 |
|
shy3130
|
5a9fa9b255
|
feat: 概念涨幅RPS轮动分析
|
2026-07-01 17:48:28 +08:00 |
|
shy3130
|
ff9d7a9ac4
|
fix: filter_history 策略(反包等)实时监控可触发通知
|
2026-07-01 14:38:40 +08:00 |
|
shy3130
|
8127bd3c99
|
chore: 版本号升至 0.1.68
|
2026-07-01 11:27:30 +08:00 |
|
shy3130
|
ce5c705ab4
|
fix: 跨日后连板梯队整体少算一档
根因: live_agg 缓存的昨日连板数 (_prev_consec_up/down) 跨日不失效,
盘中增量计算永远基于前天基准, 导致次日开盘连板数整体 -1。
- get_live_agg() 加跨日失效守卫: date.today() 变化时按需重建
(fast-path 仅比较 today ~0.24ms/次, 跨日当天一次性磁盘校验)
- cron 盘后管道补 refresh_cache(), 与手动触发 /api/pipeline/run 对齐
(此前 cron 路径漏了这步, 盘后落盘的新 enriched 不反映到内存缓存)
|
2026-07-01 11:19:32 +08:00 |
|
shy3130
|
4a7d405d9d
|
docs: 新增飞书推送截图(个股监控/自动复盘)
|
2026-07-01 10:15:29 +08:00 |
|
shy3130
|
68841af662
|
feat: 定时复盘飞书推送 + SSE 实时进度
- 定时复盘支持推送到飞书(卡片消息, 完整报告), 渠道多选(飞书可选, 微信开发中)
- 推送开关独立常驻, 与定时/实时行情解耦; 手动/定时生成都可推送
- 定时复盘改流式生成, 通过 SSE(review_progress)实时推给前端, 开着页面可见边生成边显示
- 修复定时任务协程未 await 的 bug(lambda 包裹 async → 改传函数对象 + args)
- LLM 断流自动重试(最多2次), 后端归档 + 飞书推送, 异常兜底通知前端
- 复盘定时下限改为 15:00, 默认 15:10
- 版本号 0.1.66 → 0.1.67
|
2026-06-30 17:28:18 +08:00 |
|
shy3130
|
5d4d643bd8
|
fix: 同步后端 __version__ 到 0.1.66
|
2026-06-29 17:53:29 +08:00 |
|
shy3130
|
ec941e1eb1
|
chore: bump version to 0.1.66
|
2026-06-29 17:50:12 +08:00 |
|
shy3130
|
47a87fca2b
|
feat: 环境变量预置访问密码 + 飞书推送文档
|
2026-06-29 17:41:32 +08:00 |
|
shy3130
|
73490fdf5e
|
chore: bump version to 0.1.65
|
2026-06-29 17:21:01 +08:00 |
|
shy3130
|
a72445d782
|
fix(pipeline): 修复盘后管道除权因子拉取范围逻辑
daily_pipeline 除权因子改用日K范围回填 (实时增量模式兜底最近数日),
移除 max_date/incremental 依赖;kline_sync 修复 _normalize_adj_factor
重复列重命名崩溃, 新增 fetch_adj_factor_single 单股拉取;
kline.py fallback 改用 compute_enriched 应用复权;
index_sync 指数/ETF 日K同步增加批次进度回调;
同步指数日K步骤输出详细日志。
|
2026-06-29 17:17:44 +08:00 |
|
shy3130
|
37934091ac
|
feat(notify): 推送通知接入飞书 Webhook
新增 webhook_adapter 飞书群机器人推送 (含签名校验);preferences/settings
增加 feishu_webhook_url/secret 与 webhook_enabled_default (新建规则默认推送)
配置与端点;Monitoring 设置页重构为「推送通知」卡片 (渠道列表+飞书地址折叠
+默认渠道勾选);RuleEditor 规则编辑器支持单条规则勾选飞书。
QMT/ptrade 渠道文案统一改为「待定」。
|
2026-06-29 17:17:33 +08:00 |
|
shy3130
|
9dbd32246c
|
feat(backtest): 风控新增固定止盈 + 优化回测范围
风控: MatcherConfig 增加 take_profit_pct, 单标的与组合引擎风险检查新增
涨破止盈线卖出逻辑 (退出原因 take_profit);strategy.py 透传 overrides,
api/strategy.py 与前端类型暴露 take_profit;风控 tab 增加止盈输入框,
摘要/结果头/退出标签同步展示;修复未设止损时止盈检查被跳过的 bug。
回测范围: StockPoolPicker 输入框右侧增加「导入自选」「清空」按钮与
「当前范围」指示器, 移除冗余的「留空=全市场」提示。
|
2026-06-29 17:17:20 +08:00 |
|
shy3130
|
cd76796a5c
|
feat(monitor): 触发记录展示命中条件与当前价位
告警事件落盘时增加 conditions + logic 条件快照, 经 quote_service 透传到
SSE 推送;前端触发记录详情行渲染命中条件与现价, 替代原先仅显示
「信号触发」的通用文案。
|
2026-06-29 17:17:08 +08:00 |
|
shy3130
|
0724fd3721
|
fix(docker): PyPI 源多级兜底,避免单源同步延迟导致构建失败
修复国内镜像(清华源)同步 uv 包延迟时,USE_CN_MIRROR=1 构建报
"Could not find a version that satisfies the requirement uv" 的问题,
用户此前需手动传 --build-arg PYPI_INDEX 换源才能通过。
- pip install uv 加三重 fallback:主源(清华) → 备用源(阿里云) → 官方源
- uv sync 同时挂双 index(UV_DEFAULT_INDEX + UV_EXTRA_INDEX_URL),
uv 自动在两源查找,任一源缺包时另一源补位
- 新增 PYPI_FALLBACK build arg(默认阿里云),可自定义
正常构建零影响(fallback 首环即成功,--frozen 严格按 lock 安装),
仅在主源故障/同步延迟时自动兜底。
|
2026-06-26 17:39:45 +08:00 |
|
shy3130
|
b8ed0f8177
|
fix(analysis): 新用户无数据时概念/行业分析配置按钮无响应
根因:配置弹窗 <AnimatePresence> 在主 return 内,而无数据的早期
return 分支没有渲染弹窗,导致新用户点按钮 showConfig=true 无组件响应。
- ConceptAnalysis: 早期 return 分支补上弹窗渲染
- IndustryAnalysis: 早期 return 分支补上配置按钮(原来缺失)+弹窗渲染
修复后新用户在两个页面点配置按钮均可正常弹出。
|
2026-06-26 16:26:11 +08:00 |
|
shy3130
|
1e0e9b422b
|
feat(stock-analysis): 添加「点位提醒」按钮占位(开发中)
在 AI 个股分析按钮旁新增点位提醒入口,预留关键价位触发提醒功能。
当前点击提示「开发中」,后续可复用监控引擎实现价格触及通知。
|
2026-06-26 16:16:39 +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 |
|