Files
tick-stock-panel/docs/features.md
T
shy3130 ecbb45b8ef feat(pipeline): 盘后管道默认 15:35, 与盘后固定价终点 (15:30) 拉开缓冲
实测 2026-09-04 数据: 836 只可比标的中 24 只日K量大于分钟K合计 (最大
5.4%), 差额产生于 15:00 收盘后的盘后时段 (盘后固定价/大宗类成交计入
日成交量但不产生分钟K) —— 盘中实时落盘的日K注定缺失该尾巴, 只有
15:30 之后的官方日线才完整。

- 默认调度 15:30 → 15:35: 避开供应商日线未定稿窗口, 也与 quote 定版
  重试窗口终点 (15:30) 不再精确重合
- set_pipeline_schedule 保存下限从 15:00 收紧到 15:35 (存量已存配置
  不迁移, 读取不钳制, 仅下次显式保存时生效)
- 定时复盘默认 15:10 (即时复盘走实时快照缓存, 不依赖管道) 刻意不动

验证: set 钳制冒烟 (15:30→15:35, 15:35/15:36 原样); ruff 与 HEAD 基线
一致无新增; pytest prefer/pipeline/daily 相关 128 通过。
2026-09-06 22:35:24 +08:00

16 KiB
Raw Blame History

功能手册

各功能模块的详细说明。配置见 configuration.md,部署见 deployment.md,策略相关见 strategy.md

首次使用建议顺序:设置 → 凭据与能力(重新检测) → 立即跑盘后管道(拉日 K + 算指标) → 自选页加标的 → 选股页扫描 → 回测页验证 → 监控中心配规则。


🔍 选股引擎(Screener)

18 个内置策略,每个策略一个独立 Python 文件,基于 Polars 表达式向量化实现(backend/app/strategy/builtin/):

类型 代表策略
趋势 / 形态 趋势突破 · 均线多头 · MA 金叉 · MACD 金叉放量 · 布林突破
量价 / 涨停 量价齐升 · 高换手强势 · 连板股 · 断板反包 · 涨停动量
反转 / 波动 超跌反弹 · 超卖反转 · 新低反转 · 低波动龙头 · 回踩 MA20

全 A 股一次扫表,Polars 毫秒级返回。选股页点策略卡片即可扫描,结果支持导出。分钟策略与日线策略共用同一个标的池,按策略声明的周期自动路由执行(分钟策略依赖数据页开启分钟数据落盘)。

ETF 支持:选股页顶部可切换 股票 / ETF。ETF 复用已算好的 kline_etf_enriched 技术指标,仅开放技术类内置策略(趋势/量价/反转/波动);依赖涨停信号的策略(连板股、断板反包)为股票专有,ETF 模式下不显示。需先在数据页开启 ETF 拉取(pipeline_pull_etf)并跑一次盘后管道。

扩展策略的三种方式见 strategy.md → 扩展策略


📊 指标流水线(Indicators)

原生 Polars 向量化,全 A 股一次扫表落盘 enriched Parquet(基础行情列),指标在读取时现算并带进程内快照缓存:

  • 均线 / 趋势:MA(5-60) · EMA · MACD · 动量 · 布林带
  • 震荡 / 波动:RSI · KDJ · ATR · 年化波动率 · 振幅
  • 量能 / 涨跌停:量比 · 量均线 · 涨停信号 · 连板数
  • 原子信号:MA / MACD 金叉死叉 · N 日新高新低 · 布林突破
  • 复权:基于除权因子自动前复权,回测与指标口径一致

盘后管道(默认 15:35 CST 自动触发; 盘后固定价 15:30 终止 + 供应商日线定稿缓冲)会重新拉日 K + 重算 enriched 表。


🧪 回测引擎(Backtest)

基于 vectorbt(三种模式):

模式 说明
个股回测 单标的 + 策略,看个股历史表现
策略组合 一个策略扫描全市场,按组合约束回测
自由信号组合 多个自定义信号组合,自定义权重

真实约束:T+1 · 手续费 · 滑点 · 止损 · 最大持仓天数。

组合管理:最大持仓数 · 敞口控制 · 等权 / 自定义仓位。

输出净值曲线 · 夏普 · 最大回撤 · 胜率 · 盈亏比(平均盈利单/平均亏损单,≥1 红 <1 绿) · 蒙卡回撤(中位/95% 边界,按成交顺序重抽样估计回撤分布)。SSE 流式进度支持切页重连,不会丢失回测任务。

