# 市场环境识别器 (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
