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 執行;而嚴謹則取決於你,它是整個量化交易裡最可遷移的技能。