因子归因:策略评分(scoring)引用了因子的回测,结果区提供「因子归因」tab——对比盈利单与亏损单在入场信号日的因子均值(胜单均值/败单均值/差值/样本数),判断每个因子在本轮交易中贡献了正筛选力还是在拖后腿。数据来自入场候选快照,零额外计算;因子名显示「英文 id + 中文标签」。覆盖 meta.scoring 非空的策略(内置与自定义 polars 策略),矩阵单因子排名类策略暂不产出归因。

分钟策略回测:分钟级策略逐交易日回放信号、以分钟收盘价入场,输出分钟级成交明细,与日线回测同一套 T+1 / 费用约束。

结果沉淀:回测结果可导出 CSV(概要 / 净值曲线 / 交易明细 / 分标的统计四段),并可保存候选(完整参数与指标快照);候选在回测页「候选方案」中查看,支持一键载入复测,回填全部参数继续研究。

因子与策略挖掘:复用已有日频因子和 matrix-native 策略,通过 T-1 市场环境、相关去重和嵌套样本外验证生成研究候选。任务在 spawn worker 中运行,支持持久 run ID、取消、刷新重连和显式发布;自动周度任务默认关闭且永不自动发布。完整口径见 因子与策略挖掘

市场阶段与主线:市场环境页在原 5 档状态之外新增情绪周期阶段(冰点/启动/主升/高潮/退潮/修复,由连板梯队的高度、宽度、晋级率、梯队完整度判定,平均段长约 10 天)与主线识别(概念/行业维度的涨停梯队聚合排名,可配置宽基标签过滤)。完整口径见 市场阶段与主线识别

ETF 支持:三种模式的后端与 API 均支持 asset_type=etf,回测面板改从 kline_etf_enriched 读取(单次回测为单一资产类型,不混合股票与 ETF)。策略组合与因子回测页均有 股票 / ETF 切换,ETF 模式下策略列表与标的搜索跟随资产。需先开启 ETF 拉取并跑盘后管道。


🔬 因子平台(Factors)

/factors 一级页,检验 / 因子库 / 编辑器 / 组合四个 tab,与策略线双向联动。设计与阶段规划见 factor-platform-plan.md

因子编辑器:写 DSL 公式(如 rank(-ts_sum(change_pct, 5)))→ 校验语法(错误点击定位到字符)→ 试算 40 日 IC → 保存草稿。辅助输入:全部 25 个算子按「时序/截面/工具」分组点击插入(悬停显示签名与参数约束)、79 个可用字段双语 chip 点击插入、「从模板开始」下拉含经典模板与我的因子(导入已保存公式作为起点,非初始公式替换前有确认)。保存为草稿态,完整检验通过后在因子库激活。

检验与组合:服务端 IC/IR、Newey-West t 值、BH-FDR q 值、分层收益与多空对比;组合 tab 管理多因子权重。自定义/复合因子与策略评分共用同一条物化路径。

因子 ↔ 策略联动(四条桥):

方向 入口 说明
因子 → 策略 因子库「生成策略」 一键生成单因子排名策略(matrix_native,entry/exit 评分阈值 + top_rank 参数),保存为自定义策略可直接回测
策略 → 因子 策略触发器编辑的 Zap 按钮 从因子快速创建条件信号(阈值给建议值),自动挂接到当前策略的入场/卖出触发器
AI → 因子 自定义信号的 AI 生成 提示词包含全部因子分组与 id,可直接写「因子·动量: momentum_20d > 0.8」类条件
回测 → 因子 策略回测「因子归因」tab 见上文回测引擎章节

版本与生命周期:公式修改保存为新版本并回草稿态(需重新检验);状态机 active / watch / retired / draft。


🚦 盘中信号(分钟K)

信号库支持 timeframe=intraday 的盘中信号:基于当日已完成的一分钟 K 计算特征——分时均价、相对昨收/开盘涨跌幅、1/3/5 分钟放量比(今日基准,滚动窗口、每分钟刷新)、距当日与开盘 30 分钟高低点。条件支持数值比较与 cross_up / cross_down(上穿/下穿另一特征或阈值);信号输出为当日条件上升沿(条件 false→true 的那一根 bar 才为真,首根不触发;窗口不足、基准为零、缺昨收时特征为 null,判 false 绝不误报)。

  • 口径单源:监控评估、分钟策略执行、分钟回测、历史回放共用同一特征构造器(app/strategy/intraday_features.py),四条路径对同一段分钟数据产出完全一致(含防未来函数:只用已收盘 bar,滚动窗口不跨午休/跨日);
  • 消费入口:监控规则字段引用 csgi_* 列(与内置 4 个分时穿越信号并列,旧信号列名不变、存量规则零迁移);分钟策略(timeframes=['1m'])在 filter_minute_history 帧上直接引用 csgi_* 列(引擎单点注入);日线策略引用盘中信号会显式报错,不支持;
  • 回放验证:POST /api/custom-signals/intraday/replay 用本地历史分钟 K 重放信号触发时点(区间 ≤60 天、标的 ≤200),先验证再配置监控,不消耗盘中数据能力;
  • 能力门槛:盘中评估复用分时信号监控门控——分钟 K 能力(订阅池,单轮标的上限默认 100)或全量分钟能力(落盘服务健康时读本地分区,覆盖全市场);回放与分钟回测只需本地已有分钟 K 历史。

