作为严谨的量化研究员。将每个策略想法视为可检验的假设,在庆祝绩效之前要求经济或行为理论基础,并在优化之前默认进行稳健性检验。
references/validation-and-overfitting-defense.md 中的验证规则。references/output-contract.md 中的输出结构。references/integrated-framework.md 了解完整的研究堆栈。references/validation-and-overfitting-defense.md 了解稳健性和反过拟合规则。references/data-hygiene-risk-and-attribution.md 了解数据控制、风险建模和归因。references/output-contract.md 了解必需的输出行为。[实际]、[推断] 或 [假设]。[实际]。[推断]。[假设]。每个信号应包含以下要素:
信号名称: [名称]
类型: [因子/择时/横截面选择]
输入数据: [所需数据字段]
计算方法: [公式/逻辑]
参数范围: [可优化的参数及范围]
经济逻辑: [为什么这个信号有效]
预期方向: [正向/反向/非线性]
信号名称: 12个月动量(剔除最近1个月)
类型: 横截面选择因子
输入数据: 日收盘价
计算方法:
- 计算过去12个月累计收益率
- 剔除最近1个月收益(避免短期反转)
- 对全市场股票排序,分10组
参数范围:
- 长期窗口: 9-12个月
- 短期剔除: 0-1个月
经济逻辑: 投资者对信息反应不足,赢家持续跑赢
预期方向: 正向(高动量股票未来收益更高)
A股特化: 考虑涨跌停导致的收益截断
信号名称: PB-ROE偏离度
类型: 横截面选择因子
输入数据: 市净率(PB)、净资产收益率(ROE)
计算方法:
- 按行业分组回归: PB = α + β × ROE + ε
- 计算每只股票的残差 ε(实际PB vs 预期PB)
- 残差为负表示低估,残差为正表示高估
参数范围:
- 行业分类: 申万一级/二级行业
- 计算周期: 季度财务数据
经济逻辑: 高盈利公司应享有高估值,偏离度反映定价错误
预期方向: 反向(低估股票未来收益更高)
A股特化: 金融/地产行业PB-ROE关系特殊,需单独处理
信号名称: 双均线择时
类型: 择时信号
输入数据: 日收盘价
计算方法:
- 短期均线(MA20)上穿长期均线(MA60): 买入信号
- 短期均线(MA20)下穿长期均线(MA60): 卖出信号
- 可加入成交量确认(放量突破更可靠)
参数范围:
- 短期窗口: 5-20日
- 长期窗口: 60-120日
经济逻辑: 趋势延续,顺势而为
预期方向: 正向(跟随趋势)
A股特化: 震荡市假信号多,需加入波动率过滤或状态判断
信号名称: 对数流通市值
类型: 横截面选择因子
输入数据: 流通市值
计算方法:
- 取流通市值的自然对数
- 对全市场股票排序,分10组
- 市值最小的组合为多头,最大的为空头
参数范围:
- 市值类型: 流通市值/总市值
- 分组数量: 5-10组
经济逻辑: 小盘股流动性溢价、壳价值、信息不对称
预期方向: 反向(小市值股票未来收益更高)
A股特化:
- 注意ST/退市风险
- 流动性限制:剔除日均成交额低于1000万的股票
- 2017年后小市值因子效果减弱,需结合质量因子
# 分析单个信号
python scripts/signal_analysis.py --signal momentum --universe 沪深300 --start 2020-01-01 --end 2024-12-31
# 回测策略
python scripts/backtest.py --strategy momentum_strategy.yaml --config backtest_config.yaml
# 生成研究报告
python scripts/generate_report.py --output report.md
# scripts/signal_analysis.py
"""
信号分析工具
- 计算IC(信息系数)
- 绘制分组收益图
- 分析换手率
- 检测过拟合
"""
import pandas as pd
import numpy as np
class SignalAnalyzer:
def __init__(self, signal_data, returns_data):
self.signal = signal_data
self.returns = returns_data
def calculate_ic(self, lag=1):
"""计算信息系数"""
# 信号与下期收益的相关系数
pass
def quantile_returns(self, n_quantiles=10):
"""计算分组收益"""
# 按信号值分组,计算每组收益
pass
def turnover_analysis(self):
"""换手率分析"""
# 计算信号稳定性、换手率
pass
# momentum_strategy.yaml
signal:
name: "12个月动量"
type: "momentum"
params:
lookback: 252 # 12个月交易日
skip: 21 # 剔除最近1个月
universe:
index: "沪深300"
filters:
- "剔除ST股票"
- "剔除上市不满1年"
- "剔除停牌超过20天"
backtest:
start_date: "2020-01-01"
end_date: "2024-12-31"
rebalance_freq: "monthly"
holding_period: 20 # 持有20天
risk_control:
max_position: 0.1 # 单票最大10%
sector_neutral: true # 行业中性的
共 1 个版本