使用data.json配置系统内的数据设置

data.json 做什么?

data.json文件是配置所有NTQ 的数据文件,在核心模块内和用户空间内各有一个,它们的作用个不相同:

  • 系统默认的文件是为系统运行的时候提供默认值的配置文件

  • 用户空间内的文件是用来复写系统默认配置的文件,是可选的。你在用户空间内配置的data.json里的与系统配置位置相同的字段值会替换系统默认的字段,从而让您可以覆盖某些系统配置。

以下是两个data.json的具体位置,加载时会自动合并并执行:

文件

角色

路径

默认配置

框架内置,随版本更新

core/default_config/data.json

用户覆写

你自定义,只写要改的字段

userspace/system/config/data.json

你不需要复制整个默认文件。在 userspace/system/config/data.json 里只写你想修改的字段,NTQ 会自动和默认配置合并。

如果 userspace/system/config/data.json 不存在,NTQ 完全使用默认配置,不影响任何功能。

常用字段说明

default_market_profile_key

默认市场 profile。当前只支持 A 股市场,一般不需要改。

{
  "default_market_profile_key": "china_a_stock"
}

default_start_date

回测和扫描的默认起始日期。格式 YYYYMMDD,也接受带横线的写法(如 "2008-01-01"),NTQ 内部会自动规范化。默认值 "20080101"

{
  "default_start_date": "20100101"
}

as_of_latest_completed_trading_date

系统的 "as-of" 权威日期。设为 null 表示自动取最近一个已完成的交易日。如果你想让系统固定在某个日期(比如做历史快照分析),填具体日期。

默认值 null。设为 null 时系统自动获取最近交易日;设为非空但格式非法的值会报错。

{
  "as_of_latest_completed_trading_date": "20240601"
}

use_sample_stock_list

开发调试用的样本股票池规模。设为 null 表示用全市场;设为正整数 N 表示使用框架内置的分层抽样池(stratified_N.csv),只跑 N 只股票,适合快速验证。

默认值 null
{
  "use_sample_stock_list": 100
}

非正整数、字符串、布尔值会报错。日常使用设为 null(全市场)即可。


retention

中间值和缓存结果的保留上限,按版本数控制。这是一个嵌套对象,支持深度合并——你只需要写要改的子字段。

子字段默认值说明
simulation_results_max_versions10回测结果目录 simulations/{vid}/ 保留多少个版本。三步(enum/price/portfolio)共享一个版本号。标记为 pinned 的版本跳过自动清理
scan_results_max_versions10扫描结果日期目录保留多少个
workbench_db_max_versions50遗留字段,工作台 DB 快照已退役,不再用于清理
{
  "retention": {
    "simulation_results_max_versions": 20,
    "scan_results_max_versions": 5
  }
}

上面的配置只改了两个子字段,workbench_db_max_versions 保留默认值 50。


decimal_places

数值显示精度。嵌套对象,支持深度合并。也兼容旧版直接写整数的格式("decimal_places": 2 会被自动转换成 {"default": 2})。

子字段默认值说明
default2默认小数位数
adj_factor_event.factor_places4复权因子的精度
adj_factor_event.price_places3复权事件中价格的精度
adj_factor_event.diff_places4复权事件中差值的精度
{
  "decimal_places": {
    "default": 3
  }
}

上面的配置只改了默认小数位数,adj_factor_event 下的子字段全部保留默认值。


benchmark_stock_index_list

基准股票指数列表。用于回测报告中的基准对比。数组类型,浅层覆盖——写了就完全替换默认列表,不会合并。

默认包含 5 个指数:上证指数、沪深300、科创50、深证成指、创业板指。

每个指数对象的结构:

{
  "id": "000300.SH",
  "name": "沪深300",
  "description": "沪深300指数"
}

如果你想只用沪深300做基准:

{
  "benchmark_stock_index_list": [
    {
      "id": "000300.SH",
      "name": "沪深300",
      "description": "沪深300指数,反映沪深两市大盘蓝筹股整体表现"
    }
  ]
}

如果你想加一个自定义指数:

{
  "benchmark_stock_index_list": [
    {"id": "000001.SH", "name": "上证指数", "description": "上证综合指数"},
    {"id": "000300.SH", "name": "沪深300", "description": "沪深300指数"},
    {"id": "000688.SH", "name": "科创50", "description": "上证科创板50成份指数"},
    {"id": "399001.SZ", "name": "深证成指", "description": "深证成份指数"},
    {"id": "399006.SZ", "name": "创业板指", "description": "创业板指数"},
    {"id": "000905.SH", "name": "中证500", "description": "中证500指数,反映中小盘股整体表现"}
  ]
}

注意:因为 benchmark_stock_index_list 是浅层覆盖,写了就完全替换默认列表,不是追加。如果你想保留默认的 5 个再加新的,需要把默认的 5 个也写进去。

完整示例

以下是一个覆写了多个字段的完整 data.json 示例:

{
  "default_start_date": "20100101",
  "as_of_latest_completed_trading_date": null,
  "use_sample_stock_list": null,
  "retention": {
    "simulation_results_max_versions": 20,
    "scan_results_max_versions": 5
  },
  "decimal_places": {
    "default": 3
  },
  "benchmark_stock_index_list": [
    {"id": "000300.SH", "name": "沪深300", "description": "沪深300指数"}
  ]
}

这个配置的效果:

  • 回测起始日期改为 2010 年
  • as-of 日期自动获取最近交易日
  • 全市场模式(不使用样本池)
  • 回测结果保留 20 个版本,扫描结果保留 5 个
  • 默认小数位数改为 3 位
  • 基准指数只保留沪深300

最小示例

只改一个字段的写法——这是最常见的用法:

{
  "retention": {
    "simulation_results_max_versions": 30
  }
}

只写你想改的,其余全部走默认值。