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_versions | 10 | 回测结果目录 simulations/{vid}/ 保留多少个版本。三步(enum/price/portfolio)共享一个版本号。标记为 pinned 的版本跳过自动清理 |
scan_results_max_versions | 10 | 扫描结果日期目录保留多少个 |
workbench_db_max_versions | 50 | 遗留字段,工作台 DB 快照已退役,不再用于清理 |
{
"retention": {
"simulation_results_max_versions": 20,
"scan_results_max_versions": 5
}
}上面的配置只改了两个子字段,workbench_db_max_versions 保留默认值 50。
decimal_places
数值显示精度。嵌套对象,支持深度合并。也兼容旧版直接写整数的格式("decimal_places": 2 会被自动转换成 {"default": 2})。
| 子字段 | 默认值 | 说明 |
default | 2 | 默认小数位数 |
adj_factor_event.factor_places | 4 | 复权因子的精度 |
adj_factor_event.price_places | 3 | 复权事件中价格的精度 |
adj_factor_event.diff_places | 4 | 复权事件中差值的精度 |
{
"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
}
}
只写你想改的,其余全部走默认值。