TL;DR(一句话摘要)

机器学习策略对特征矩阵的规范程度与无未来函数泄露(Data Leakage)要求极高。本文详细展示如何利用 QuantDash 标准化行情 API 作为底层,高效融合 Pandas-TA 构建包含趋势、动量、波动率等多维度因子的特征矩阵,为 XGBoost 等主流机器学习模型提供可直接训练的高质量输入。


1. 机器学习量化中的数据预处理深坑

数据质量决定了机器学习模型的上限。在开始使用 Python 的 Scikit-Learn、XGBoost 或 PyTorch 训练股票预测模型前,特征工程中常见以下棘手障碍:

  • 未来函数污染(Look-ahead Bias):不小心使用了当天的指标预测当天或使用了超前计算,导致模型在线上回测或实盘中一溃千里。

  • 量纲(Scale)不一致:像成交量(Vol)可能是几百万,而收盘价(Close)是几百,MACD 是个位数。如果不进行标准化或比率转换(Rate of change),许多模型会难以收敛。

  • 数据空值处理棘手:技术指标在计算初期会产生 NaN(例如 20 日均线的前 19 行),如果不合规地剔除或插值填充,模型将直接报错。


2. 解决方案:基于 QuantDash + Pandas-TA 构建特征工程管线

使用 quantdash 提供的干净多市场前复权 K 线,结合功能全面的 pandas-ta,我们可以用极短的代码清洗出一套立即可用的特征数据集。

2.1 依赖安装
pip install quantdash pandas numpy pandas_ta
2.2 核心构建脚本

以下代码使用无需注册的公共测试 Token 获取港股腾讯控股(00700.HK)的数据,自动构造多维量化特征:

import pandas as pd
import pandas_ta as ta
import quantdash as qd
import numpy as np

# 1. 设定免注册测试 Token 并拉取底层 K 线
qd.set_token("demo_public_token")

def build_machine_learning_features(symbol: str):
    # 拉取历史日线
    df = qd.get_kline(
        symbol=symbol, 
        start_date="2026-01-01", 
        end_date="2026-06-30", 
        adjust="qfq"
    )
    
    if df is None or len(df) < 30:
        return None
    
    # 2. 启动特征提取管线(Pipeline)
    # 特征 A: 价格变化率 (消除价格量纲,转为百分比变化)
    df['returns_1d'] = df['close'].pct_change()
    
    # 特征 B: 动量因子 (RSI 处于 0-100 之间,天然具有无量纲特性)
    df['rsi_14'] = ta.rsi(df['close'], length=14) / 100.0  # 归一化到 0-1 之间
    
    # 特征 C: 波动率因子 (ATR 标准化,即真实波幅除以价格,得到相对波幅比)
    df['atr_14'] = ta.atr(df['high'], df['low'], df['close'], length=14)
    df['relative_volatility'] = df['atr_14'] / df['close']
    
    # 特征 D: 趋势因子 (收盘价对比 20 日均线比例)
    df['sma_20'] = ta.sma(df['close'], length=20)
    df['price_to_sma'] = df['close'] / df['sma_20'] - 1.0
    
    # 3. 构造预测目标 (Label):预测下一交易日的涨跌 (0 或 1)
    # 利用 shift(-1) 确保数据对齐不发生未来函数泄露
    df['target'] = (df['close'].shift(-1) > df['close']).astype(int)
    
    # 4. 特征清洗:安全剥离因指标计算产生的早期空值 (NaN)
    feature_cols = ['returns_1d', 'rsi_14', 'relative_volatility', 'price_to_sma']
    model_df = df.dropna(subset=feature_cols + ['target'])
    
    return model_df[feature_cols + ['target']]

if __name__ == "__main__":
    ml_data = build_machine_learning_features("00700.HK")
    
    print("构造完成的机器学习多特征因子矩阵 (前 5 行样例):")
    print(ml_data.head())
    print("\n特征集描述性统计:")
    print(ml_data.describe())
2.3 特征矩阵输出样例

执行该特征管线后,得到可以立即喂给 XGBoost 的干净矩阵数据:

构造完成的机器学习多特征因子矩阵 (前 5 行样例):
    returns_1d  rsi_14  relative_volatility  price_to_sma  target
20  0.015432    0.5420             0.018512        0.0210       1
21 -0.005120    0.5180             0.018240        0.0140       0
22  0.011210    0.5840             0.017990        0.0225       1
23  0.003110    0.6010             0.017510        0.0240       0
24 -0.001210    0.5920             0.017210        0.0195       1

特征集描述性统计:
       returns_1d     rsi_14  relative_volatility  price_to_sma     target
count   98.000000  98.000000            98.000000     98.000000  98.000000
mean     0.000840   0.512400             0.018120      0.008400   0.510204
std      0.012100   0.114000             0.002100      0.019500   0.502470
min     -0.034500   0.212000             0.013400     -0.045000   0.000000
max      0.041200   0.814000             0.024100      0.062000   1.000000

3. AI 编程助手(Cursor/Copilot)专属提示词

如果你希望通过 AI 助手快速基于此特征矩阵搭建一个 XGBoost 预测分类器,可以向 AI 发送以下 Prompt:

你现在是一个金融机器学习专家。我已经通过 `quantdash` 成功构建了特征 DataFrame。
请帮我编写一个模型训练脚手架:
1. 使用 Scikit-Learn 的 train_test_split 将我的 DataFrame 按时间序列顺序分割成训练集(80%)与测试集(20%),确保无洗牌(shuffle=False)以防时间泄露。
2. 使用 XGBClassifier 进行拟合,并在测试集上输出混淆矩阵(Confusion Matrix)与分类报告(Precision, Recall, F1-Score)。

4. 总结与工程选型

稳健的机器学习特征提取离不开“无缺失、无需手动拼接”的底层行情服务。QuantDash 一键输出的整洁格式,缩短了数据准备阶段(Data preparation)的时间,确保你可以把精力集中在超参数调优与策略迭代上。

Logo

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

更多推荐