mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 14:24:15 +08:00
feat(data): 全量分钟 (full_minute) 数据集开放插件/自定义源接入
像其他能力一样可路由: 声明 full_minute 数据集并在设置页路由, 即接入 盘中全市场分钟落盘服务 (与 TickFlow Expert 同一能力键 intraday.universe)。 - policy: _DATASET_CAP_MAP 增补 full_minute → INTRADAY_UNIVERSE, 自定义源 声明且被路由时自动补授能力, 服务门控对两类源统一口径 - capabilities 注册表: full_minute 从不可路由 (field=None) 改为 full_minute_data_provider 偏好路由; preferences/settings API 收发新字段 - 插件契约: get_intraday_batch (修复轮, 未实现回退 get_minute 当日窗口) + get_intraday_latest (稳态增量, 可选; 未实现降级仅修复轮, 节奏下限 60s) - YAML 声明式源: full_minute 数据集与 minute 同形, loader 白名单放行, 源编辑器 UI 可配置; 仅修复轮语义 - kline_sync 边界: fetch_intraday_custom_batch / _fetch_intraday_custom_latest, 帧过北京墙钟守卫, 与 TickFlow 边界函数同纪律 - minute_refresh: 删「自定义分钟源让位」逻辑, 改按路由取数; status 增 provider / provider_effective / repair_only - 前端: 监控页卡片按能力驱动, 数据源页路由矩阵, api.ts 类型 - 测试: 门控/路由/降级/增广新增用例, 后端 1332 全过 - 文档: plugin-development / custom-data-source / configuration / features / CONTRIBUTING 契约细化 (AI 可照文档接入)
This commit is contained in:
@@ -33,16 +33,19 @@ TickFlow 是内置默认数据源;同时支持插件化接入第三方数据源(
|
||||
|
||||
### 全量分钟 (full_minute)
|
||||
|
||||
「全量分钟」是一项**独立能力**(能力键 `full_minute`,探测名 `intraday.universe`),不是某个档位的封闭功能:盘中把全市场当日 1 分钟 K 持续增量落盘到本地 `data/kline_minute/` 当日分区,分钟策略(`minute_filter`)与分时视图即可读到新鲜数据。**当前接入方式为 TickFlow Expert** — 配置 Expert 档 Key 即可使用。
|
||||
「全量分钟」是一项**独立能力**(能力键 `full_minute`,探测名 `intraday.universe`),与其他能力同样**可路由**:盘中把全市场当日 1 分钟 K 持续增量落盘到本地 `data/kline_minute/` 当日分区,分钟策略(`minute_filter`)与分时视图即可读到新鲜数据。接入方式二选一:
|
||||
|
||||
- **TickFlow Expert**:配置 Expert 档 Key,零配置即用(修复轮 `intraday.batch` + 稳态 `intraday.universe` 单请求增量)
|
||||
- **插件/自定义源**:声明 `full_minute` 数据集并在 **设置 → 数据源 → 全量分钟** 路由到该源 — Python 插件实现 `get_intraday_batch`(必需)/`get_intraday_latest`(可选,未实现自动降级仅修复轮、节奏下限 60s);YAML 声明式源数据集配置与 `minute` 同形(仅修复轮语义)。契约细节见 [plugin-development.md](./plugin-development.md) 与 [custom-data-source.md](./custom-data-source.md)
|
||||
|
||||
接入步骤:
|
||||
|
||||
1. **设置 → 凭据与能力** 配置 TickFlow API Key(Expert 档),点「重新检测」,能力列表出现「全量分钟」
|
||||
1. **设置 → 凭据与能力**(TickFlow 路径)配置 API Key(Expert 档),或在 **设置 → 数据源** 声明/安装提供 `full_minute` 的源并路由;点「重新检测」后能力列表出现「全量分钟」
|
||||
2. **开启实时行情**后落盘服务自动启动;仅连续竞价时段(9:30–11:30 / 13:00–15:00)运行,午休/收盘自动暂停与恢复
|
||||
3. 冷启动(如 10 点才开服务)自动触发**全天修复轮**,一次并发脉冲补齐 9:30 起的全部缺口;稳态走**增量轮**(默认 6 秒一轮,可配 3–120 秒),全市场每只取最新 3 根幂等合并滚出全天
|
||||
3. 冷启动(如 10 点才开服务)自动触发**全天修复轮**,一次批量补齐 9:30 起的全部缺口;稳态走**增量轮**(默认 6 秒一轮,可配 3–120 秒),幂等合并滚出全天
|
||||
4. 与盘后分钟同步写同一分区(`unique(symbol, datetime)` 幂等合并),互不冲突
|
||||
|
||||
说明:标的池为 A 股股票(CN_Equity_A),ETF 不在内(分时走批量补拉路径);覆盖滞后超阈值或连续空轮会自动再跑修复轮自愈。该数据集暂未纳入插件 loader 白名单;但配置了自定义分钟源(`minute_data_provider ≠ tickflow`)时,内置服务自动让位不启动,盘中分时由你的数据源按需供给(见 [plugin-development.md](./plugin-development.md))。
|
||||
说明:标的池为 A 股股票(CN_Equity_A),ETF 不在内(分时走批量补拉路径);覆盖滞后超阈值或连续空轮会自动再跑修复轮自愈。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 支持范围
|
||||
|
||||
当前自定义源支持五类数据:
|
||||
当前自定义源支持六类数据:
|
||||
|
||||
| 数据集 | 配置名 | 说明 |
|
||||
| --- | --- | --- |
|
||||
@@ -12,10 +12,15 @@
|
||||
| 除权因子 | `adj_factor` | 批量返回一组股票的复权因子 |
|
||||
| 实时行情 | `realtime` | 返回全市场快照,用于盘中 enriched 增量计算 |
|
||||
| 分钟K | `minute` | 返回 1m 分钟K(需映射出 symbol / datetime / OHLC / 量额) |
|
||||
| 全量分钟 | `full_minute` | 与 `minute` 同形;声明后可被路由为「全量分钟」生效源,内置服务盘中按当日窗口全市场批量落盘(仅修复轮语义,节奏下限 60s) |
|
||||
| 财务数据 | `financial` | 一个配置覆盖全部财务表,请求时把表名作为参数传给上游;字段由数据源决定,仅需映射出 symbol |
|
||||
|
||||
深度盘口(depth5)暂无数据集契约,仍由 TickFlow 提供。
|
||||
|
||||
`full_minute` 声明式源只提供修复轮(当日窗口批量);廉价增量端点
|
||||
(`get_intraday_latest`)是 Python 插件契约,见
|
||||
[plugin-development.md](./plugin-development.md)。
|
||||
|
||||
## 配置位置
|
||||
|
||||
把 YAML 放到运行数据目录下:
|
||||
@@ -294,7 +299,7 @@ cp docs/examples/custom-data-source/mock_source.yaml data/data_sources/mock_sour
|
||||
# 上游若返回百分数值 (3.66 表示 3.66%), 在 realtime 数据集声明 pct_unit: percent,
|
||||
# 不要依赖数值自动识别; 逐列转换也可用 transforms: turnover_rate: "value / 100"
|
||||
|
||||
分钟K (minute):
|
||||
分钟K (minute) 与 全量分钟 (full_minute, 字段同 minute):
|
||||
symbol = 股票代码
|
||||
# datetime 必须是北京时间墙钟 (如 2026-08-28 09:35:00), 不要返回 UTC;
|
||||
# 入口守卫会自动纠偏 UTC 特征帧, 但契约仍要求源头写对
|
||||
|
||||
+1
-1
@@ -134,7 +134,7 @@
|
||||
|
||||
### 全量分钟(盘中增量落盘)
|
||||
|
||||
「全量分钟」是独立能力(`full_minute`):盘中将全市场当日 1 分钟 K 持续增量落盘 `data/kline_minute/`,分钟策略与分时视图即取即用。**当前通过 TickFlow Expert 接入** — 配 Key 检测出能力后,开启实时行情即自动运行(冷启动全天修复轮 + 稳态增量轮);配置自定义分钟源时内置服务自动让位。
|
||||
「全量分钟」是独立能力(`full_minute`),**与其他能力同样可路由**:盘中将全市场当日 1 分钟 K 持续增量落盘 `data/kline_minute/`,分钟策略与分时视图即取即用。接入方式:TickFlow Expert,或声明 `full_minute` 数据集的插件/自定义源(设置 → 数据源 → 全量分钟 路由);配好能力后开启实时行情即自动运行(冷启动全天修复轮 + 稳态增量轮)。
|
||||
|
||||
详见 [configuration.md → 全量分钟](./configuration.md#全量分钟-full_minute)。
|
||||
|
||||
|
||||
@@ -149,6 +149,14 @@ class MyProvider:
|
||||
on_chunk_done=None, freq="1m") -> pl.DataFrame:
|
||||
"""分钟K: [symbol, datetime(北京墙钟), open, high, low, close, volume, amount]"""
|
||||
|
||||
def get_intraday_batch(self, symbols, count=300, asset_type="stock") -> pl.DataFrame:
|
||||
"""(声明 full_minute 数据集时实现) 全量分钟修复轮: 给定标的当日 1 分钟K,
|
||||
canonical 8 列同 get_minute; 内部自行分块/限速。"""
|
||||
|
||||
def get_intraday_latest(self, symbols=None, count=3) -> pl.DataFrame:
|
||||
"""(可选, full_minute 稳态增量轮) 尽量单请求返回全市场每只最新 count 根;
|
||||
未实现则服务降级为仅修复轮 (节奏下限 60s)。"""
|
||||
|
||||
def get_realtime(self) -> list[dict]:
|
||||
"""全市场实时快照 → list[dict]。失败软返回 [], 不抛异常(不阻断轮询线程)。"""
|
||||
|
||||
@@ -184,10 +192,25 @@ class MyProvider:
|
||||
深历史(TickFlow 基准)。浅源(如 stock-sdk 免费分时仅保留最近 5 个交易日)声明后,
|
||||
个股分时档位自动收窄为可行选项并默认 5 日,深源默认 20 日。
|
||||
|
||||
> **全量分钟与插件源的关系**:「全量分钟」(`intraday.universe`,盘中全市场分钟增量
|
||||
> 落盘)是独立能力,当前经 TickFlow Expert 接入、由内置服务(`minute_refresh`)执行,
|
||||
> 该数据集暂未纳入插件 loader 白名单。但配置了自定义分钟源(`minute_data_provider
|
||||
> != tickflow`)时,内置服务自动让位不启动,盘中分时由你的源经 `get_minute` 按需供给。
|
||||
> **全量分钟 (full_minute) 数据集契约**:声明 `full_minute` 数据集并把
|
||||
> `full_minute_data_provider` 路由到你的源,即接入「全量分钟」能力(盘中全市场
|
||||
> 当日分钟K增量落盘,由内置服务 `minute_refresh` 调度,与 TickFlow Expert 同一
|
||||
> 能力键 `intraday.universe`)。需实现:
|
||||
>
|
||||
> - `get_intraday_batch(symbols, count=300, asset_type="stock") -> pl.DataFrame`
|
||||
> — **必须**(或已有 `get_minute` 自动回退,但强烈建议实现批量端点)。
|
||||
> 返回给定标的当日 1 分钟K,canonical 8 列
|
||||
> `[symbol, datetime(北京墙钟 naive), open, high, low, close, volume, amount]`,
|
||||
> 内部自行分块/限速。服务在冷启动、覆盖断档、连续空轮时调用(修复轮)。
|
||||
> - `get_intraday_latest(symbols=None, count=3) -> pl.DataFrame` — **可选**,
|
||||
> 稳态增量轮专用:尽量单请求返回全市场每只标的最新 `count` 根。未实现时
|
||||
> 服务自动降级为仅修复轮,节奏下限抬到 60s(全天批量打不住 6s 节奏)。
|
||||
>
|
||||
> 两个方法的返回帧都过 `_enforce_minute_beijing_wallclock` 时区守卫(与
|
||||
> `get_minute` 同纪律);失败抛异常或返回空 df 均按空轮处理,连续空轮触发
|
||||
> 修复轮自愈。声明方式:插件在 `plugin.yaml` 的 `datasets:` 列表加入
|
||||
> `full_minute`。YAML 声明式源同样支持(数据集配置与 `minute` 同形,仅提供
|
||||
> 修复轮语义,见 [custom-data-source.md](./custom-data-source.md))。
|
||||
|
||||
### 异常语义
|
||||
|
||||
|
||||
Reference in New Issue
Block a user