第一版流程

This commit is contained in:
2025-11-08 13:39:02 +08:00
parent dcfe2d84d5
commit a66e42a8ae
11 changed files with 1648 additions and 0 deletions

110
example.py Normal file
View File

@@ -0,0 +1,110 @@
"""
使用示例:时间序列因子挖掘流程
"""
from pipeline import FactorPipeline
from factors import FactorMiner, create_default_factors
# 方式1使用默认流程最简单
def example_simple():
"""简单示例"""
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', # 权重方法risk_parity, regression, equal
buy_threshold=0.8, # 买入阈值(标准差倍数)
sell_threshold=-0.8 # 卖出阈值(标准差倍数)
)
return results
# 方式2分步骤执行更灵活
def example_step_by_step():
"""分步骤示例"""
pipeline = FactorPipeline(ret_horizon=1, ic_window=30)
# 步骤1加载和预处理数据
pipeline.load_and_preprocess("ETH_USDT-1h.feather")
# 步骤2因子挖掘可以使用自定义因子
custom_miner = create_default_factors()
# 可以在这里添加自定义因子
# custom_miner.register_rule_factor('CUSTOM', your_custom_function)
pipeline.mine_factors(custom_miner)
# 步骤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)
return {
'factors': pipeline.factors,
'score': pipeline.score,
'signals': signals,
'backtest': backtest_results
}
# 方式3自定义因子
def example_custom_factors():
"""自定义因子示例"""
from factors import RuleFactor
import pandas as pd
import numpy as np
# 定义自定义因子函数
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_DISTANCE', my_custom_factor)
# 使用自定义因子挖掘器
pipeline = FactorPipeline()
pipeline.load_and_preprocess("ETH_USDT-1h.feather")
pipeline.mine_factors(custom_miner=miner)
pipeline.validate_factors()
pipeline.combine_factors()
pipeline.backtest()
return pipeline
if __name__ == "__main__":
# 运行简单示例
print("运行简单示例...")
results = example_simple()
# 保存结果
if results['factors'] is not None:
results['factors'].to_csv("factors_output.csv")
print("\n因子数据已保存到 factors_output.csv")
if results['score'] is not None:
results['score'].to_csv("score_output.csv")
print("综合得分已保存到 score_output.csv")
if results['backtest'] is not None and 'equity' in results['backtest']:
results['backtest']['equity'].to_csv("equity_curve.csv")
print("权益曲线已保存到 equity_curve.csv")