4. 档案命名规范与目录结构
多板块轮动研究档案的归档难点,往往不在于“存不存得下”,而在于“半年后还能不能找得到、看得懂、对得上”。当研究覆盖多个板块(如新能源、半导体、消费、医药)、每个板块下又并行多种策略(趋势跟随、均值回归、事件驱动),如果命名随意、目录扁平,档案很快会退化成难以检索的文件堆。本节要解决的核心问题是:用一套可扩展的命名规则锁定“单个文件是什么”,用一套分层目录结构锁定“文件应该放在哪里”,两者配合,使档案在板块和策略数量增长时仍然有序。
一、命名规则:用固定字段表达可变信息
可扩展命名规则的实质,是把文件名拆成若干语义字段,用统一分隔符连接,并规定每个字段的取值格式。推荐采用“下划线连接字段、连字符连接复合词”的约定,字段顺序固定为:日期—板块—策略—对象类型—版本—备注。其中日期统一用 YYYYMMDD,避免不同系统排序错乱;板块与策略使用预先登记的短代码(如 NEV 表示新能源、SEMI 表示半导体、TREND 表示趋势跟随、MR 表示均值回归);对象类型用固定枚举值,如 DATA(原始数据)、SIG(信号)、BT(回测结果)、RPT(研究报告)、CFG(参数配置);版本用 v01、v02 递增;备注只允许简短英文或拼音缩写,禁止空格与中文标点。
例如,2024 年 3 月 15 日新能源板块趋势跟随策略的第二版回测结果,命名为:
20240315_NEV_TREND_BT_v02.csv
20240315_SEMI_MR_SIG_v01.parquet
20240315_CONS_EVENT_RPT_v03.md
20240315_MED_TREND_CFG_v01.yaml
这套规则的可扩展性体现在两点:新增板块或策略时,只需在代码登记表中追加短代码,字段结构不变;新增对象类型时,只需扩充枚举值,历史文件不受影响。需要特别强调的是,短代码必须集中登记、唯一且不复用,否则“同名不同义”会直接破坏检索。建议维护一张代码登记表,字段包括代码、全称、所属层级、启用日期、停用日期,停用代码不得再分配给新对象。
二、目录结构:三层主干加一层归档
目录组织要与命名规则形成互补:命名回答“是什么”,目录回答“归哪类”。推荐采用“板块—策略—对象类型”三层主干,再加一层按年度归档的冷区。顶层为板块目录,第二层为该板块下启用的策略,第三层按对象类型分目录存放,使同类档案天然聚集,便于批量处理和版本比对。
上图展示了目录主干与文件层的对应关系。需要说明的是,第三层的对象类型目录应保持固定枚举,不要因为临时需求随意新增;若确有新类型,先更新枚举登记表,再统一建目录,避免同一类档案散落在多个名称相近的目录中。年度归档层是可选但强烈建议的扩展:每年初把上一年度已结题板块的档案整体移入 _frozen/年份/,保留原有相对路径,使活跃区只保留当年与跨年未结题内容,检索范围更小、响应更快。
三、命名与目录的联动校验
规则设计完成后,必须建立联动校验,否则命名与目录会各自漂移。校验逻辑可以概括为三条:文件名中的板块代码必须与所在板块目录一致;策略代码必须与所在策略目录一致;对象类型必须与所在类型目录一致。这三条可以用一个简单脚本在归档提交时自动检查。以下为示例校验逻辑(Python 伪代码,仅示意判断关系):
import os, re
PATTERN = re.compile(r"^(\d{8})_([A-Z]+)_([A-Z]+)_(DATA|SIG|BT|RPT|CFG)_v(\d{2})\.(\w+)$")
def check(path):
name = os.path.basename(path)
m = PATTERN.match(name)
if not m:
return "命名不符合规则"
date, sector, strategy, obj, ver, ext = m.groups()
parts = path.replace("\\", "/").split("/")
if sector != parts[-4]: return "板块代码与目录不一致"
if strategy != parts[-3]: return "策略代码与目录不一致"
if obj != parts[-2]: return "对象类型与目录不一致"
return "通过"
这段校验的价值在于把“规范”变成可执行的约束。实际落地时,建议在归档入口设置一道检查:不通过的文件不允许进入主干目录,先放入 _inbox/ 待修正区。这样既保护了主干结构,也让问题文件有明确去处,而不是被随手塞进某个目录。
四、版本与备注字段的使用边界
版本字段 v01、v02 用于同一对象在同一基准日下的迭代,例如参数调整后重跑的回测结果。不同基准日应使用不同日期字段,而不是靠版本号区分,否则时间序列会被打乱。备注字段只用于区分同日期同版本下的并行产物,例如不同参数组的回测,可写 _p1、_p2,但必须在同目录的说明文件中登记参数含义。备注字段不应承载业务解释,解释性内容放入报告或元数据文件,避免文件名过长且语义混乱。
五、一份可直接套用的落地清单
为便于执行,可将本节方案整理为以下检查项,归档时逐条核对:
| 检查项 | 合格标准 | 不合格处理 |
|---|---|---|
| 日期字段 | 8 位数字,表示内容基准日 | 改为基准日,生成时间移入元数据 |
| 板块/策略代码 | 已在登记表中,且与目录一致 | 补登记或修正目录 |
| 对象类型 | 属于固定枚举 | 更新枚举表后统一建目录 |
| 版本号 | 两位数字递增,同基准日同对象唯一 | 重命名并检查是否覆盖 |
| 备注字段 | 简短、无空格、已在说明文件登记 | 精简或移入元数据 |
| 目录层级 | 板块—策略—对象类型三层完整 | 移入 _inbox/ 待修正 |
把命名规则、目录主干、联动校验和落地清单四件事固定下来,档案体系就具备了随板块与策略数量增长而平稳扩展的能力。后续新增板块时,只需登记代码、建立目录、套用同一套命名与校验,而不需要重新设计归档方案。