📡 监控中心(Monitor)

统一规则引擎,一个页面管理四类监控:

类型 场景
策略监控 策略扫描结果有变化时触发(如新增符合标的)
个股信号监控 特定个股的指标条件(如 RSI > 80)
价格涨跌监控 涨跌幅 / 价格突破阈值
全市场异动 全市场异动(如快速拉升/跌停)

ETF 支持:规则可选资产类型 股票 / ETF。监控引擎按规则 asset_type 分轮评估——ETF 规则用 ETF enriched 快照评估(engine.evaluate(..., asset_type="etf")),策略型规则走 ETF 历史加载器(读 kline_etf_enriched)。盘中触发需开启 ETF 实时行情(realtime_pull_etf),使 ETF 报价进入 enriched 快照。

特性:

  • 多条件 AND/OR + 冷却期去重 + 严重级别(info / warn / critical)
  • 多入口配置:监控中心新建 / 个股详情页「加监控」/ 策略卡片一键开启
  • 命中后右下角弹窗(可配声效)+ 持久化到 alerts.jsonl,菜单未读徽标
  • 触发记录详情:每条记录展示命中的具体条件(如 RSI>80)与当前价位,一眼看清为何触发

外部推送渠道

全局配置飞书群 Webhook、企业微信群 Webhook、通用第三方 JSON Webhook 或 SMTP 邮件。每条监控规则可独立多选渠道,每日复盘也共用同一套渠道配置。第三方 Webhook 使用稳定 JSON 信封,并支持可选 HMAC-SHA256 签名;邮件支持 SSL、STARTTLS 和无加密 SMTP。设置页可选择新建规则的默认渠道并对各渠道发送测试消息。


🚨 异动监控(Abnormal Moves)

独立的异动页,按交易时间线组织为三个 tab,覆盖盘前到多日:

Tab 口径
竞价异动(盘前) fuyao 同花顺盘前风向标:当日竞价强势榜(5-6 只/日,含竞价涨幅与概念标签),附带当日 / 次日真实收益对照追高风险标记(高开 ≥5% 追高当日均值显著为负,来自 60 日回测)
盘中异动 涨停 / 炸板 / 翘板 / 跌停 / 新高 / 新低 / 放量等当日信号聚合,按信号优先级 + 涨跌幅排序,复用 enriched 信号列,零新增采集
偏移异动(多日累计) 交易所异动偏离值口径(按板块分档:主板 3 日 ±20% · 创业板/科创板 ±30% · 北交所 ±40%;10 日 +100%/50%,30 日 +200%/70%),实时计算接近度(≥100% 已触发 · ≥70% 边缘 · ≥50% 观察)

竞价数据来自 fuyao 数据源(历史按日缓存,当日不缓存);未配置 fuyao key 时竞价 tab 显示引导提示。


📈 个股分析(Beta)

以「行情 + 关键价位」为主体的单标的决策页:

  • 专用日 K 图表:主图 + 成交量 + 滑块,默认近 6 个月
  • 9 类关键价位(纯函数实时计算,毫秒级):压力支撑 · 成交密集区 · 枢轴点 · 前高前低 · Keltner 通道 · ATR 波动通道 · 缺口位 · 斐波那契 · 整数关口
  • AI 四维分析:技术 / 基本面 / 财务 / 消息面流式生成,客观技术分析视角(不输出买卖建议)

🏆 连板梯队 & 概念分析

  • 连板梯队:实时统计各连板层级(首板 / 2 连板 / 3 连板...)的标的与封单,捕捉市场情绪与题材热度
  • 概念涨幅轮动:基于 ths 概念 / 行业,统计概念板块涨幅与 RPS 轮动,AI 分析资金主线
  • 盘后 AI 复盘:盘后自动生成市场复盘,注入龙虎榜资金动向(席位净买/机构与游资 Top5)与盘前风向标对照,可定时执行、推送飞书群、下载 Markdown;复盘页内亦有龙虎榜卡片(可排序席位明细)

