GaiaEx AcademyGaiaEx Academy
金融市场机器学习入门
开发者AI 与机器学习11 min read

金融市场机器学习入门

用于交易的监督学习、无监督学习与强化学习

分享文章

在真实世界里赚到 $0 的那次回测

2018 年,一支量化团队向他们的基金展示了一个模型,它在回测中把 $100,000 变成了 $420 万。资金曲线几乎是一条完美的 45 度直线。夏普比率高达 4.0——比历史上几乎任何对冲基金都好。他们用真金白银把它上线了。

第一周就亏钱,接着失血了三个月,他们才把它关掉。那个在纸面上「赚」了 $420 万的模型,在现实里一分钱都没赚到。没有任何造假——没有欺诈,没有 bug。这个模型只是记住了过去,而没有学到任何关于未来的东西。

这个故事重复得如此频繁,以至于有了专门的名字:回测过拟合(backtest overfitting),它是机器学习基金失败的头号原因。Marcos López de Prado——管理过数十亿美元 ML 驱动策略的人——直言不讳地说:只要尝试的次数足够多,任何人都能在纯噪声上做出一条漂亮的回测曲线。市场才不在乎你的神经网络有多优雅。

机器学习确实正在改变市场的交易方式。但一个看起来很出色的模型,和一个在真实市场中存活下来的模型之间,差距是巨大的——而学会分辨二者,才是这场游戏的全部。本课会同时教你两件事:如何构建能找到真实优势的 ML 系统,以及如何避开那些专门坑害「跳过下半场」的人的陷阱。

什么是机器学习——以及为什么市场是最难的场景

机器学习是一门让计算机从数据中学习模式、而无需为每种场景显式编程的科学。你不必写一条像「当 RSI 跌破 30 时买入」这样的规则,而是把成千上万个历史样本喂给算法,让它自己发现哪些模式会先于盈利的交易出现。机器从经验中归纳——这正像一位资深交易员逐渐培养出直觉,只不过它处理的数据量远超任何人脑所能容纳的。

金融市场生成的数据量惊人:价格 tick、订单簿快照、资金费率、链上资金流、情绪评分、宏观数据发布。传统的基于规则的策略,只能捕捉其创建者已经想象到的那些关系。ML 模型则能一次性检测数百个特征之间的非线性、高维交互——这些关系是人类分析师压根想不到去验证的。

但在所有应用 ML 的领域里,市场是最恶劣的环境,我们值得诚实地说清原因。大多数 ML 突破——图像识别、语言模型——之所以有效,是因为底层规则不会变。无论照片拍摄于 2010 年还是 2026 年,猫看起来都是猫。市场恰恰相反:

  • 数据是非平稳的。随着市场状态(regime)切换,市场的统计「规则」在不断变化。一个在平静牛市上训练出来的模型,在崩盘时可能反而很危险。
  • 信噪比极其残酷。在图像识别中,几乎每个像素都携带信息。而在收益率里,绝大部分价格波动都是噪声。你是在一片轰鸣的随机性汪洋里,淘洗一丝微弱的信号。
  • 你在与会适应的对手博弈。猫不会为了骗过你的分类器而改变自己的外观。但一旦某个真实的市场优势变得流行,其他交易员就会通过套利把它抹平。你模型的成功,会悄悄侵蚀掉它自己的优势。
关键洞见:金融中的 ML 不是要构建最花哨的模型,而是要构建一套诚实的验证流程,能把一个真实、持久的优势,与一个漂亮的巧合区分开来。模型是简单的部分。不自欺欺人才是难的部分——也正是大多数人亏钱的地方。

好消息是:门槛已经不再是数据或算力的获取。像 GaiaEx 这样的平台提供 API,可访问 Hyperliquid L1 上的实时与历史市场数据,因此任何开发者都能采集到 ML 所需的数据集。剩下的门槛是知识——而这正是本课所要提供的。

三大范式:监督学习、无监督学习与强化学习

机器学习不是单一一种技术——它是一族方法,各自适用于不同的问题。在金融领域,三大主要范式都有真实的应用。

