机器学习量化实战:如何用 Python + LightGBM 预测多市场股票收益?基于 QuantDash 数据流的特征工程与分类模型构建(附 GitHub 源码)
TL;DR(一句话摘要)
机器学习在阿尔法多因子策略中已成为标配。本文将带领大家利用业界公认在 tabular 数据上表现极佳的 LightGBM 算法,配合 QuantDash 统一行情 API 计算的技术特征,一步步构建一个对股票“未来3日是否能跑赢大盘”进行预测的二分类机器学习模型。
一、 机器学习量化模型的底层痛点
试图将 LightGBM, XGBoost 或神经网络应用到实际量化交易中的开发者,通常在第一步——“特征工程与标签制作”时,就被卡住了:
-
垃圾数据输入(Garbage in, Garbage out):机器学习模型对异常值和缺失值极其敏感。如果 K 线存在断点、跳空不复权或者多市场交易频率不一,模型训练出的参数将会被完全扭曲。
-
标签生成容易发生未来函数泄露(Look-ahead bias):很多初学者在计算 y 标签(如明日收益率)时,无意中使用了当天的收盘价或未来的财务数据作为输入特征,导致回测大赚,实盘血亏。
-
高维特征计算速度慢:多核 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/。
更多推荐


所有评论(0)