slug: ml-alpha displayName: 機器學習選股模型 version: 1.0.0 summary: 基於XGBoost/LightGBM的A股多因子選股預測系統,實現15+特徵工程、滾動視窗訓練、分組回測、IC評估,支援時間序列交叉驗證和特徵重要性分析。 tags: - finance - machine-learning - stock-selection - xgboost - quantitative-finance license: MIT
小蔥技能7w4.net有更新,你可以訪問看下。
ML-Alpha 是一個基於機器學習的A股多因子選股預測系統。系統使用XGBoost、LightGBM和Ridge迴歸三種模型,通過15+因子特徵工程和滾動視窗訓練,預測股票未來收益率並進行分組回測驗證。
所有資料均來自 akshare 真實介面,不使用任何隨機或偽造資料。
構建20個選股因子,覆蓋5大類別: | 類別 | 因子 | 數量 | |------|------|------| | 技術特徵 | MA5/MA20/MA60比率、RSI、MACD直方圖、布林帶位置 | 6 | | 量價特徵 | 量比、換手率變化、成交額/量比率 | 3 | | 基本面特徵 | PE分位數、PB分位數、ROE、毛利率 | 4 | | 動量特徵 | 1月/3月/6月動量、5日反轉 | 4 | | 波動率特徵 | 20日波動率、偏度、峰度 | 3 |
所有特徵計算後進行截面z-score標準化。
cd ml-alpha
pip install -r requirements.txt
# 使用指定股票池
python predict.py --tickers 600519,000858,601318 --start 20220101 --end 20250101
# 使用滬深300成分股,XGBoost模型,5日預測週期
python predict.py --index hs300 --model xgboost --horizon 5
# 使用中證500成分股,訓練所有模型對比
python predict.py --index zz500 --model all --horizon 10
# 自定義訓練視窗
python predict.py --tickers 600519,000858 --model lightgbm --horizon 20 --train-months 18
| 引數 | 說明 | 預設值 |
|---|---|---|
| --tickers | 股票程式碼列表(逗號分隔) | - |
| --index | 指數簡稱(hs300/zz500/sz50/zz1000) | - |
| --start | 開始日期 YYYYMMDD | 20200101 |
| --end | 結束日期 YYYYMMDD | 20250101 |
| --model | 模型型別(xgboost/lightgbm/ridge/all) | xgboost |
| --horizon | 預測週期(1/5/10/20日) | 5 |
| --train-months | 訓練視窗月數 | 12 |
| --n-groups | 分組數量 | 5 |
| --output-dir | 輸出目錄 | ./output |
| --save-models | 儲存模型 | False |
執行完成後,在 output 目錄下生成:
output/
├── report_xgboost.html # HTML評估報告(含圖表)
├── predictions_xgboost.csv # 預測結果CSV
├── report_lightgbm.html # LightGBM報告(--model all時)
├── predictions_lightgbm.csv
├── report_ridge.html # Ridge報告
├── predictions_ridge.csv
└── models/ # 模型檔案(--save-models時)
└── xgboost_latest.pkl
┌──── 配置資訊 ────────────────────────────────────┐
│ 股票池: 指數 hs300 │
│ 日期範圍: 20220101 ~ 20250101 │
│ 模型: xgboost │
│ 預測週期: 5 天 │
│ 訓練視窗: 12 個月 │
└────────────────────────────────────────────────────┘
評估結果摘要:
平均IC: 0.0342
IC資訊比率: 0.4521
IC勝率: 58.3%
多空年化收益: 12.5%
夏普比率: 1.23
最大回撤: 8.7%
平均換手率: 35.2%
A: akshare需要逐只股票請求歷史資料,大股票池(如滬深300的300只股票)需要較長時間。建議: - 使用較少的股票(--tickers 指定少量股票) - 縮短日期範圍 - 每隻股票請求間隔0.1秒避免被限流
A: 通常IC(Spearman秩相關係數)的評判標準: - IC > 0.05: 優秀,具有較強預測力 - 0.03 < IC < 0.05: 良好,有一定預測力 - 0.01 < IC < 0.03: 一般,預測力較弱 - IC < 0.01: 模型預測力不足
IC資訊比率(ICIR = mean(IC)/std(IC))> 0.5 通常被認為是可以接受的。
A: 模型在每個調倉日(月末),使用過去N個月的資料訓練,然後預測下個月的收益。這模擬了真實的投資決策流程,避免了使用未來資料(look-ahead bias)。例如 train_months=12 表示用過去12個月的資料訓練,預測下個月。
A: 預測週期取決於投資策略的持倉時間: - horizon=1: 日頻策略,適合短線交易 - horizon=5: 周頻策略,適合波段交易 - horizon=10: 兩週策略,適合中短期持倉 - horizon=20: 月頻策略,適合中長期持倉 較短的預測週期換手率較高但可能捕捉更多短期訊號,較長的週期換手率低但需要更長的資料驗證。
A: ML模型的預測能力在不同市場環境下會有變化。通常在趨勢明確的市場中表現較好,在震盪市或急轉市場中可能失效。建議關注滾動IC曲線,當IC持續為負時,應考慮暫停使用模型或調整策略。回測結果僅供參考,不保證未來收益。
A: 可能的原因包括:股票已退市、停牌時間過長、akshare介面暫時不可用、網路問題等。系統會跳過失敗的股票並繼續處理其他股票,不影響整體流程。
predict.py (CLI)
│
├── data.py ────── akshare獲取資料 → 面板資料
│ ├── 日線行情(OHLCV)
│ ├── 基本面資料(PE/PB)
│ └── 資料清洗(去極值/標準化/前向填充)
│
├── features.py ── 構建20個因子 → 特徵面板
│ ├── 技術因子(MA/RSI/MACD/BOLL)
│ ├── 量價因子(量比/換手率/資金流向)
│ ├── 基本面因子(PE/PB分位數/ROE/毛利率)
│ ├── 動量因子(1m/3m/6m動量/反轉)
│ └── 波動率因子(std/skew/kurt)
│
├── models.py ──── 滾動視窗訓練 → 預測結果
│ ├── XGBoost迴歸
│ ├── LightGBM迴歸
│ ├── Ridge迴歸
│ └── TimeSeriesSplit交叉驗證
│
├── backtest.py ── 分組回測 → 組合收益
│ ├── 5組分組
│ ├── 多空對沖
│ └── 換手率計算
│
├── evaluation.py ─ 評估指標 → 評估結果
│ ├── IC/Spearman相關
│ ├── 分組單調性
│ ├── Sharpe/MaxDD
│ └── 特徵重要性
│
└── report.py ──── 圖表生成 → HTML報告
├── 累積收益曲線
├── 熱力圖
├── 特徵重要性圖
├── 滾動IC曲線
└── 散點圖
這個Skill質量較高,是一套完整的機器學習選股工具,特徵豐富、模型多樣、評估全面,文件說明詳細。主要優點是功能完整、使用方便,圖表報告直觀。主要不足是回測沒有考慮手續費等交易成本,實際收益可能不如回測結果好看;獲取資料較慢,容易受網路影響。總體而言,這是一個專業度較高的量化選股工具,適合有量化基礎的開發者使用。