监督学习是主力。你给模型带标签的样本:历史特征向量(输入)与已知结果(目标)配成对,模型从中学习一种由输入到输出的映射。在金融应用中,有两个子类型占据主导:

  • 分类(Classification)——预测一个类别。该资产在接下来一小时里会涨还是会跌?这笔交易是否为欺诈?输出是一个离散标签,通常还附带一个概率。
  • 回归(Regression)——预测一个连续值。1 小时的收益率会是多少?公允的资金费率是多少?输出是一个数字,模型要最小化预测误差。

无监督学习没有标签的数据中寻找结构。像 K-Means 这样的聚类算法,可以在你事先不定义这些状态的情况下,把交易日分组为不同的市场状态——趋势、均值回归、高波动。像 PCA 这样的降维方法,可以把数百个相关特征压缩成少数几个独立因子——当你的特征集比样本深度还要宽时,这一点尤为重要。

强化学习(RL)训练一个智能体,通过最大化累积奖励来做出一系列决策。智能体与一个环境(市场)交互,采取行动(买、卖、持有),并接收反馈(盈利或亏损)。RL 在投资组合配置和订单执行上很有吸引力,因为在这些场景中,最优行动取决于你当前的持仓、交易成本和市场冲击。DeepMind 的游戏对弈智能体激发了一波金融 RL 研究热潮——但实际成果依旧好坏参半,恰恰是因为市场是非平稳的,而这场「游戏」会在中途不断改变自己的规则。

你应该从哪个开始?毫无疑问,从监督学习开始。它拥有最成熟的工具链、最可解释的结果,以及最诚实的验证方法论。先掌握分类和回归——之后再去探索用于状态检测的无监督聚类,以及用于执行的 RL。直接跳到 RL,相当于量化领域里「还没学会站就想跑」。
Supervised learning (tabular finance) Features X OHLCV, indicators Model f RF, GBM, NN… ŷ class / return vs y label Loss L(ŷ, y) — minimize on train; validate on future data only Never shuffle time — walk-forward or purged CV
监督学习把特征与标签配对;目标是泛化,而不是死记 K 线。

特征工程:把原始数据变成有预测力的信号

在机器学习中,特征(features)是模型用来做预测的输入变量。原始 OHLCV 数据只是个起点,但把原始价格直接喂给模型,就像把生小麦而不是面粉递给厨师——你得先把它加工一遍。特征工程是领域专长与数据科学交汇的地方,而它决定一个模型是能用还是没用的程度,远比算法的选择更高。

金融 ML 常见的特征类别包括:

  • 技术指标——RSI、MACD、布林带宽度、ATR、ADX。它们把动量、波动率和趋势强度编码为标准化、与尺度无关的输入。
  • 滞后特征(lag features)——多个周期上的历史收益率(1 根、5 根、20 根、60 根 K 线),在不同时间尺度上捕捉动量与均值回归。
  • 波动率度量——滚动标准差、Parkinson 波动率(基于最高/最低价)、Garman-Klass 估计量。波动率聚集是全部金融领域里最可靠的程式化事实之一。
  • 成交量特征——成交量比率(当前 vs. 均值)、能量潮(OBV)、量价相关性。异常的成交量经常先于价格变动出现。
  • 跨资产特征——在预测 ETH 时,把 BTC 的收益率作为输入。资产之间不断变化的相关性,常常会比价格更早地发出市场状态切换的信号。

下面是一个用 Python 做特征工程的实用例子:

import pandas as pd
import numpy as np

def engineer_features(df: pd.DataFrame) -> pd.DataFrame:
    df["return_1h"] = df["close"].pct_change(1)
    df["return_4h"] = df["close"].pct_change(4)
    df["return_24h"] = df["close"].pct_change(24)
    df["volatility_24h"] = df["return_1h"].rolling(24).std()
    df["rsi_14"] = compute_rsi(df["close"], 14)
    df["volume_ratio"] = df["volume"] / df["volume"].rolling(24).mean()
    df["atr_14"] = compute_atr(df, 14)
    return df.dropna()

