shy3130
1f865ced79
feat(backtest): 高级策略设置新增「应用到策略」+ 修复浮点显示与输入体验
...
新增「应用到策略」按钮
- 底部按钮区(恢复默认/应用到策略/完成)新增按钮, 调用 api.strategySaveConfig
把当前弹窗的 overrides+params 持久化为策略定义(落盘 strategy_overrides/{id}.json)
- 所有页面加载该策略时都用这些参数(策略页加载的就是这里应用过去的)
- 成功后 toast 提示 + 刷新 detail + 关闭弹窗
- 仅用户自有策略(custom/ai/composite)显示, 内置策略不显示
修复浮点显示(止损 7.0000000000000001% → 7%)
- 根因: 5 个百分比派生变量用 Math.abs(x)*100, 浮点运算产生长尾
- 新增 round4() 辅助截断, 应用到 stopLossPct/takeProfitPct/trailingStopPct/
trailingTakeProfitActivatePct/trailingTakeProfitDrawdownPct
修复「删除即跳最小值」输入体验
- 根因: 受控 input 的 onChange 立即 clamp(n,min,max), 用户键入低于 min 的
中间值时立刻被钳到 min, 无法平滑输入/删除重输
- 新增 NumberField 组件: 输入时只更新文本草稿(不钳制), 失焦时才校正到 [min,max]
- 替换抽屉内所有数字输入框: risk tab 6个 + scoring tab 2个 + params tab 动态参数 + filter tab 6个
- 每个 onChange 移除立即 clamp, 业务逻辑(止损负号/回撤联动/整数取整)保留
验证: tsc + pnpm build 通过
2026-08-02 18:22:50 +08:00
shy3130
6a750de722
feat(regime): 趋势图可解释化 — 综合分主线 + 子维度曲线 + 状态背景色带
...
问题: 原趋势图标题「环境综合分·涨停数趋势」, 但综合分是4维加权结果,
图里只画涨停数一个副指标, 用户无法理解综合分为何涨跌(黑盒)。
后端(regime_builder.py)
- 抽出 _compute_subscores(metrics): 计算4子维度分(赚钱/投机/抗跌/趋势)+综合分
- classify_state 复用 _compute_subscores(逻辑不重复)
- _aggregate_daily 持久化4个子分列: profit_score/speculation_score/
resilience_score/trend_score(0-100), 供趋势图展示+未来策略按子维度过滤
前端
- RegimeRow 类型加8个可选字段(4子分+4原始指标, 兼容旧数据)
- 趋势图重构:
· 综合分主线(加粗2.5px置顶) + 半透明面积
· 4子维度点状曲线(赚钱橙/投机紫/抗跌绿/趋势蓝), 默认隐藏, 点图例展开
· 状态背景色带(markArea, 连续同状态日期段用状态色低透明度着色)
· 涨停数柱状降为半透明背景(opacity 0.35)
· 阈值横虚线更新为新模型 70/45/30
· 默认 legend.selected 只显示综合分+涨停数(简洁), 子维度按需展开
- 标题改为「环境综合分趋势」+ hint 说明各曲线含义
验证
- 后端 583 passed; 子分加权一致性100%(综合分=Σ子分×权重)
- 实测解释性: weak日(7-30综合23) 赚钱9+抗跌0 清楚显示普跌+大跌股多
- tsc + pnpm build 通过
2026-08-02 17:29:09 +08:00
shy3130
3ae7ead21a
refactor(regime): 重新设计评分模型对齐看板情绪分 + 修复 schema 迁移 + 饼图标签
...
评分模型重新设计(regime_builder.py)
- 归一化: _LIN 多点插值 → _score(low,high)(与看板 market_overview_builder 同款, 简洁不易设错)
- 维度: 赚钱效应/指数趋势/板块结构/活跃度 → 赚钱/投机/抗跌/趋势(对齐看板轻量维度)
- 新增「抗跌」维度(原模型完全缺失): 用 strong_down_pct 识别大跌日, 这是 weak 能出现的关键
原 board_structure(涨停-跌停对比, A股涨停常年>跌停致虚高)移除; activity(成交额曾恒满分)移除
- 权重调整 + _score 参考点用 A股真实分位数校准(非拍脑袋)
- 阈值与看板统一: 75/60/40/25 → 70/55/45/30
_aggregate_daily 增强
- 新增聚合列: avg_pct/median_pct/strong_up_pct/strong_down_pct(供新评分模型 + 未来策略扩展)
- 全部 polars group_by 向量化(不回退逐日 filter)
性能
- _scan_enriched_fallback needed 去掉 vol_ratio_5d(实测 compute_limit_signals 函数体未实际使用)
→ 全量补算数据量 657MB→617MB(省40MB), 配合分批内存峰值维持 ~1.9GB
修复 upsert schema 迁移(导致 recompute 500 的真实 bug)
- _aggregate_daily 新增4列后, 旧 regime parquet(15列)与新产出(19列)concat 报 schema lengths differ
- upsert_regime_history concat 前做 schema 对齐: 以新列名+顺序为权威给旧数据补缺失列(null)
→ 旧 parquet 首次重写时自动迁移到新 schema
前端饼图标签重叠修复(Regime.tsx)
- 状态分布饼图标签外置 + 虚线引导线(labelLine), 解决5个状态标签互相重叠
- labelLayout 防重叠, formatter 从两行改一行
验证
- 后端 583 passed(含新增抗跌维度专项测试)
- 真实数据全量分布: weak 从 0% → 有合理占比(原模型永不出现 weak)
- 内存峰值 ~1.9GB(分批+needed白名单保障)
- tsc + pnpm build 通过
2026-08-02 17:17:19 +08:00
shy3130
93558cf3b3
feat(regime): 市场环境页全面增强 — 内存可控/开关/画像/美化/分批可配
...
后端
- 修复 /recompute 全量分支误调增量函数致 computed 恒 0: 改为 earliest~today
走 run_regime_batch + upsert 强制覆盖
- 修复 /history 日期范围模式被 limit 默认 120 截断: limit 仅在未传 start/end 时生效
- _scan_enriched_fallback:
· 修复 compute_limit_signals 漏传 instruments 参数致慢路径必抛异常
· needed 白名单: 只算 regime 用到的列, 全量峰值 6.8GB→3.2GB
· 分批 + warmup: 范围超 batch_days 时切片, 每批带 warmup 前缀算后 concat,
全量峰值再降至 ~1.9GB; batch/warmup 参数从用户偏好读取
- _aggregate_daily: 逐日 filter 扫全表(O(N²))改为 polars 向量化 group_by
- 新增 enriched_date_set / earliest_enriched_date 辅助函数
- 盘后管道 regime 计算加开关(preferences.get_pipeline_regime_enabled), 默认关闭
- 新增偏好: regime_batch_days(默认60, 25~500) / regime_warmup_days(默认40, 35~90)
- 新增 API: PUT /preferences/pipeline-regime-enabled, PUT /preferences/regime-batch-params
前端
- 市场环境页时间范围控件: select 三档 → 4 档按钮组(1年/2年/自定义/全部)
· 自定义弹窗手动输入天数(1~1000 钳制) + 快捷预设
· 全部走 regimeCoverage 拿实际日期范围用 start/end 请求
- 市场环境页美化(对齐 Dashboard 设计语言): 渐变条头部/半透明卡片/SectionTitle/
指标卡进度条/语义色 bull-bear
- 新建 RegimeConfigCard: 盘后自动计算开关 + 全量回填分批参数(每批天数/预热天数/
快捷预设省内存·默认·更快)
- 数据页画像加市场环境卡片(独立 regimeCoverage 查询, 同步后刷新, 齿轮设置弹窗)
- 菜单排序设置 + 侧边栏 nav 加入市场环境, 默认排在复盘上面
- Layout 市场环境菜单 badge 改用琥珀胶囊(对齐 Settings 数据源标签)
验证
- 后端 582 passed; 真实数据全量回填产出 986 天, 内存峰值 ~1.9GB(原 6.8GB)
- 前端 tsc + pnpm build 通过
- 分批参数实测生效: batch=30 峰值 1896MB / batch=500 峰值 3772MB
2026-08-02 16:25:21 +08:00
shy3130
46ebcd89c8
fix(regime): 修复重算无产出并补全 beta 标签
...
后端
- /recompute 全量分支原本误调 compute_regime_incremental(增量补差),
无缺口/stale 时直接返回 0 行; 改为用 earliest_enriched_date ~ 今天
走 run_regime_batch + upsert 强制覆盖, 真正实现"全量重算"
- _scan_enriched_fallback 原本漏调 compute_limit_signals 的 instruments
参数致慢路径必抛异常 → enriched 缓存未预热时拿不到含信号列数据 → 聚合
返回空; 改用主管道同款 compute_all(df, instruments, historical_shares)
一站式补算, 与 indicators/pipeline.py 对齐
- 新增 enriched_date_set / earliest_enriched_date 辅助函数(抽出复用)
前端
- Regime 重算按钮: 加"重算中…"文字反馈 + 完成 toast(区分有/无新数据) +
catch 捕获错误(原异常被静默吞掉)
- 市场环境菜单加 beta 胶囊标签(对齐 Settings 数据源标签样式)
验证
- 后端 582 passed; 真实数据全量重算产出 986 行(2022-07-08 ~ 2026-07-31)
- 前端 tsc + pnpm build 通过
2026-08-02 12:22:48 +08:00
shy3130
4ee55e40c6
feat(regime): 新增市场状态识别系统并接入叠加策略回测过滤器
...
后端
- 新增 services/regime_builder.py:5 档日级市场状态分级(strong/lean_strong/range/lean_weak/weak)
- 新增 api/regime.py:5 个 regime 查询接口
- daily_pipeline 接入 regime 构建(step 2.6,soft-fail + 双检测自愈)
- 回测 strategy.py 新增 regime_filter 过滤:采用 T-1 防未来函数,仅作用于入场信号
在 composite / matrix_native / prepared 三处注入 entry_time_mask
- backtest API 透传 regime_filter(REST + SSE);_make_job_key 纳入 regime_filter 以隔离缓存
- 兼容 _RepoStub 测试夹具(store 属性缺失场景)
前端
- 新增 Regime 页面、路由、导航入口、api 类型与 queryKeys
- 叠加策略回测页新增 regime 过滤器控件
测试
- 新增 tests/test_regime_builder.py(18 项),覆盖分级逻辑、T-1 防未来函数、空值降级、三处 mask 注入
- 全量后端测试 582 passed;前端 pnpm build 通过;git diff --check 无空白错误
2026-08-02 12:05:20 +08:00
shy3130
a2bea0240a
fix(ui): 修复所有弹窗拖拽穿透导致误关闭的问题
...
问题: 用户在弹窗内容内拖选文本时, 鼠标移到遮罩松开会触发遮罩 click, 导致弹窗意外关闭(click 派发给 mousedown/mouseup 共同祖先)。
方案: 抽取共享 hook useDialogBackdrop, 用 mousedown 跟踪——只有按下和松开都在遮罩上才关闭。Modal.tsx 内置同样逻辑。所有手写遮罩弹窗统一接入。
2026-08-02 10:56:24 +08:00
shy3130
4696fef959
feat(composite): 新增叠加策略(composite)支持选股与回测
...
引入第四种执行后端 composite: 声明式引用多个子策略, 复用现有注册表/缓存/撮合全链路。
核心设计:
- 退出采用来源投影(每个子策略 exit 仅在自己持仓窗口生效, 不串平其他子策略仓位)
- 评分用标准化排名加权(跨子策略可比, 不依赖 per-strategy 的 min-max 量纲)
- 来源归因(entry_signal_code 标记来源子策略)
后端:
- engine.py: CompositeSpec 数据模型, 两阶段引用校验(孤儿移除/嵌套禁止/asset_types 子集/≤8 上限), _run_composite_strategy 选股执行, find_dependents 删除防护, override_loader 注入保证子策略与单独跑同口径
- composite.py(新): 选股 merge_results + 回测 merge_signal_matrices 合并器(退出投影/排名融合/归因)
- backtest/strategy.py: composite 回测分支(特征计划合并/逐子信号/统一风控/basic_filter/归因)
- api/strategy.py: POST /composite/save 端点, _strategy_detail 返回 composite_children(含 name/source), 删除依赖 409 防护
- monitor.py: 实时监控 fail-closed(回退盘后缓存)
- walkforward.py: 对 composite 显式中文报错
- worker.py: _strategy_dirs 补 composite 目录(修复回测子进程找不到 composite 的 bug)
前端:
- CompositeStrategyDialog(新): 创建/编辑弹窗(自动生成 composite_ ID, 权重归一, 类型标签, 增删子策略)
- StrategySettingsDialog: composite 设置面板(子策略增删改/归一/类型标签)
- StrategyBacktest: 回测页 composite 适配(分组/参数区/结果区展示子策略构成)
- api.ts: 类型扩展(source/backend 加 composite, composite_children 含 name/source)
测试: 36 个 composite 专项测试(加载/选股/回测退出投影/排名/归因/override 透传/API/删除防护), 端到端验证真实内置策略回测通过
2026-08-02 10:56:03 +08:00
shy3130
e803aa374d
chore: 版本号升至 0.1.88
...
统一升级 4 处版本号至 0.1.88:
- VERSION / backend/app/__init__.py / frontend/package.json: 0.1.87 → 0.1.88
- backend/pyproject.toml: 0.1.83 → 0.1.88 (原已滞后 4 个版本, 一并追上)
本版本包含:
- feat(search): 拼音首字母搜索 + 创业/科创/北交所徽标 (#151 )
- fix(security): ext_columns DuckDB SQL 注入修复 (#152 , closes #150 )
2026-07-31 20:03:43 +08:00
shy3130
192f6c4aa9
feat(search): 标的搜索支持拼音首字母 + 创业/科创/北交所徽标
...
## 1. 拼音首字母搜索 (同花顺式)
后端 search_instruments 新增拼音匹配层, 输入 payh 可命中「平安银行」。
- 辅助函数 _name_pinyin_keys 用 lru_cache 缓存「名称→首字母串」, 命中后
近似 dict 查找, 全市场遍历 < 1ms
- 多音字用 heteronym 笛卡尔积展开, 「重庆」同时匹配 cq/zq 两种读音;
并加载 A 股高频地名词典 (重庆/长安/长春/长沙/长城/长江)
- 拼音分支仅在纯 ASCII 字母输入时触发, 中文/数字搜索零开销跳过,
完全向后兼容
- 搜索分层: ① code/symbol 前缀 → ② 拼音首字母前缀 → ③ 包含匹配
新增依赖: pypinyin>=0.50 (纯 Python, 无 C 扩展)
新增测试: tests/test_instrument_search.py (15 用例覆盖拼音/多音字/兼容/边界)
## 2. 搜索结果显示板块徽标
自选/财务搜索/监控规则/回测选标的 四个搜索入口的结果项, 现在会显示
创业板(橙「创」)/科创板(青「科」)/北交所(紫「北」)彩色徽标。
- 复用项目既有的 boardTag (@/components/stock-table/primitives),
与自选/策略/Dashboard 表格徽标样式完全统一
- 沪深主板不显示徽标 (信息量低, 保持简洁)
## 验证
- 后端全量测试 503 passed (含新增 15)
- 前端 tsc --noEmit 零错误
2026-07-31 19:38:36 +08:00
wshy
84bc6cb875
Merge pull request #145 from intfoo/feat/index-support
...
自选/监控/个股分析支持指数(asset_type="index")
2026-07-31 19:19:17 +08:00
wshy
b59be65107
Merge pull request #143 from CJ0Hn/feat/watchlist-screenshot-import
...
fix: 自选截图导入优化
2026-07-31 19:11:12 +08:00
wshy
ceb53735b5
Merge pull request #134 from CJ0Hn/fix/numba-parallel-serialize
...
fix: 串行化 Numba parallel 内核,避免策略页并发崩溃
2026-07-31 19:08:07 +08:00
shy3130
4b6e94e020
修复回测风控参数恢复旧缓存的问题
2026-07-29 21:27:02 +08:00
intfoo
865e75fc8b
fix(index): 修复 PR #46 四个阻断项
...
阻断项1: 前端 TypeScript 类型扩展
- MonitorRule.asset_type 加 'index' (api.ts:517)
- screenerStrategies 参数加 'index' (api.ts:1412)
- klineMinute 响应 asset_type 去重 (api.ts:1296)
阻断项2: 指数监控独立评估
- _evaluate_monitors 股票早期 return 降级为 stock_ready 标志
仅跳过股票轮, ETF/指数轮独立判断数据新鲜度
- 纯指数行情/自选场景下指数规则可正常触发
阻断项3: 核心指数模式不截断分区
- _process_full_market_records 按 index_mode 条件分支:
mode=all (完整 CN_Index) → flush 覆盖; mode=core (部分标的) → merge 不截断
- merge_live_enriched_asset 对 index 正确更新 _index_enriched_cache
阻断项4: Free 档额度分批
- _fetch_watchlist_quotes 用 resolve_limit + chunked 按 capability batch 上限分批
- 失败批次跳过不整轮退出, 已有股票实时刷新不受影响
- 复用进程级共享限速器 sleep_between_batches
测试: +7 测试覆盖 4 个阻断项核心场景
2026-07-28 21:13:10 +08:00
intfoo
76202e0937
fix(index): 前端指数分钟K降级与文案资产中立化
...
- StockIntradayChart 指数不显示「获取分钟K/重新获取」按钮, 改静态提示
(指数分钟K仅实时读取, 后端 sync_minute_single 显式拒绝落库)
- api.ts klineMinute 响应类型加 asset_type 可选字段
- RuleEditor/Monitor 文案: 默认规则名/徽标/placeholder/报错/空状态
"个股信号(监控)→信号(监控)" "指定股票→指定标的" "股票→标的"
2026-07-26 19:59:30 +08:00
intfoo
4d069cc10f
feat: 指数(asset_type=index)前端接入 — 自选/监控规则/分析页
...
- 自选: 搜索含指数+徽标; 板块筛选豁免非股票行; 分时列指数降级
- 监控: RuleEditor 指数资产选项 (仅 signal/price, 隐藏涨停/分时信号); 规则列表指数徽标
- 分析: StockFinancialSearch assetTypes prop; StockAnalysis 搜索开放指数
2026-07-26 18:35:54 +08:00
shy3130
b43b177899
feat(monitor): add strategy signal event controls
2026-07-26 16:08:42 +08:00
CJohn
3e150ff600
feat(ocr): 截图导入支持多选并串行识别合并
...
- 文件选择与拖拽支持一次选多张截图,前端按队列逐张调用
import-image,同一时刻只跑一路 OCR,避免加重小内存机器峰值
- 多张识别结果按股票代码合并去重,优先保留已匹配项,已在自选标记取并集
- 展示多图缩略预览与「识别中 x/y」进度;一次最多 10 张
- request 增加 quiet 选项,队列内失败不逐条弹 toast,结束后统一提示
2026-07-26 12:51:55 +08:00
CJohn
e526d25fd0
fix(ocr): 完善截图导入的安全限制与交互状态
...
- 在 Pillow 完整解码前检查图片像素数,并将 DecompressionBombError
转为明确的参数错误,避免压缩大图在校验前占用过多内存
- 为 OCR 线程任务设置独立的 AnyIO CapacityLimiter(2),最多同时执行
两次图片解码与 Tesseract 识别,其余请求排队等待
- 前端调用 ocr-status 检查 Tesseract 是否可用;不可用时禁用截图导入
入口,并按 Windows、macOS 和 Linux 显示对应安装说明
- 关闭弹窗或重新选择图片时取消旧请求,并通过请求代次校验忽略迟到
的异步结果,防止旧候选回写到新弹窗
- 禁用已存在于自选列表中的候选项,批量添加接口返回实际净新增数量,
成功提示使用后端返回值
- 补充图片类型与大小校验、解压炸弹、OCR 状态、并发限制以及批量添加
数量等测试
2026-07-26 12:19:55 +08:00
CJohn
33921fcc51
fix: 串行化 Numba parallel 内核,避免策略页并发崩溃
...
并发 run_all 会触发 workqueue Concurrent access,导致后端进程中断。
为 matrix parallel 内核加进程锁,前端对 run_all 做 pending 去重。
2026-07-26 11:56:10 +08:00
shy3130
6f1c4032bb
feat(backtest): toggle auxiliary nav series
2026-07-26 00:31:38 +08:00
shy3130
6d7092089c
fix(data-source): harden custom source testing
2026-07-25 22:51:27 +08:00
shy3130
96fcbe4fff
fix(data-source): validate custom request settings
2026-07-25 22:13:38 +08:00
wshy
fffd89fce0
Merge pull request #138 from intfoo/feat/custom-source-timeout-param-ui
...
自定义数据源超时与请求参数名支持前端配置
2026-07-25 22:01:11 +08:00
HelloByeAll
852cc2f319
新增: 在回测净值图叠加仓位曲线
2026-07-24 21:12:26 +08:00
intfoo
a15d0468cc
feat(data-source): expose custom source timeout & request param names in UI
...
- backend: pass timeout through DatasetConfigIn / _config_to_dict / _sanitize_dataset
(previously a hand-set YAML timeout was silently wiped on UI save, resetting to 30s)
- frontend: add per-dataset timeout input; collapsible 请求参数字段映射 with
symbols/start/end_param (non-realtime) + asset_type/freq_param (minute);
rename 字段映射 -> 响应参数字段映射; chevron at title end; realtime empty-state hint
- test: timeout config round-trip (custom value persists, default 30 not emitted)
- docs: document timeout in custom-data-source.md
2026-07-23 16:22:18 +08:00
shy3130
60fe9e6fa6
修复回测指标数据缺失提示问题
2026-07-22 13:30:02 +08:00
shy3130
a12e49d66d
修复实时行情下策略图表闪烁问题
2026-07-22 11:42:57 +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
72918fe602
优化策略卡片结果加载性能
2026-07-20 13:01:03 +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
intfoo
91e16db547
fix(layout): 修复 None 档+自定义实时源用户侧边栏指数行情不显示
...
承接 #121 review: Layout.tsx:631 的 !isNoneTier 一刀切判定与同文件
546 行实时行情开关判据不一致, 导致 None 档+自定义实时源用户监控页
放行、实时开关可用, 但侧边栏指数行情卡片不渲染。后端
/api/intraday/indices 从缓存读取不调 TickFlow, 对该用户有数据,
纯前端拦截导致 UI 体验不一致。
将 !isNoneTier 改为 (!isNoneTier || !!realtimeProviderName),
与实时行情开关判据对齐。
2026-07-19 13:35:36 +08:00
intfoo and shy3130
e2ffde99d5
fix(minute,monitoring): 自定义数据源用户单股补拉/监控页打通 ( #121 )
...
承接 #126 : 能力探测已补 KLINE_MINUTE_BATCH, 但两处取数/UI 仍按 TickFlow
档位拦截, 配了自定义分钟/实时源的 None 档用户依旧被挡。
- kline_sync.fetch_minute_single: 与 sync_minute_batch 一致, 先查
preferences.get_minute_data_provider(), 非 tickflow 且自定义源有
minute dataset 时走 custom provider, 避免分时图首次打开(本地无数据)
补拉返回空。
- Monitoring.tsx: None 档但配了自定义实时源时, 后端
is_realtime_allowed(realtime_mode=full_market) 仍返回 True。
以 quoteStatus.realtime_allowed 作为最终判据, 不再用 isNoneTier
一刀切拦截实时监控页。
Co-authored-by: shy3130 <shy3130@users.noreply.github.com >
2026-07-19 13:26:52 +08:00
shy3130
8e4258cf20
feat: support historical price limits and share capital
2026-07-18 23:37:54 +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
lytem28
b6cf0495e1
feat: complete matrix-native backtest engine
...
Unify strategy execution across backtest, screener, and monitoring; isolate backtest workloads in spawn workers; and add shared matrix caching plus valid-bar indicator acceleration.
2026-07-16 12:17:27 +08:00
ChenJunheng
6f084e1b29
feat(watchlist): 支持从券商自选截图批量导入
...
基于 Tesseract OCR 识别六位代码并校验证券主数据,前端提供导入确认弹窗;
修复批量添加后 enriched 缓存未刷新导致需手动刷新页面的问题。
2026-07-15 23:25:46 +08:00
shy3130
0b3b769ca8
fix(strategy): clear saved strategy drafts
2026-07-15 20:51:07 +08:00