基于HMM隐马尔可夫模型的市场状态识别系统
自动识别市场所处的三种状态:
pip install numpy pandas scipy scikit-learn hmmlearn
或使用:
pip install -r requirements.txt
cd /root/.openclaw/workspace/market-regime-identifier
python3 train_and_validate.py
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 - 特征统计(生成后)OpenClaw - 2026-03-06