时间序列因子挖掘框架
一套简洁、灵活的时间序列因子挖掘、检验、回测、信号生成框架。
特性
- 流程化设计:清晰的步骤划分,易于理解和扩展
- 灵活度高:支持自定义因子、权重方法、信号规则
- 代码简洁:避免过度设计,核心逻辑清晰
- 完整流程:从数据预处理到信号生成的完整链路
项目结构
factorhack/
├── data.py # 数据加载和预处理
├── factors.py # 因子挖掘(规则因子、GP因子)
├── validation.py # 因子检验(IC、分组回测、回归)
├── combination.py # 因子组合(多因子模型)
├── backtest.py # 回测引擎
├── signal.py # 信号生成
├── pipeline.py # 主流程
├── example.py # 使用示例
└── README.md # 说明文档
快速开始
1. 安装依赖
pip install pandas numpy scipy statsmodels
2. 基本使用
from pipeline import FactorPipeline
# 创建流程
pipeline = FactorPipeline(
ret_horizon=1, # 未来1期收益率
ic_window=30, # IC计算窗口
commission=0.001, # 手续费0.1%
slippage=0.0005 # 滑点0.05%
)
# 运行完整流程
results = pipeline.run_full_pipeline(
file_path="ETH_USDT-1h.feather",
min_ic=0.01, # 最小IC阈值
min_tstat=1.5, # 最小t统计量
weight_method='risk_parity',
buy_threshold=0.8,
sell_threshold=-0.8
)
3. 分步骤执行
pipeline = FactorPipeline()
# 步骤1:加载和预处理数据
pipeline.load_and_preprocess("ETH_USDT-1h.feather")
# 步骤2:因子挖掘
pipeline.mine_factors()
# 步骤3:因子检验
pipeline.validate_factors(min_ic=0.01, min_tstat=1.5)
# 步骤4:因子组合
pipeline.combine_factors(weight_method='risk_parity')
# 步骤5:生成信号
signals = pipeline.generate_signals(buy_threshold=0.8, sell_threshold=-0.8)
# 步骤6:回测
backtest_results = pipeline.backtest(signals)
核心模块说明
1. 数据模块 (data.py)
load_data(): 加载数据(支持feather和csv)compute_technical_indicators(): 计算技术指标preprocess_data(): 数据预处理(异常值、缺失值、标准化)compute_forward_returns(): 计算未来收益率
2. 因子模块 (factors.py)
BaseFactor: 因子基类RuleFactor: 规则因子FactorMiner: 因子挖掘器create_default_factors(): 创建默认因子集合
默认因子:
TREND: 趋势因子VOL: 波动率因子VOLP: 量价因子REV: 反转因子MOM: 动量因子RSI: RSI因子
3. 检验模块 (validation.py)
compute_ic(): 计算IC(信息系数)compute_rolling_ic(): 计算滚动ICgroup_backtest(): 分组回测factor_span_regression(): 因子跨度回归validate_factor(): 综合因子检验
4. 组合模块 (combination.py)
risk_parity_weights(): 风险平价权重regression_weights(): 回归系数权重equal_weights(): 等权重MultiFactorModel: 多因子模型
5. 回测模块 (backtest.py)
BacktestEngine: 回测引擎- 支持手续费、滑点
- 计算年化收益率、夏普比率、最大回撤、胜率等指标
6. 信号模块 (signal.py)
generate_signals(): 基于因子得分生成买卖信号- 支持滚动标准差阈值
- 避免频繁交易
自定义扩展
添加自定义因子
from factors import FactorMiner, RuleFactor
import pandas as pd
def my_custom_factor(data: pd.DataFrame) -> pd.Series:
"""自定义因子"""
return (data['close'] - data['ema8']) / data['ema8']
miner = create_default_factors()
miner.register_rule_factor('CUSTOM', my_custom_factor)
使用不同的权重方法
# 风险平价
pipeline.combine_factors(weight_method='risk_parity')
# 回归系数
pipeline.combine_factors(weight_method='regression')
# 等权重
pipeline.combine_factors(weight_method='equal')
自定义信号规则
from signal import generate_signals
signals = generate_signals(
score=pipeline.score,
buy_threshold=1.0, # 买入阈值
sell_threshold=-1.0, # 卖出阈值
window=30 # 滚动窗口
)
数据格式要求
输入数据应包含以下列:
open: 开盘价high: 最高价low: 最低价close: 收盘价volume: 成交量
可选时间列(用于设置索引):
datetime,time,timestamp,date
输出结果
流程完成后,可获得:
- 因子数据 (
factors): 所有有效因子的时间序列 - 综合得分 (
score): 多因子综合得分 - 检验结果 (
validation): 各因子的IC、t统计量等 - 回测结果 (
backtest): 权益曲线、回测指标、交易记录
注意事项
- 数据质量:确保输入数据无严重缺失和异常
- 参数调优:根据实际数据特点调整阈值和窗口参数
- 过拟合风险:避免在样本内过度优化参数
- 实盘差异:回测结果仅供参考,实盘可能存在滑点、延迟等问题
参考文档
TS因子挖掘构建流程.md: 详细的因子挖掘理论和方法deap_factor_mining.py: 基于遗传编程的因子挖掘示例
许可证
MIT License
Description
Languages
Jupyter Notebook
95.8%
Python
4.2%