Skip to content

josephliver623/Factor_KLM

Repository files navigation

基于卡尔曼滤波的板块轮动策略验证框架

项目概述

本项目基于您的卡尔曼滤波权重数据,构建了一个完整的板块轮动策略验证框架。该框架包含板块择时因子、个股选择因子、策略回测验证和可视化分析等功能模块。

核心功能

1. 板块择时策略

  • 触底反弹因子:识别权重触底并开始反弹的板块
  • 趋势持续因子:捕捉权重连续几天上涨/下跌的趋势
  • 权重变化百分比因子:计算不同周期的权重变化幅度
  • 相对强弱因子:评估板块相对于整体市场的表现
  • 动量因子:基于均线系统的动量指标

2. 个股选择策略

  • 均线排列因子:MA5 ≥ MA10 ≥ MA20 ≥ MA60 的多头排列
  • 均线发散度控制:控制发散度在合理范围内(2%-8%)
  • 市值因子:优先选择50-500亿中等市值股票
  • 技术指标:RSI、布林带、成交量等技术分析
  • 基本面筛选:ROE、PE等财务指标

3. 策略验证框架

  • 回测系统:支持自定义时间段和调仓频率
  • 绩效评估:收益率、夏普比率、最大回撤等指标
  • 风险管理:波动率控制和回撤管理

4. 可视化分析

  • 权重热力图:直观展示各板块权重变化
  • 因子分析图:多维度因子表现分析
  • 信号仪表板:实时交易信号展示
  • 交互式Dashboard:基于Plotly的动态分析

文件结构

Factor_klm_cursor/
├── w_2025-07-28.json              # 卡尔曼滤波权重数据
├── sector_rotation_strategy.py    # 主策略框架
├── joinquant_stock_selection.py   # JoinQuant个股选择模块
├── visualization_tools.py         # 可视化分析工具
├── README.md                       # 使用文档
└── example_usage.py               # 完整使用示例

快速开始

1. 环境准备

# 安装必要的Python包
pip install pandas numpy matplotlib seaborn plotly openpyxl

2. 基本使用

from sector_rotation_strategy import SectorRotationStrategy
from visualization_tools import StrategyVisualizer

# 初始化策略
strategy = SectorRotationStrategy('w_2025-07-28.json')

# 加载数据并构建因子
weights_df = strategy.load_kalman_weights()
factors = strategy.build_sector_timing_factors()

# 获取最新交易信号
latest_date = weights_df.index[-1]
signals = strategy.get_sector_signals(latest_date, top_n=5)
print(f"推荐板块: {signals['selected_sectors']}")

# 可视化分析
visualizer = StrategyVisualizer(strategy)
visualizer.plot_weights_heatmap()
visualizer.plot_sector_signals_dashboard(latest_date)

3. 在JoinQuant平台使用

# 在JoinQuant研究环境中运行
from joinquant_stock_selection import JQStockSelector, run_stock_selection_example

# 执行个股选择
selected_stocks = run_stock_selection_example()

详细使用指南

板块择时因子详解

1. 触底反弹因子

# 参数说明
lookback_days = 10    # 回看天数
bottom_pct = 20       # 底部百分位数阈值

# 信号逻辑
# 当前权重 <= 历史20%分位数 且 近期涨幅 > 1%

2. 趋势持续因子

# 检测连续3天以上的单边趋势
min_days = 3

# 连续上涨得分为正,连续下跌得分为负

3. 权重变化因子

# 计算1日、3日、5日、10日权重变化率
periods = [1, 3, 5, 10]

# 用于识别短期和中期趋势变化

个股选择因子详解

1. 均线排列得分(40%权重)

# 完美多头排列:当前价格 > MA5 > MA10 > MA20 > MA60
bullish_alignment = (current_price > ma5 > ma10 > ma20 > ma60)

# 发散度控制:2%-8%为理想范围
ideal_divergence = 0.02 <= ma_divergence <= 0.08

2. 基本面因子(30%权重)

# 市值偏好:50-500亿中等市值
preferred_market_cap = 50 <= market_cap <= 500

# 估值合理:PE在10-30之间
reasonable_pe = 10 <= pe_ratio <= 30

# 盈利能力:ROE > 15%
high_roe = roe > 0.15

3. 技术分析因子(30%权重)

# RSI避免极端:30-70区间
normal_rsi = 30 <= rsi <= 70

# 适度放量:1.2-3倍平均成交量
volume_expansion = 1.2 <= volume_ratio <= 3.0

# 正动量:20日动量 > 0
positive_momentum = momentum_20d > 0

策略验证示例

完整回测流程

# 1. 初始化和数据加载
strategy = SectorRotationStrategy('w_2025-07-28.json')
strategy.load_kalman_weights()
strategy.build_sector_timing_factors()

