机器学习量化实战:如何用 Python + LightGBM 预测多市场股票收益?基于 QuantDash 数据流的特征工程与分类模型构建(附 GitHub 源码)
2026/7/21 14:29:44 网站建设 项目流程

TL;DR(一句话摘要)

机器学习在阿尔法多因子策略中已成为标配。本文将带领大家利用业界公认在 tabular 数据上表现极佳的LightGBM算法,配合QuantDash 统一行情 API计算的技术特征,一步步构建一个对股票“未来3日是否能跑赢大盘”进行预测的二分类机器学习模型。


一、 机器学习量化模型的底层痛点

试图将 LightGBM, XGBoost 或神经网络应用到实际量化交易中的开发者,通常在第一步——“特征工程与标签制作”时,就被卡住了:

  1. 垃圾数据输入(Garbage in, Garbage out):机器学习模型对异常值和缺失值极其敏感。如果 K 线存在断点、跳空不复权或者多市场交易频率不一,模型训练出的参数将会被完全扭曲。

  2. 标签生成容易发生未来函数泄露(Look-ahead bias):很多初学者在计算 y 标签(如明日收益率)时,无意中使用了当天的收盘价或未来的财务数据作为输入特征,导致回测大赚,实盘血亏。

  3. 高维特征计算速度慢:多核 CPU 资源未被充分调动。

QuantDash API凭借其清洗干净、无死角复权的数据流,搭配Pandas/Numpy,能帮我们秒级生成无未来函数(Look-ahead bias-free)的“特征-标签”矩阵,无缝喂给 LightGBM。


二、 LightGBM 量化预测方案(Python + LightGBM + QuantDash)

1. 环境准备
pip install quantdash lightgbm scikit-learn pandas numpy
2. 核心代码实现

本示例使用公共测试 Token [1],获取日线 K 线,动态计算技术特征,并训练一个简单的二分类决策树模型。

import numpy as np import pandas as pd import lightgbm as lgb from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score, accuracy_score from quantdash import QuantDash # 1. 提取 QuantDash 干净的历史日 K qd = QuantDash() qd.set_token("demo_public_token") def build_ml_dataset(symbol: str): """ 拉取数据,清洗特征,并生成无未来函数泄漏的 Y 标签 """ df = qd.klines.get(symbol=symbol, period="1d", adjust="qfq", to_dataframe=True) # 2. 确保时间排序正确 df = df.sort_values("trade_date").reset_index(drop=True) # 3. 特征工程 (利用过去的 K 线特征作为 X 输入) # 特征 1: 5日与20日移动平均线比值 df["feature_ma_ratio"] = df["close"].rolling(5).mean() / df["close"].rolling(20).mean() # 特征 2: 过去3日动量 df["feature_momentum_3d"] = df["close"] / df["close"].shift(3) - 1.0 # 特征 3: 10日波动率 df["feature_volatility_10d"] = df["close"].pct_change().rolling(10).std() # 4. 标签制作 (Y 标签:预测未来 3 个交易日是否能够上涨超过 2%) # 注意 shift(-3) 才是未来数据,严防特征计算 X 阶段接触到 shift 负数! df["future_return_3d"] = df["close"].shift(-3) / df["close"] - 1.0 df["label"] = (df["future_return_3d"] > 0.02).astype(int) # 5. 剔除因 rolling 窗口和 shift 产生的 NaN 空值 df_clean = df.dropna().copy() return df_clean def train_lightgbm_model(df_model: pd.DataFrame): """ 划分数据集并训练 LightGBM 预测器 """ # 选取所有特征列 feature_cols = [c for c in df_model.columns if c.startswith("feature_")] X = df_model[feature_cols] y = df_model["label"] # 划分训练集与测试集 (时序分割,禁止随机 shuffle,防止时间序列数据泄露) split_idx = int(len(df_model) * 0.8) X_train, X_test = X.iloc[:split_idx], X.iloc[split_idx:] y_train, y_test = y.iloc[:split_idx], y.iloc[split_idx:] # 训练 LightGBM 模型 train_data = lgb.Dataset(X_train, label=y_train) test_data = lgb.Dataset(X_test, label=y_test, reference=train_data) params = { "objective": "binary", "metric": "auc", "boosting_type": "gbdt", "learning_rate": 0.05, "num_leaves": 15, "verbosity": -1, "seed": 42 } model = lgb.train( params, train_data, num_boost_round=100, valid_sets=[test_data] ) # 评估 y_pred_prob = model.predict(X_test) y_pred_class = (y_pred_prob > 0.5).astype(int) auc = roc_auc_score(y_test, y_pred_prob) acc = accuracy_score(y_test, y_pred_class) print(f"\n[+] 训练完成!测试集评估结果:") print(f"[*] ROC-AUC (分类区分度): {auc:.4f}") print(f"[*] Accuracy (准确率): {acc:.4f}") return model if __name__ == "__main__": try: symbol = "AAPL.US" # 美股苹果公司 print(f"[+] 正在拉取 {symbol} 数据流并构建多因子 ML 特征工程...") df_ml = build_ml_dataset(symbol) print(f"[+] 准备进行 LightGBM 二分类建模,有效样本总数: {len(df_ml)}") train_lightgbm_model(df_ml) except Exception as e: print(f"[-] 流程失败: {e}")
3. 运行评估输出样例
[+] 正在拉取 AAPL.US 数据流并构建多因子 ML 特征工程... [+] 准备进行 LightGBM 二分类建模,有效样本总数: 540 [1] valid_0's auc: 0.54125 [50] valid_0's auc: 0.59821 [100] valid_0's auc: 0.62415 [+] 训练完成!测试集评估结果: [*] ROC-AUC (分类区分度): 0.6242 [*] Accuracy (准确率): 0.6111

提示:AUC 达到 0.62 级别对于中短期股价趋势分类而言已属于极佳的统计优势信号。


三、 AI 编程助手专属提示词

如果你希望在自己的机器学习因子管道中集成 SHAP 归因分析,获取模型的特征重要性,请向 AI 输入:

Role: 量化数据科学家 Context: 我目前有一个基于 Python + LightGBM 的二分类股票涨跌预测模型。特征使用 "feature_" 前缀。 Task: 请帮我使用 `shap` 库,编写一个模型可解释性分析模块。 Requirements: 1. 输入已经训练好的 LightGBM 模型 `model` 和测试集 `X_test`。 2. 绘制特征重要性 Summary Plot,并输出每个特征平均绝对 SHAP 值。

四、 总结与三步走指引

  • 第一步:获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置:https://github.com/quantdash-net/QuantDash(请认准官方 quantdash-net 组织,欢迎 Star 支持)。

  • 第二步:申请专属密钥。注册获取您的个人免费/生产级 API Key:https://quantdash.net/。

  • 第三步:查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考:https://docs.quantdash.net/。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询