有两条规则不容妥协。第一,绝不使用未来数据——每个特征都必须能仅凭预测时刻已有的信息计算出来。「发现」一个盈利策略最常见的方式,就是不小心让明天的数字泄漏进了今天的特征里。第二,对输入做归一化;当特征跨越天差地别的量级时(一个 60,000 的价格旁边放着一个 30 的 RSI),大多数 ML 模型都会卡壳。

金融 ML 的 80/20 法则:在优质特征上跑一个平庸的模型,每一次都胜过在原始价格上跑一个出色的模型。把精力花在这里,而不是去追逐最新的神经网络架构。强壮、无泄漏的特征,才是持久优势真正的来源。

最重要的一节:在时间序列上做验证

如果你只想从整节课里记住一件事,那就记住这条:标准的 ML 验证方法,用在金融市场上是灾难性地错误的。

在常规的机器学习中,你会把数据随机打乱,再切分成训练集和测试集。但如果你对时间序列价格数据这么做,你就等于让模型用未来去训练,来预测过去。你的准确率会看起来惊人。而你的实盘交易会是一场屠杀。这个唯一的错误——被称为前视偏差(look-ahead bias)——比任何市场崩盘都炸毁了更多量化策略。正确的做法永远尊重时间之箭:

按时间顺序的训练/验证/测试切分。按日期划分数据:在 2020–2022 上训练,在 2023 上验证,在 2024 上测试。测试集只能被碰一次——它是你对实盘交易的模拟。一旦你对着它去调超参数,它就不再是测试集,你也就失去了对样本外表现的任何诚实估计。

步进式验证(walk-forward validation)(扩展窗口或滑动窗口)更稳健。在第 1–12 个月上训练,预测第 13 个月。然后在第 1–13 个月(或第 2–13 个月)上训练,预测第 14 个月。如此重复。这会生成许多样本外预测,每一次都基于模型从未见过的数据,同时还能适应不断演变的市场条件——它精确地模拟了策略实际部署和再训练的方式。

清洗交叉验证(purged cross-validation)(由 Marcos López de Prado 提出)在训练折与测试折之间加入一个间隔,以阻止信息通过重叠的标签泄漏。如果你的目标是 24 小时的前向收益率,那么折边界附近的观测就会共享信息;清洗间隔(purge gap)能去除这种污染。在测试折之后再加一段「禁运期(embargo)」,可以防止序列相关性回渗进训练数据。

最后,用对有意义、而非对教科书有意义的指标来评判模型。单看准确率会误导人。一个准确率只有 51%、但在大行情上判断正确的模型,可能极其赚钱;而一个准确率 70%、却只押对小波动的模型,扣除手续费后可能是亏的。要追踪你方向判断的精确率(precision)、由此产生的策略的夏普比率,以及最大回撤——并且始终要扣除现实的交易成本和滑点之后再看。

Walk-forward: time always flows left → right Train t₁ Val OOS hold-out once Train t₁+t₂ Val OOS Train expands or slides Val purge gap if labels overlap
扩展或滑动窗口模拟真实部署:模型永远不会在未来数据上训练。

随机森林、梯度提升,以及如何选对模型

对于表格型金融数据——也就是你从 OHLCV K 线、技术指标和工程化特征中得到的那种数据——基于树的集成模型始终优于深度神经网络。这不是一种观点,而是一个被充分确立的实证结果(参见 Grinsztajn 等人,2022,《Why do tree-based models still outperform deep learning on tabular data?》)。对于图像和语言,深度学习称王。而对于一张特征表,树模型获胜。

随机森林(Random Forests)会构建数百棵决策树,每棵都在行和特征的随机子集上训练,然后对它们的预测取平均。这种平均能降低方差和过拟合。它们很稳健,几乎不需要调参,还能直接给你一份内置的特征重要性排名——这对于理解到底是什么在驱动你的模型来说,价值连城。