# 2. 策略回测
backtest_results = strategy.backtest_strategy(
    start_date='2025-01-01',
    end_date='2025-05-23',
    rebalance_freq='5D'  # 每5天调仓
)

# 3. 绩效分析
performance = strategy.analyze_performance(backtest_results)

# 输出示例:
# === 策略表现分析 ===
# 总收益率: 8.45%
# 年化收益率: 15.23%
# 年化波动率: 12.67%
# 夏普比率: 1.20
# 最大回撤: -3.21%
# 调仓次数: 25

# 4. 可视化分析
visualizer = StrategyVisualizer(strategy)
visualizer.plot_backtest_performance(backtest_results)
visualizer.create_interactive_dashboard()

实时信号生成

# 获取最新日期的交易信号
latest_date = strategy.weights_df.index[-1]
strategy.generate_signals_report(latest_date)

# 输出示例:
# === 2025-05-23 板块信号报告 ===
# 推荐板块: ['电子', '汽车', '医药生物', '计算机', '电力设备']
# 电子: 评分=0.867, 当前权重=0.124
# 汽车: 评分=0.743, 当前权重=0.058
# 医药生物: 评分=0.692, 当前权重=0.081

可视化功能

1. 权重热力图

展示所有板块在时间序列上的权重变化模式

visualizer.plot_weights_heatmap(start_date='2025-01-01')

2. 因子分析图

深入分析各个因子的表现和相关性

visualizer.plot_factor_analysis('momentum')
visualizer.plot_factor_analysis('relative_strength')

3. 交互式仪表板

创建包含多个图表的交互式HTML仪表板

visualizer.create_interactive_dashboard('my_dashboard.html')

4. 导出Excel报告

将所有分析结果导出为Excel文件

visualizer.export_analysis_report(backtest_results, 'analysis_report.xlsx')

JoinQuant平台集成

研究环境使用

# 在JoinQuant研究环境中
from joinquant_stock_selection import JQStockSelector

# 初始化选股器
selector = JQStockSelector()

# 从推荐板块中选择个股
target_sectors = ['电子', '汽车', '医药生物']
selected_stocks = selector.select_stocks_from_sectors(
    sectors=target_sectors,
    date=datetime.now().date(),
    max_stocks_per_sector=5
)

# 生成详细报告
selector.generate_stock_report(selected_stocks)

交易策略实现

# 在JoinQuant交易环境中的策略模板
def initialize(context):
    # 初始化策略参数
    g.stock_selector = JQStockSelector()
    g.rebalance_period = 5  # 5天调仓一次
    g.max_stocks = 15

def before_trading_start(context):
    # 每日开盘前执行
    if g.day_count % g.rebalance_period == 0:
        # 获取板块信号(需要集成您的权重数据)
        target_sectors = get_sector_signals()  # 自定义函数
        
        # 选择个股
        selected_stocks = g.stock_selector.select_stocks_from_sectors(
            sectors=target_sectors,
            date=context.current_dt.date(),
            max_stocks_per_sector=5
        )
        
        # 更新股票池
        update_stock_pool(selected_stocks)

def handle_data(context, data):
    # 交易逻辑
    pass

参数调优建议

板块择时参数

  • 调仓频率:建议5-10天,平衡交易成本和信号敏感度
  • 选择板块数:3-5个板块,确保足够分散
  • 因子权重:触底反弹30%,动量20%,相对强弱20%,趋势持续20%,权重变化10%

个股选择参数

  • 每板块股票数:3-5只,避免过度集中
  • 市值范围:50-500亿,兼顾流动性和成长性
  • 均线发散度:2%-8%,避免过度或不足发散

风险控制参数

  • 单股票权重:不超过5%
  • 单板块权重:不超过30%
  • 止损阈值:单股票-10%,组合-5%

注意事项

  1. 数据质量:确保卡尔曼滤波权重数据的准确性和及时性
  2. 交易成本:考虑频繁调仓的交易成本影响
  3. 市场环境:不同市场环境下因子有效性可能发生变化
  4. 参数稳定性:定期检视和调整参数设置
  5. 风险管理:严格执行止损和仓位控制规则

扩展功能

1. 机器学习增强

可以基于历史数据训练模型,自动优化因子权重

2. 实时数据接入

接入实时行情数据,实现intraday信号更新

3. 多因子模型

扩展更多技术和基本面因子,提高选股精度

4. 风险模型

集成更完善的风险模型和组合优化算法

技术支持

如有问题或需要定制化开发,请参考以下资源:

  • JoinQuant API文档:https://www.joinquant.com/help/api/
  • 策略开发指南:查看example_usage.py中的详细示例
  • 因子工程:参考sector_rotation_strategy.py中的因子构建方法

免责声明:本框架仅供学习和研究使用,投资有风险,使用本策略进行实际交易时请谨慎评估风险。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages