shy3130
|
f7b56ec3c8
|
docs: 自定义数据源新增 AI 映射 prompt 模板
|
2026-07-05 23:16:18 +08:00 |
|
shy3130
|
fa08981851
|
feat: 自定义数据源扩展 + 限频集中化 (v0.1.80)
|
2026-07-05 22:57:46 +08:00 |
|
 wshyandshy3130
|
e524ea4893
|
perf: 指标计算移出启动关键路径, 后台异步预热 (#51)
启动时 instruments/index/ETF 同步刷新(<0.1s), enriched 的 compute_indicators
(107万行, 低配Linux 50s+) 推 daemon 线程异步完成。应用秒级 ready, 前端不再
报 ECONNREFUSED。预热期间上层走空表降级, 完成后自动替换缓存。
- repository: _enriched_warming 标志 + warmup 线程 + 懒加载守卫
- main: refresh_cache(background=True) + app.state.indicators_ready
- data API: status 端点加 indicators_ready 字段
- 前端: Data 页指标计算中提示 + 加快轮询
Closes #47
Co-authored-by: shy3130 <shy3130@users.noreply.github.com>
|
2026-07-04 21:55:03 +08:00 |
|
im47cn
|
1fd7e84785
|
feat(backtest): 成本模型拆分为佣金+印花税(仅卖出)+滑点 (#46)
* feat(backtest): 成本模型拆分为佣金+印花税(仅卖出)+滑点
MatcherConfig 新增 commission_pct/stamp_tax_pct 及 buy_cost_pct()/
sell_cost_pct() 方法, 撮合三处现场统一改用方法计算。
印花税单边(仅卖出)是 A 股与美股的本质差异: 旧的 fees_pct 双边模型
把印花税摊到买卖两腿, 会高估买入成本、低估卖出成本。拆分后买入腿=
佣金+滑点, 卖出腿=佣金+印花税+滑点。
commission_pct 未设时回退 fees_pct, 印花税未设时为 0, 完全向后兼容,
既有 12 个 portfolio 测试不变。strategy/api(含 SSE + 缓存键)全链透传。
新增 tests/backtest/test_cost_model.py 覆盖向后兼容/拆分/印花税仅卖出/
优先级/撮合传导 5 个用例。
* fix(backtest): 打通成本模型前端链路并修复 cancel 缓存键
子代理审查发现 PR3 半成品缺陷, 本次补全:
C1 (正确性): /strategy/cancel 的 _make_job_key 漏传 commission_pct/
stamp_tax_pct, 一旦用户设成本参数, cancel 算出的 job_key 与 stream 失配
导致取消静默失败。补 None-aware 解析对齐两侧口径。
C2 (完整性): 前端 SSE/sync 链未透传新字段, 新成本模型从 UI 够不到。
- backtestTask.ts / api.ts: 类型 + query 透传 commission_pct/stamp_tax_pct
- StrategyBacktest.tsx: 佣金映射到 commission_pct, 新增印花税(千分之)输入,
默认 1 (A股千1), 映射 stamp_tax_pct; 状态持久化
- storage.ts: stampTax 类型声明
测试加固:
- test_stamp_tax_only_deducts_on_sell_leg: 去掉硬编码 shares=9900,
改为断言两次运行 shares 相等 (守护买入腿 sizing 不受卖出成本污染)
+ 从结果反推卖出市值校验差额
- 新增 commission_pct=0.0 非 None 边界 (防 falsy 回退)
- 新增 job_key 区分成本参数的回归测试 (守护 C1)
后端 26 测试全绿; 前端 tsc 仅剩既有 baseUrl deprecation (非本次引入)。
|
2026-07-03 23:15:32 +08:00 |
|
shy3130
|
60dec142ea
|
Merge PR #45: feat 亮色主题 — 明暗切换 + 全部图表主题化
|
2026-07-03 14:12:13 +08:00 |
|
Gundy
|
1d8b93cc42
|
fix: 一批低危问题修复
- alert_store: 删除 delete_one 里不可达的 return count 死代码;
list_recent/count 持锁读, 防与 prune/clear 整文件重写并发读到截断内容
- ai_generator: import 校验从黑名单改为白名单 (仅 polars/__future__),
黑名单挡不住 ctypes/importlib/builtins/pickle 等未列出模块;
_extract_meta 改用 ast.literal_eval 替代 compile+eval
- frontend api.ts: request() 合并调用方 headers (此前被整体覆盖丢弃)
- VERSION 同步至 v0.1.70 (与 pyproject/package.json 一致)
|
2026-07-03 14:11:27 +08:00 |
|
Gundy
|
2cbcd53538
|
fix(theme): 连板梯队亮色可读性 — 卡片股票名与概念/行业标签
用户反馈亮色下连板梯队看不清, 根因是三处按暗底设计的写死颜色:
- 卡片股票名 text-rose-50/text-green-50 (近白) → 亮色深酒红/深绿
(text-rose-900/emerald-900 + dark: 变体保持原暗色效果)
- 顶部概念/行业标签云: 亮黄[250,204,21]/亮蓝[96,165,250]文字元组
按暗底设计 → TagStats 增加 textLight 深色阶 (黄700/蓝700),
选中态亮色下不再用白字 (黄底白字不可读), 底色透明度同步调淡
- 梯队分组内的概念/行业小标签: 同样的黄/蓝 rgba 硬编码, 同方案修复
实测: 亮色下股票名/代码/标签全部清晰, 暗色截图对比无回归
|
2026-07-03 13:51:36 +08:00 |
|
Gundy
|
abd17f53ca
|
fix(theme): 亮色模式实测修正 — 看板雷达图/近白文字/图例颜色
用浏览器实测双主题后的修正:
- 看板情绪雷达 (SVG): 网格/中心渐变/描边从写死的深 slate 色改为
hsl(var(--surface/elevated/border)) CSS 变量, 亮暗自动切换
(亮色下原来是一块突兀的深色六边形)
- 回测统计卡: 中性值文字写死近白色 #f8fafc → inherit (亮色下不可见)
- ExtDimensionAnalysis 装饰图形 white/xx → foreground/xx
- 情绪页图表: 折线补 itemStyle, 图例色块与线色一致
(原用 ECharts 默认调色板, 与线对不上, 双主题都存在的旧瑕疵)
实测覆盖: 看板/个股分析(K线)/市场情绪 亮暗双向切换 + 刷新持久化
(预渲染脚本生效, body 背景 #FAFAFA), 暗色无回归
|
2026-07-03 13:51:36 +08:00 |
|
Gundy
|
8abf7e338a
|
feat(theme): 亮色主题基础设施 + 全部图表主题化
- lib/theme.ts: localStorage 持久化 + useTheme hook (本页/跨标签页
同步) + ChartTheme 图表调色板 (ECharts/lightweight-charts 画布
不吃 CSS 变量, 统一从这里取色)
- index.html: 去掉写死的 class=dark, 换预渲染内联脚本 (默认暗色,
切过亮色则保持), 避免首屏闪烁
- Layout: 侧边栏底部亮/暗切换按钮 (设置入口上方)
- 图表主题化 (切换即时生效, 无需刷新):
· EChartsIntraday / EChartsCandlestick / CandlestickChart
(lightweight-charts applyOptions) / AnalysisKChart
· 回测 4 图 (StrategyNav/FactorIC/FactorGroupNav/ReturnDistribution)
· Sentiment 页双图
序列颜色 (红涨绿跌/MA线) 双主题通用保持不变; 轴/网格/十字线/
tooltip/信息栏背景按主题切换
CSS 变量亮色板 index.css 里本就有 (:root), 首次真正启用
|
2026-07-03 13:51:17 +08:00 |
|
shy3130
|
574b163cb3
|
docs: README 与首次引导页增加"非 TickFlow 官方项目"声明
- README 顶部加醒目声明 badge(红+绿)+ 声明正文,功能介绍改为按页面分组的清单
- Onboarding 引导页新增 Step 0"使用前请知悉"声明步骤(个人开源/与官方无关/盈亏自负/不建议商用),原 4 步顺延为 5 步
|
2026-07-03 13:31:40 +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
|
c7ad860dba
|
fix: 修复自定义策略删除导致策略池清空及删除失败静默问题
- bug2(删除后策略全没): prune 仅在拉取成功且非空时执行,加载中/失败/空列表不碰池
根因: 删除触发 engine.reload() 重扫所有文件,任一文件 import 失败被静默跳过,
前端拿到残缺列表后 prune 把池中有效 ID 永久清除并写 localStorage
- bug1(自定义策略删不掉): handleDelete 不再静默吞错误,失败时显式提示并保持弹窗打开
- ai_save 守卫回归: 放宽前缀允许 ai_/custom_,保留 path traversal 字符白名单(安全核心未动)
修复「AI 修改 custom 策略」因 strategy_id 非 ai_ 前缀被 400 拒绝
- 引擎加载失败可见化: _load_all 收集 load_errors,/api/screener/strategies 返回,
前端 toast 提示具体失败文件,不再静默消失
- 同步补全 ai_generator _SYSTEM_PREFIX 三条铁律(与 bbc92c4 docs 一致)
|
2026-07-02 22:19:46 +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
|
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
|
e7615fb9e6
|
fix: 扩展数据拉取修复与连板梯队queryKey修复
|
2026-07-01 23:02:37 +08:00 |
|
shy3130
|
5a9fa9b255
|
feat: 概念涨幅RPS轮动分析
|
2026-07-01 17:48:28 +08:00 |
|
shy3130
|
14070c24b3
|
fix: 切页时 onboarding 守卫整屏 logo 闪烁
后台重取 (isFetching) 期间本地已有 stale 缓存可展示, 无需整屏占位。
仅首次加载 (isLoading) 才显示占位, 消除切页 logo 闪烁。
|
2026-06-30 22:36:07 +08:00 |
|
shy3130
|
e4f0a95ca2
|
fix: 升级 Expert Key 后财务页「全部同步」无反应
启动时无 FINANCIAL 能力导致调度器 _capset 为 None, 后续在设置页更新 Key
时 app.state.capabilities 已刷新但调度器未同步, trigger() 仍报
no FINANCIAL capability 而拒绝同步。新增 update_capabilities 并在设置 API
刷新能力时同步推给调度器; 前端对 started:false 一律给出提示, 不再静默。
|
2026-06-30 22:30:52 +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 |
|
wshy
|
35b20d6317
|
Merge pull request #32 from lzwaang/feature/codex-cli-ai-provider
Add Codex CLI AI provider
|
2026-06-30 10:17:06 +08:00 |
|
Lzwaang
|
2d86dea721
|
Avoid copying Codex env file
|
2026-06-29 22:53:36 +08:00 |
|
shy3130
|
b315e531df
|
feat: 回测页加预热期说明徽标与滑点配置
- 回测区间旁加「预热≥120天」徽标,点击弹泡说明开头无交易原因
- 佣金旁新增滑点(万分之)输入,持久化并接入回测请求
- Auth 设密码页加访问密码部署文档链接
|
2026-06-29 22:45:16 +08:00 |
|
Lzwaang
|
ec6380376d
|
Add Codex CLI AI provider
|
2026-06-29 22:32:58 +08:00 |
|
shy3130
|
ec941e1eb1
|
chore: bump version to 0.1.66
|
2026-06-29 17:50:12 +08:00 |
|
shy3130
|
73490fdf5e
|
chore: bump version to 0.1.65
|
2026-06-29 17:21:01 +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 |
|
Aliang
|
ce87bc37a6
|
fix(financials): expand layout on ultrawide screens
|
2026-06-29 12:04:48 +08:00 |
|
Aliang
|
017db67c0f
|
fix(stock-analysis): expand layout on ultrawide screens
|
2026-06-29 11:48:01 +08:00 |
|
shy3130
|
b923352ea4
|
|
2026-06-28 22:15:53 +08:00 |
|
shy3130
|
8a4690f1f2
|
fix(auth): 登录页标题改为项目名称 TickFlow Stock Panel
|
2026-06-28 21:08:55 +08:00 |
|
shy3130
|
d123fa723e
|
chore: bump version to 0.1.64
|
2026-06-28 20:11:35 +08:00 |
|
shy3130
|
69cd7af8d9
|
feat: 新增访问密码认证(首次本机设密码 + 公网防护)
- 后端: PBKDF2 密码哈希 + 会话 token(auth.json 存储, 零数据库)
- 中间件: 未设密码时本机可设/公网拒绝(防裸奔+防抢占), 已设密码后 401 拦截
- 5个 API: status/setup/login/logout/change-password, 含本机限制+登录限流
- 前端: 登录页/设密码页 + 全局 401/403 拦截跳转
- 安全: HttpOnly cookie + 5次失败锁5分钟 + 改密码清会话
|
2026-06-28 20:02:00 +08:00 |
|
shy3130
|
5585f445fc
|
chore: bump version to 0.1.63
|
2026-06-28 18:20:57 +08:00 |
|
shy3130
|
8a8cd746dc
|
feat: — 数据目录/实时监控/定时复盘/老CPU兼容
1. 桌面客户端体验优化,Polars 兼容内核 (老 CPU 兼容)
2. 自选页实时监控优化
3. 个股监控逻辑优化
4. 新增定时复盘
6. 其他: 修复 settings.py 中 HTTPException 未 import 的既有 bug
|
2026-06-28 18:08:52 +08:00 |
|
shy3130
|
94e871a48b
|
feat: 概念/行业分析页数据缺失时显示「获取数据」按钮
数据缺失时引导用户手动触发拉取, 而非静默无数据。
前端:
- analysis-shared.tsx: 新增 PresetFetchState 共享组件 (图标+提示+按钮+错误展示)
- api.ts: 新增 extDataPresetFetch(id) 封装
- ConceptAnalysis/IndustryAnalysis: 两个空状态接入 PresetFetchState,
新增 fetchMutation + needsXxxFetch 判断 (内置预设存在但无数据时显示按钮)
|
2026-06-28 16:01:46 +08:00 |
|
shy3130
|
eaaf923d7b
|
修复看板显示bug
|
2026-06-28 13:49:18 +08:00 |
|
shy3130
|
33f10c2847
|
重新设计复盘页面并优化页面
|
2026-06-28 13:49:05 +08:00 |
|
shy3130
|
2acaa38a2b
|
feat: release v0.1.60
|
2026-06-27 23:23:34 +08:00 |
|
shy3130
|
a832836938
|
docs(readme): 添加 GitHub star 徽章
|
2026-06-26 23:55:12 +08:00 |
|
shy3130
|
6bfb2a218f
|
chore: bump version
|
2026-06-26 23:37:56 +08:00 |
|
shy3130
|
56bf1ff1b2
|
Merge branch 'feat/stock-analysis-levels-refactor': 个股分析价位体系重构
|
2026-06-26 23:37:42 +08:00 |
|
shy3130
|
0a24e1e601
|
chore: bump version to 0.1.51
|
2026-06-26 23:37:04 +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
|
b8ed0f8177
|
fix(analysis): 新用户无数据时概念/行业分析配置按钮无响应
根因:配置弹窗 <AnimatePresence> 在主 return 内,而无数据的早期
return 分支没有渲染弹窗,导致新用户点按钮 showConfig=true 无组件响应。
- ConceptAnalysis: 早期 return 分支补上弹窗渲染
- IndustryAnalysis: 早期 return 分支补上配置按钮(原来缺失)+弹窗渲染
修复后新用户在两个页面点配置按钮均可正常弹出。
|
2026-06-26 16:26:11 +08:00 |
|