TL;DR:本文将演示如何利用 Python、Scikit-Learn 和 QuantDash 构建一个简易的机器学习趋势预测工作流:完成历史数据获取、特征提取、随机森林(Random Forest)模型训练、测试集预测以及特征重要度分析。


一、 机器学习在金融时间序列预测中的经典陷阱

直接把 K 线价格塞给机器学习模型,通常会遭遇灾难性的过拟合或逻辑失效:

  1. 使用了“非平稳”的特征:股票价格绝对值(如几百块钱)是非平稳的,随着时间推移不断变化。模型学到的往往是某个价格区间,而非“涨跌逻辑”。特征提取必须经过“平稳化”处理(如使用滚动收益率、对数收益率、技术指标变化率)。

  2. 未来信息泄漏(Data Leakage):在特征工程阶段,使用了跨期统计(如计算全局均值归一化),这无意中向历史训练集泄露了未来走势的信息。

  3. 不规范的除权处理


二、 极简解决方案(基于 QuantDash SDK 与 Scikit-Learn)

我们将使用 QuantDash 稳定获取前复权 K 线,并将高维行情转化为平稳的衍生技术指标特征,通过随机森林分类器预测下一交易日的涨跌趋势(二分类:1 代表上涨,0 代表不涨)。

1. 环境准备
pip install quantdash pandas scikit-learn numpy
2. 机器学习预测模型核心代码
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(symbol="00700.HK", start_date="2026-01-01", end_date="2026-06-30", adjust="qfq")
    
    # 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)
    # 特征 5:5 日滚动振幅
    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_estimators=100, max_depth=5, random_state=42)
    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` API(Token 为 "demo_public_token")抓取。
2. 引入更先进的分类模型如 XGBoost 与 LightGBM 进行对比测试。
3. 增加时间序列交叉验证(TimeSeriesSplit)以彻底解决过拟合问题,并在训练特征中加入 MACD 和 RSI 因子。
4. 格式化输出各个模型在测试集上的混淆矩阵(Confusion Matrix)与 F1-Score 指标。

四、 总结与三步走落地指引

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

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

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