# 市场环境识别器 (Market Regime Identifier) 基于HMM隐马尔可夫模型的市场状态识别系统 ## 概述 自动识别市场所处的三种状态: - **震荡 (State 0)**:价格波动大但无明显方向 - **趋势 (State 1)**:价格持续单向运动 - **反转 (State 2)**:超买/超卖后的V型反转 ## 安装依赖 ```bash pip install numpy pandas scipy scikit-learn hmmlearn ``` 或使用: ```bash pip install -r requirements.txt ``` ## 使用方法 ### 1. 训练模型 ```bash cd /root/.openclaw/workspace/market-regime-identifier python3 train_and_validate.py ``` ### 2. 实时识别 ```python from market_regime_hmm import MarketRegimeHMM, StrategySelector, extract_features import pandas as pd import pickle # 加载模型 with open('hmm_model.pkl', 'rb') as f: hmm = pickle.load(f) # 准备数据 df = pd.read_csv('your_data.csv', index_col='date', parse_dates=True) features = extract_features(df) X = features[['ret_std_5', 'momentum_10', 'vol_ratio', 'volume_change', 'intraday_trend']] # 识别当前状态 current_regime = hmm.get_current_regime(X) print(f"当前状态: {current_regime['state_name']}") # 获取策略建议 strategy = StrategySelector.get_strategy(current_regime['state']) print(f"推荐策略: {strategy['name']}") print(f"仓位: {strategy['position_size']*100}%") ``` ## 特征说明 | 特征 | 描述 | 计算方式 | |------|------|----------| | ret_std_5 | 5日收益率标准差 | std(returns, 5) × √252 | | momentum_10 | 10日价格动量 | (close / close.shift(10) - 1) × 100 | | vol_ratio | 波动率比率 | vol(5) / vol(20) | | volume_change | 成交量变化率 | volume.pct_change() × 100 | | intraday_trend | 日内趋势强度 | (close - open) / (high - low) × 100 | ## 状态转移矩阵 ``` 震荡 趋势 反转 震荡 0.85 0.10 0.05 趋势 0.15 0.80 0.05 反转 0.20 0.10 0.70 ``` ## 策略切换规则 | 状态 | 策略 | 仓位 | 止损 | |------|------|------|------| | 震荡 | RSI均值回归 | 50% | 2N | | 趋势 | 海龟趋势跟踪 | 100% | 2N | | 反转 | 反向/观望 | 30% | 1N | ## 文件说明 - `market_regime_hmm.py` - 核心HMM模型实现 - `train_and_validate.py` - 训练与验证脚本 - `requirements.txt` - 依赖包列表 - `hmm_model.pkl` - 训练好的模型(生成后) - `feature_stats.pkl` - 特征统计(生成后) ## 验证标准 - 训练数据:2017-2023年 - 验证数据:2024-2025年 - 准确率要求:> 72% ## 作者 OpenClaw - 2026-03-06