配置参考

August 16, 2026 · View on GitHub

配置文件格式:TOML。模板随包装在 cnequity.config.templates;仓库内副本为 configs/cnequity.example.toml

cne config init                              # 推荐:写出 configs/cnequity.toml
cne config init --data-root /data/cnequity
cne config validate --config configs/cnequity.toml

加载与校验:cnequity.config.loader


[data]

类型默认说明
rootstring./data/cnequity数据湖根目录;生产建议绝对路径

派生路径(代码内自动计算,无需配置):

  • {root}/staging — 本次 run 原始落地
  • {root}/curated — canonical 数据集
  • {root}/derived — 派生数据集(如 adj_factors)
  • {root}/meta — manifest、水位、质量 findings
  • {root}/duckdb/cnequity.duckdb — DuckDB 视图库

[orchestrator]

默认说明
workers8daily_bars 多进程 worker 数
batch_size100每 batch 股票数量
max_retries3batch 级重试次数
retry_backoff_seconds5重试退避
batch_stale_seconds3600running batch 无心跳超时 → stale → failed;compact 门禁会跳过未完成数据集

[tdx_protocol]

默认说明
enabledtrue禁用后 TDX 相关 step 失败
min_interval_ms100跨进程限速间隔(建议 ≥100,防多 job 打爆)
lock_timeout_sec15.0申请 TDX 限速锁的最大等待时间;超时显式失败,不绕过限速
servers"auto""auto""host:port" 固定单服
connect_timeout_sec10连接超时
allow_mockfalse仅测试:源不可用时返回 source="mock" 数据;生产必须 false

[tdx_protocol.hosts]

说明
standardservers="auto" 时优先并行探测的 A 股标准行情主机列表;为空则用内置兜底列表(adapters/tdx_protocol/hosts.py

[sources.<name>]

支持的 name:eastmoneycninfopbocsinabaostocknbsexchange

说明
enabled是否启用该源;缺省(配置中没有该 [sources.<name>] 段落)时按关闭处理
min_interval_seconds跨进程文件槽位限速(见 domain/rate_limit.py);锁内只预订时隙,等待发生在释放锁后
proxy(eastmoney)可选 HTTP(S) 代理 URL,对所有东财主机生效;大陆网络不需要,海外出口才配。未设时仍可用环境变量 HTTPS_PROXY
batch_size / batch_rest_seconds(baostock)全市场回填批次冷却,防 IP 黑名单

推荐默认(时间宁可慢,勿被封):

sourcemin_interval_seconds备注
eastmoney1.0日更主源;裸 EastMoneyClient() 也默认 1.0s 进程内节流
cninfo1.0公告/监管分页 POST
pboc1.0社融月度序列,索引一次 + 每年一个工作簿
nbs1.0仅 audit:PMI 发布稿对照,每次两个请求
exchange1.0仅 audit:交易所上市列表,每所一个请求
sina0.3复权因子;经 adj_factorswait_source
baostock1.0 + batch 50/45s历史市值/ST;禁止多进程并行扫

[adj_factors]

默认说明
source"sina"复权因子来源
adjust_types["hfq"]仅存后复权因子(ADR-0004);qfq 查询期派生

[sentiment]

默认说明
use_snownlpfalseon-demand stock_news 可选 SnowNLP(包已随安装提供);日更 batch 用关键词
news_symbol_limit50HTTP stock_news 回退抓取 symbol 上限(主通道为 curated news_headlines

[failover]

多源快照与 diff;不会自动切换 canonical(ADR-0003)。

说明
enabled总开关

[[failover.datasets]]

说明
name数据集名
primary主源 adapter 名
backup备源(主源 batch 失败时写 snapshot)
compare_fieldsaudit diff 比对字段
price_tolerance_bps价格容差(基点)

默认配置:daily_bars(TDX 主 / EM 备)、corporate_actions(EM 主 / TDX 备)。


[universe]

默认说明
default"all_a"load(..., universe=) 默认 universe 类型

[job.daily.waves]

Wave DAG:每个 wave 含 nameparallel(wave 内 step 是否并行)、steps(step 名列表)。

默认四波:

  1. reference — instruments, trading_calendar, trading_status(并行)
  2. corp_actions_to_bars — corporate_actions → daily_bars(串行)
  3. parallel_core — index_bars
  4. finalize — compact, derive_adj_factors, audit

validate_config 要求至少一个 wave,且所有 step 名必须在 STEP_REGISTRY 中。


调度组

[job.daily.groups.<name>]at(文档/调度参考时间)、steps(含末尾 compact)。

组名典型时间实测耗时内容摘要
core16:00~50 minL0 + L1 核心 + derive_adj_factors
capital17:0010.3 min资金面 + 估值 + 板块 + 公告索引
signals17:205 s龙虎榜、大宗交易
fundamentals17:352.6 min财报、指数成分、行业
macro_risk17:552.4 min宏观、市场宽度、解禁、监管
research18:1511.4 min机构持仓、一致预期、情绪
intraday18:45minute_bars / minute_bars_5m不在默认调度;需先开 [minute_bars]

「实测耗时」测于 2026-08:macOS(因此 workers=1)+ 海外出口,即最慢的一端。 大陆 Linux + workers=8 会快一个数量级,这个间隔会显得很宽松——这是刻意的

间隔必须容得下最慢的一次运行,不是典型的一次。 所有 daily* 任务共用一把 非阻塞daily_ingestion 锁:上一组还没跑完时,下一组不会排队,而是直接 中止——那一组当天就没有数据。core 的全市场 daily_bars 实测 543ms/只、 ~5400 只约 50 分钟,曾经超出到 capital 的 30 分钟间隔,导致资金面组每天被跳过。 撞锁时报错会明确说明是被跳过,以及去哪里调间隔。

cne run daily --group <name> 只跑该组 steps。


[minute_bars]

可选日内线。默认关闭,且不在 [job.daily.waves] 上——全市场 1m 约 35MB/日、8.4GB/年,不能变成没人要时 cne init 的成本。开启后用 cne run daily --group intradaycne backfill

默认说明
enabledfalse总开关
scope"index:000300.SH"index:<symbol> / watchlist / all
symbols[]scope = "watchlist" 时的显式列表
frequencies["1m"]"1m"minute_bars"5m"minute_bars_5m
fetch_workers4并发 TDX 连接数(不提高请求速率,只消网络空转;上限仍约 10 req/s)

源端视野(实测 2026-08-01):1m ≈ 95 个交易日,5m ≈ 491 个交易日。更早窗口返回空;cne backfill … --start 早于视野会直接拒绝。磁盘与耗时见 runbook — 日内数据


[job.init.phases]

说明
namesinit 阶段顺序列表

默认:

names = [
  "phase1_reference",
  "phase2a_corporate_actions",
  "phase2c_daily_bars_backfill",
  "phase3_index_and_status",
  "phase4_finalize",
]

阶段 → step 映射见 orchestrator/init_phases.py


[on_demand]

说明
enabledOnDemandService 开关
datasets按需抓取的数据集名列表。默认仅 stock_newsresearch_reportsannouncement_body / financial_reports 尚未实现

缓存路径:meta/on_demand/{dataset}/{symbol}.json。通过 cne query --dataset X --symbol Y 访问。失败或未实现的结果不会写入缓存。


[duckdb]

默认说明
path{data.root}/duckdb/cnequity.duckdb支持 {data.root} 占位符
memory_limit2GBDuckDB 内存上限
threads4查询线程数

环境变量(仅 scripts/*.sh

下列变量由 运维脚本 读取;cne CLI 不读(配置路径仍用 --config 或默认 configs/cnequity.toml)。

变量默认作用
CNE_CONFIGconfigs/cnequity.toml脚本传入 cne --config 的路径
CNE_LOG_DIR{data.root}/logs日志目录
CNE_GROUPS全部调度组(不含需显式开启的 intraday覆盖 pipeline 要跑的组
CNE_NOTIFY10 关闭 macOS 通知
CNE_BACKUP_DIR湖内 backups元数据备份目录
CNE_BACKUP_RETENTION_DAYS14备份保留天数

配置与代码关系

cnequity.toml
    → load_config() → Config dataclass
    → validate_config() → 引用 step/group 合法性
    → JobEngine(cfg) / load(..., config=cfg)

Config 还提供:staging_rootcurated_rootderived_rootmeta_rootmanifest_pathrate_limit(source)