梯度提升(Gradient Boosting)(XGBoost、LightGBM、CatBoost)按顺序逐棵构建决策树,每一棵都去纠正到目前为止整个集成的错误。它在准确率上通常胜过随机森林,但要求更仔细的调参。LightGBM 是大多数金融 ML 从业者的默认选择:训练快、原生处理缺失值,并且能轻松扩展到数百万行数据。

import lightgbm as lgb
from sklearn.model_selection import TimeSeriesSplit

model = lgb.LGBMClassifier(
    n_estimators=500,
    max_depth=6,
    learning_rate=0.05,
    subsample=0.8,
    colsample_bytree=0.8,
    min_child_samples=50,
)

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, val_idx in tscv.split(X):
    model.fit(X.iloc[train_idx], y.iloc[train_idx],
              eval_set=[(X.iloc[val_idx], y.iloc[val_idx])])

深度学习仍有它的用武之地——但范围很窄。LSTM 和 Transformer 在原始序列数据上确实能创造价值:逐 tick 的订单流,或是把价格与新闻文本和社交媒体情绪融合起来——在这些场景里,顺序和上下文携带着扁平表格会丢弃的信息。只是别把它们当成默认选项。对于带有工程化特征的结构化数据,一个调好的、用从 GaiaEx API 拉取的数据训练的 LightGBM,几乎总能击败一个神经网络——而且它的训练只需几秒,而不是几个小时。

ML 在加密领域真正发挥价值的地方

价格预测吸引了所有的关注,但它恰恰是 ML 在市场中最难、最不可靠的用途。一些最有价值的应用,跟预测下一根 K 线毫无关系:

  • 市场状态检测。无监督聚类把市场状况归类为不同状态——平静趋势、震荡均值回归、高波动恐慌。知道你身处哪种状态,能让你切换策略或减小仓位,而这往往比任何单一的方向预测都更值钱。
  • 情绪分析。大语言模型能以人类无法企及的规模阅读新闻、X/Twitter 和 Discord,给市场情绪的变化打分。研究一致表明,把情绪信号与价格数据融合,能在仅用价格的基础上提升加密预测的准确率——情绪对加密的影响异常之大。
  • 欺诈与操纵检测。这是 ML 默默发光的地方。模型通过识别那些先于协同抛售出现的异常成交量和订单簿模式,来标记对敲刷量、幌骗,以及经典的拉高出货骗局。异常检测模型(LSTM、Anomaly Transformer)在这里可靠地击败了经典 ML 和简单的统计阈值。
  • 执行与滑点建模。ML 能预测一笔大单的市场冲击,帮助执行算法把它切分开来,从而最小化成本。在像加密这样 24/7 的交易场所,一笔笨拙的订单会把盘口推向对你不利的方向,而这能直接保护你的最终收益。
  • 风险与强平管理。模型能在给定当前波动率的情况下,估计某个头寸突破风险阈值的概率,从而在级联爆仓之前而非之后帮你确定仓位大小、设置止损。
一个值得内化的重新框定:金融中最好的 ML,往往不是在预测价格——而是在管理风险和检测异常。一个能可靠地告诉你「市场状态刚刚翻转,降低敞口」或「这个代币的成交量看起来像是正在进行的拉盘」的模型,能保护住的资本,比一个价格预测器所能赚到的还要多。防守的可扩展性,比进攻更可靠。

为什么大多数 ML 策略会失败——以及它教会你什么

