如何用机器学习做交易预测?Sklearn 版入门实操示例

核心概念解析

1. 监督学习与标签构造

机器学习交易预测核心是监督学习。核心步骤是构造标签(Label),即模型要预测的目标。

  • 涨跌分类(Classification)

    • Label = 1 → 下一个时间段上涨

    • Label = 0 → 下一个时间段下跌或持平

  • 收益回归(Regression)

    • Label = 下一时间段收益率

示例:预测未来 10 分钟价格涨跌

df['label'] = (df['close'].shift(-10) > df['close']).astype(int)

2. 特征工程(Features)

特征工程决定了 ML 模型能否提取有效信息。常见特征包括:

  1. 技术指标

    • MA(移动平均)

    • EMA(指数移动平均)

    • RSI(相对强弱指标)

    • Bollinger 带宽

  2. 成交量与动量因子

    • 成交量均值

    • 成交量比率

    • 价格动量(ROC、涨跌幅)

  3. 订单簿特征

    • Bid/Ask imbalance

    • Depth difference

    • 价格梯度

  4. 情绪因子

    • 新闻情绪分数

    • 社交媒体情绪指数

示例:构造 MA 差和 RSI

import pandas as pdimport talib df['MA5'] = df['close'].rolling(5).mean() df['MA20'] = df['close'].rolling(20).mean() df['MA_diff'] = df['MA5'] - df['MA20'] df['RSI'] = talib.RSI(df['close'].values, timeperiod=14) df.dropna(inplace=True)

3. 模型训练与预测

模型选择

  • RandomForestClassifier:适合非线性分类问题,稳定且可解释

  • XGBoost/LightGBM:梯度提升树,处理特征维度高、非线性强的数据

  • 神经网络(MLP):可进一步捕捉复杂模式,但训练成本高

训练示例

from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score X = df[['MA_diff', 'RSI']] y = df['label'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False) model = RandomForestClassifier(n_estimators=200, random_state=42) model.fit(X_train, y_train) y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred)print("预测准确率:", accuracy)

4. 将预测转化为交易信号

机器学习输出的通常是分类结果或概率,需要结合风控生成可执行信号:

df['pred_prob'] = model.predict_proba(X)[:,1] df['signal'] = 0df.loc[df['pred_prob'] > 0.55, 'signal'] = 1 # 买入df.loc[df['pred_prob'] < 0.45, 'signal'] = -1 # 卖出

风控设置

  • 最大仓位限制

  • 单笔交易止损/止盈

  • 高频策略需考虑滑点


5. 回测与评估

回测是检验机器学习策略的关键:

关键指标

  1. 累计净值

  2. 胜率、盈亏比

  3. 最大回撤(Max Drawdown)

  4. Sharpe、Sortino 比率

简单回测示例

df['returns'] = df['close'].pct_change() * df['signal'].shift(1) df['cum_returns'] = (1 + df['returns']).cumprod()print(df[['cum_returns']].tail())

注意:实盘滑点和手续费会显著降低收益。


案例分析:比特币小时级预测

  • 数据来源:Binance 历史 1 小时 K 线 + 推特情绪

  • 特征:MA 差、RSI、订单簿 imbalance、情绪得分

  • 模型:RandomForestClassifier

  • 回测结果

    • 累计收益:15%(3 个月)

    • 最大回撤:7%

    • Sharpe 比率:1.45

分析

  • 情绪因子提升了中短线预测准确率约 3–5%

  • 高频噪声对 MA/RSI 因子有负面影响

  • 需结合滑点和手续费才能落地


6. 注意事项与风险

  1. 过拟合风险:ML 模型容易拟合历史噪声

  2. 数据质量问题:脏数据导致策略失效

  3. 时间序列交叉验证:训练集/测试集不能随机拆分

  4. 特征不可过度依赖金融逻辑不明确的信号


总结与落地建议

  1. 数据优先:高质量、多维度数据是机器学习策略的核心

  2. 特征多样性:技术指标 + 情绪 + 订单簿融合

  3. 模型稳健性:RandomForest/XGBoost 适合初学者和中频策略

  4. 回测严格:考虑滑点、手续费、异常行情

  5. 持续优化:因子漂移、市场变化需不断更新模型

机器学习在量化交易中不是万能钥匙,但它能将复杂市场关系转化为可执行的策略信号,结合风控和回测,形成科学化交易体系。