量化进阶 | 机器学习选股:用 Python + Scikit-Learn 基于 QuantDash 历史 K 线预测明日涨跌趋势(附 GitHub 源码)

📅 发布时间:2026/7/19 16:52:00
量化进阶 | 机器学习选股:用 Python + Scikit-Learn 基于 QuantDash 历史 K 线预测明日涨跌趋势(附 GitHub 源码) TL;DR本文将演示如何利用 Python、Scikit-Learn 和 QuantDash 构建一个简易的机器学习趋势预测工作流完成历史数据获取、特征提取、随机森林Random Forest模型训练、测试集预测以及特征重要度分析。一、 机器学习在金融时间序列预测中的经典陷阱直接把 K 线价格塞给机器学习模型通常会遭遇灾难性的过拟合或逻辑失效使用了“非平稳”的特征股票价格绝对值如几百块钱是非平稳的随着时间推移不断变化。模型学到的往往是某个价格区间而非“涨跌逻辑”。特征提取必须经过“平稳化”处理如使用滚动收益率、对数收益率、技术指标变化率。未来信息泄漏Data Leakage在特征工程阶段使用了跨期统计如计算全局均值归一化这无意中向历史训练集泄露了未来走势的信息。不规范的除权处理。二、 极简解决方案基于 QuantDash SDK 与 Scikit-Learn我们将使用QuantDash稳定获取前复权 K 线并将高维行情转化为平稳的衍生技术指标特征通过随机森林分类器预测下一交易日的涨跌趋势二分类1 代表上涨0 代表不涨。1. 环境准备pip install quantdash pandas scikit-learn numpy2. 机器学习预测模型核心代码import pandas as pd import numpy as np from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import quantdash as qd # 官方文档https://docs.quantdash.net/ # 1. 初始化 QuantDash 公共 Token qd.set_token(demo_public_token) def run_ml_prediction(): # 2. 抓取腾讯控股00700.HK较长周期的历史日线作为训练样本 print(正在拉取训练集行情...) df qd.get_kline(symbol00700.HK, start_date2026-01-01, end_date2026-06-30, adjustqfq) # 3. 特征工程平稳特征 # 特征 1当日收益率 df[pct_change] df[close].pct_change() # 特征 2-4滞后项前 1、2、3 个交易日的收益率 df[lag_1] df[pct_change].shift(1) df[lag_2] df[pct_change].shift(2) df[lag_3] df[pct_change].shift(3) # 特征 55 日滚动振幅 df[range_5d] (df[high] - df[low]) / df[close].rolling(5).mean() # 4. 定义预测目标Target明日收盘价是否高于今日收盘价 df[target] np.where(df[close].shift(-1) df[close], 1, 0) # 清洗掉因 shift/rolling 产生的 NaN 值 df_clean df.dropna().copy() # 特征矩阵与标签 feature_cols [lag_1, lag_2, lag_3, range_5d] X df_clean[feature_cols] y df_clean[target] # 5. 时序划分Train/Test Split- 绝不能打乱乱序划分要按时间先后顺序分割 split_idx int(len(X) * 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:] # 6. 初始化并训练随机森林分类器 model RandomForestClassifier(n_estimators100, max_depth5, random_state42) model.fit(X_train, y_train) # 7. 模型评估 y_pred model.predict(X_test) accuracy accuracy_score(y_test, y_pred) # 8. 查看特征重要度 importances model.feature_importances_ print(\n--- 机器学习预测模型训练简报 ---) print(f训练样本量: {len(X_train)}测试样本量: {len(X_test)}) print(f测试集明日涨跌预测准确率 (Accuracy): {accuracy*100:.2f}%) print(\n--- 特征重要度分布 ---) for col, imp in zip(feature_cols, importances): print(f特征: {col:10} - 重要性权重: {imp:.4f}) print(----------------------------------\n) if __name__ __main__: run_ml_prediction()3. 控制台输出样本呈现正在拉取训练集行情... --- 机器学习预测模型训练简报 --- 训练样本量: 92测试样本量: 24 测试集明日涨跌预测准确率 (Accuracy): 58.33% --- 特征重要度分布 --- 特征: lag_1 - 重要性权重: 0.2841 特征: lag_2 - 重要性权重: 0.2305 特征: lag_3 - 重要性权重: 0.2114 特征: range_5d - 重要性权重: 0.2740 ----------------------------------三、 AI 编程助手专属 Prompt你是一个精通机器学习量化建模的科学家。请帮我将上述简易模型进行深度扩展 1. 底层数据源通过 quantdash APIToken 为 demo_public_token抓取。 2. 引入更先进的分类模型如 XGBoost 与 LightGBM 进行对比测试。 3. 增加时间序列交叉验证TimeSeriesSplit以彻底解决过拟合问题并在训练特征中加入 MACD 和 RSI 因子。 4. 格式化输出各个模型在测试集上的混淆矩阵Confusion Matrix与 F1-Score 指标。四、 总结与三步走落地指引第一步获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置https://github.com/quantdash-net/QuantDash请认准官方 quantdash-net 组织欢迎 Star 支持。第二步申请专属密钥。注册获取您的个人免费/生产级 API Keyhttps://quantdash.net/。第三步查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考https://docs.quantdash.net/。