把策略用到的所有数据字段做一次完整梳理:每个字段是什么、从哪来、在策略里怎么用。这份清单也为将来如果换数据接口做准备。
策略总表 strategy_data.csv 共 14 个字段,按用途分为五类:
| 分类 | 字段 | 数量 |
|---|---|---|
| 行情数据 | trade_date, open, high, low, close, volume, amount | 7 个 |
| 均线系统 | ma_5, ma_10, ma_20, ma_30 | 4 个 |
| 市场情绪 | breadth | 1 个 |
| 资金热度 | heat_z | 1 个 |
| 流动性 | etf_turnover | 1 个 |
数据来源:行情 + 均线 + 热度来自中证500指数(000905.SH),无需复权;广度来自成分股个股数据;换手率来自 510500 ETF。
来源:Tushare index_daily 接口,代码 000905.SH(中证500指数)
指数数据天然为全收益口径,不需要复权,不需要处理停牌填充。这比之前用 ETF 数据(需要后复权 + 停牌处理)简单很多。
| 字段 | 含义 | 在策略中怎么用 | 重要性 |
|---|---|---|---|
| trade_date | 交易日期 | 全表主键,所有数据按日期对齐 | 必须 |
| close | 收盘点位 | 计算均线、判断趋势方向、计算收益率、触发”首阴”信号 | 必须 |
| high | 最高点位 | 记录入场最高价(entry_high),用于 5 日不创新高止损 | 必须 |
| open | 开盘点位 | T+1 执行:买卖信号次日以开盘价执行 | 必须 |
| amount | 成交额 | 计算 heat_z(资金热度 Z-Score) | 必须 |
| volume | 成交量 | 辅助参考,策略核心逻辑不直接使用 | 辅助 |
| low | 最低点位 | K 线绘图用,策略核心逻辑不直接使用 | 辅助 |
全部基于中证500指数的 close 滚动计算:close.rolling(n).mean()
| 字段 | 含义 | 在策略中怎么用 | 重要性 |
|---|---|---|---|
| ma_5 | 5 日均线(MA_Support) | FirstNeg 入场条件:close > ma_5(支撑有效) | 必须 |
| ma_10 | 10 日均线(MA_Trend) | FirstNeg 入场条件:close > ma_10(趋势向上) | 必须 |
| ma_20 | 20 日均线 | 中期趋势参考,策略不直接使用 | 辅助 |
| ma_30 | 30 日均线(MA_Filter) | FirstNeg 入场条件 + 退出前提(多空分界线) | 必须 |
stocks_data/ 文件夹中的个股后复权数据 + csi500_components_schedule.csv 成分股名单,在 build_strategy_data.py 中计算(当日指数 amount - 过去20日 amount 均值) / 过去20日 amount 标准差ETF 成交量(vol) / 前一交易日基金份额(fd_share_T-1)fund_daily 接口获取成交量 + fund_share 接口获取基金份额按重要性排序,如果某个字段缺失会导致什么后果:
| 字段 | 缺失后果 | 重要性 |
|---|---|---|
| trade_date | 无法对齐数据,程序直接报错 | 必须 |
| close | 无法计算信号和收益,策略完全失效 | 必须 |
| high | 无法执行 5 日不创新高止损 | 必须 |
| open | 无法计算 T+1 执行收益 | 必须 |
| amount | 无法计算 heat_z,通用卖出条件失效 | 必须 |
| ma_30 | 趋势过滤和 FirstNeg 退出判断缺失 | 必须 |
| breadth | 无法判断冰点/过热,Composite 模式失效 | 必须 |
| etf_turnover | 无法确认首阴买点,FirstNeg 模式不开仓 | 必须 |
| ma_5, ma_10 | FirstNeg 入场的支撑/趋势判断缺失 | 必须 |
| volume, low, ma_20 | 辅助字段,不影响策略核心逻辑 | 辅助 |
build_strategy_data.py 需要从 Tushare 获取三类数据:
| 项目 | 值 |
|---|---|
| 接口 | pro.index_daily() |
| 代码 | 000905.SH(中证500指数) |
| 获取字段 | trade_date, open, high, low, close, vol, amount |
| 优势 | 指数数据无需复权,直接使用 |
不需要额外调 API——基于本地已有的 stocks_data/(1074 只个股)+ csi500_components_schedule.csv(成分股时间表),在脚本里计算每天的广度。
| 项目 | 值 |
|---|---|
| 接口 | pro.fund_daily() + pro.fund_share() |
| 代码 | 510500.SH(南方中证500ETF) |
| 计算 | etf_turnover = vol / fd_share.shift(1) |
| 注意 | fd_share 先前向填充(ffill),再 shift(1) 取 T-1 值 |
四步合一:指数日线 → 计算均线和热度 → 计算广度 → 计算换手率 → 合并输出 strategy_data.csv(14 列宽表)。