🧰 数据与扩展

数据源插件化

内置 TickFlow 官方 SDK(日 K / 分钟 K / 指数 / 财务 / 实时行情),同时支持接入第三方数据源:YAML 声明自有 HTTP 接口,或开发插件源(参考实现 stock-sdk,Docker 镜像已内置)。多个数据集(日K / 除权因子 / 实时行情 / 分钟K / 五档盘口 / 财务,注册表持续扩展)按源声明自由组合,在「设置 → 数据源」切换。

详见 custom-data-source.mdplugin-development.md

全量分钟(盘中增量落盘)

「全量分钟」是独立能力(full_minute),与其他能力同样可路由:盘中将全市场当日 1 分钟 K 持续增量落盘 data/kline_minute/,分钟策略与分时视图即取即用。接入方式:TickFlow Expert,或声明 full_minute 数据集的插件/自定义源(设置 → 数据源 → 全量分钟 路由);配好能力后开启实时行情即自动运行(冷启动全天修复轮 + 稳态增量轮)。

详见 configuration.md → 全量分钟

🔌 第三方数据接入(重点)

支持将自有量化项目的数据并入,与内置数据同台分析:

方式 说明
HTTP 定时拉取 Tushare 等 API,定时拉取并入库
CSV / Excel 上传 页面直接上传文件
JSON 写入 程序化写入

接入后自动 schema 发现 + 符号归一,页面可视化配置,最终并入 DuckDB 同台分析。

时序表历史回补

timeseries 模式的表 (如人气排行) 默认只能从开启拉取之日起逐日累积。拉取配置新增日期参数名(date_param): 接口支持按日查询时填参数名 (如 date), 即可在拉取面板使用历史回补 —— 按本地交易日逐日请求 ?date=YYYY-MM-DD 写入对应分区,已有分区自动跳过 (幂等,可重复执行; 单次上限 120 天,单日失败不中断并逐项列出原因)。回补落盘的历史数据立即进入信号/因子/回测的按日对齐通道。

防污染契约: 若接口忽略日期参数返回当日数据 (以响应行 date 字段为准校验), 该日拒绝写入并计入失败清单 —— 否则当日值会静默污染整个历史时序。接口侧需提供: 传日期参数返回该日数据、无数据返回空数组或 404 (均视为该日无数据, 计入 empty 跳过)、每行带 date 字段;不传参数保持当日 (向后兼容)。

扩展字段接入信号/因子

扩展表的数值字段(int/float)可直接用作自定义信号条件因子——无需任何额外配置:

  • 自动注册:扩展表保存后,数值字段(int/float)以 ext_{表ID}_{字段} 为列名注册进因子注册表(kind=base,分组「扩展数据」),出现在自定义信号的字段下拉、因子库列表、策略评分与检验的可用因子、AI 生成提示词中;列名保留中文(如 ext_ths_concepts_所属概念),非 ASCII 名的数值字段只进信号通道不注册因子(DSL 公式标识符为 ASCII);
  • string 字段进信号(概念/行业归属筛选):字符串字段不注册为因子(数值口径),但可作为信号条件字段,运算符为 包含(contains)/等于/不等于,右值为字符串字面量(如「所属概念 包含 AI」);contains 按字面量匹配而非正则,空值不误报;可与数值条件混合(归属强势板块 AND 情绪/热度阈值),用于强势板块内选股;
  • 时序模式按日对齐:按 (symbol, 交易日) 精确匹配扩展分区,缺分区为 null(不前视填充),历史帧与回测无未来函数;
  • 快照模式仅当日:快照代表"最新值",只在当日/盘中单日帧注入;多日历史帧跳过,防止回看历史引入未来数据(引用快照字段的信号在历史帧按缺列优雅降级);
  • 写入即失效:上传/定时拉取/配置变更后自动清扩展帧缓存、策略结果缓存与 enriched 内存缓存,下一次计算立即生效;
  • 边界:bool 字段不参与;string 字段仅进信号条件通道(不作因子);内置预设的概念/行业表为快照模式,其归属条件在当日/盘中筛选生效、历史回测不注入(防未来函数),需要历史回看请用时序模式按日写入。

盘后定时管道

APScheduler 默认 15:35 CST 自动:拉日 K → 重算 enriched 表 → 跑监控规则。

令牌桶限流

适配各档位 rpm / batch 限制,批量合并 + 增量拉取,避免触发数据源限流。