诚实的教育意味着点明这件事是如何出错的,因为它通常都会出错。这些陷阱所摧毁的量化策略,比所有熊市加起来还要多:

  • 过拟合。模型记住了训练数据,而不是学到任何可泛化的东西。解药是纪律,而不是小聪明:更简单的模型、更少的特征、正则化,以及无情的样本外测试。如果你的回测好得不像真的,那它就不是真的。
  • 前视偏差。使用了决策时点尚不可得的信息——在切分前就在整个数据集上计算特征、使用了事后被修正过的价格,或者(比任何人愿意承认的都更常见)把目标变量留在了特征集里。
  • 幸存者偏差。只在今天仍然存在的资产上训练。被下架的代币、卷款跑路的项目和死掉的币,都在你的数据集里悄无声息地缺席了,这会让每一个结果都向上偏移。在加密领域这一点尤为严重——成千上万的代币都归了零。
  • 非平稳性。市场的分布会变。一个在 2021 年牛市上训练的模型,会在 2022 年熊市中失效,因为它学到的那套规则不再成立。你必须定期重新训练并监控分布漂移,而不是「设好就忘」。
  • 多重检验陷阱。尝试 1,000 种策略变体,纯靠运气总会有几个看起来很出色。那个「$420 万」的回测就是这么来的。缩减夏普比率(Deflated Sharpe Ratio)之类的工具之所以存在,就是专门用来折算那些你只是「搜得够狠」才找到的表现。
  • 研究到生产的鸿沟。回测假设无摩擦、即时成交。而真实市场会施加滑点、手续费、延迟和市场冲击,这些通常会从理论收益里削掉 30–70%——并且能把一个「盈利」的策略翻成负的。

这份清单里藏着一个更深的要点。市场是一个对抗性的、会适应的系统——每一个真实的优势都会吸引竞争者,他们会通过套利把它抹平。一个赢了一年的模型,可能就在它变得拥挤的那个月停止有效,而这并不是它代码的错。这就是为什么成功的量化机构不会去寻找一个完美的模型;他们构建的是一条流水线,随着市场演变,不断地寻找、验证并淘汰各种优势。

诚实的结论:ML 不会递给你一台印钞机,任何向你兜售印钞机的人,卖的都是一个过拟合的回测。它给你的,是一套严谨、可重复的流程,用来找到细小而真实的优势,并且——同样重要地——在那些假优势让你破财之前把它们剔除掉。纪律本身,就是阿尔法收益。

在 GaiaEx 上构建:你的第一个端到端项目

你读到的每一项量化技能,都首先依赖于一件事:干净、可靠的数据。这正是 GaiaEx 在你 ML 工作流中的位置。因为交易在 Hyperliquid L1 上执行,每一次成交、每一笔资金费率、每一次订单簿变动都被记录在链上,并通过 GaiaEx API 暴露出来——给你提供透明、细粒度、实时和历史的数据,而没有许多中心化数据源所固有的缺口和无声修正。

为什么链上数据对 ML 很重要:一个模型的诚实程度,不会超过它的输入。当你的训练数据来自一条透明的 L1,而不是一个黑箱式的内部数据库时,你就能信任:你正在学习的价格和成交量,就是真实成交的价格和成交量。这能在一整类微妙的数据完整性 bug 触及你的特征之前,就把它们消除掉。

你的第一个项目应该刻意保持简单。目标不是在第一次尝试就跑赢市场——而是要构建一条完整、无泄漏、可以反复迭代的流水线。这里有一份具体的路线图:

  • 从 GaiaEx API 采集 BTC/USDC 的 1 小时 K 线数据——至少 6 个月。
  • 工程化 10–15 个特征:滞后收益率、RSI、ATR、成交量比率、布林带宽度。
  • 给每根 K 线打标签:如果接下来 4 小时的收益率为正,标 1,否则标 0
  • 步进式验证训练一个 LightGBM 分类器——绝不要用随机切分。
  • 评估精确率、召回率,以及一个简单策略的夏普比率——该策略在模型预测为 1 时做多,并且要在扣除现实手续费之后计算。

然后——这正是初学者会跳过的部分——试着去把它弄坏。加上一个清洗间隔,看看你的优势是否还能存活。检查是否有任何特征在偷偷泄漏未来。在一段不同的时间窗口上测试它。如果优势在严格审视下蒸发了,那你学到了真正有价值的东西:它从来就不是真的,而你是免费发现的,而不是用你的本金发现的。

流水线本身才是产品。数据采集、特征工程、验证和诚实的评估——正是这套机器在不断累积复利。阿尔法收益来自数月之间对它的打磨,而不是来自某一个走运的模型。GaiaEx 给你透明的数据和 L1 执行;而严谨则取决于你,它是整个量化交易里最可迁移的技能。