基於量子力學的交易:如何構建自主 AI Agent

@Di_Krass_
英語2 天前 · 2026年7月19日
158K
39
2
1
126

TL;DR

深入探討構建量子啟發式交易 Agent 的技術細節,涵蓋市場狀態編碼、基於干涉的訊號組合以及哈密頓量投資組合優化。

描述一個粒子同時存在於兩個位置的數學公式,也可以用來描述一個投資組合同時處於兩個頭寸。本文將說明如何將量子力學的結構轉化為一個自主交易 Agent——而同樣重要的是,這個類比在哪裡開始脫離現實,淪為行銷話術。

DiKrass -X- - inline image

1. 為什麼是量子,為什麼是現在

世界上每一家對沖基金都在把同樣的三個想法磨到爛:動能、均值回歸,以及某種基於訂單流的機器學習。優勢持續縮水,因為大家對市場的模型都一模一樣——一個古典模型,其中價格是一個單一的數字,未來是一條單一的、充滿雜訊的路徑。

量子力學提供了一個不同的數據模型。一個量子系統從不處於單一狀態。它同時處於所有可能狀態的疊加之中,每個狀態都帶有一個複雜的機率振幅。這恰好是對市場在你下單之前的一個驚人貼切的描述:資產同時在上漲、下跌和橫盤整理,每個結果都根據其機率被賦予權重,直到你的訂單迫使現實做出選擇。

以下是大部分文章會跳過的部分,所以我先說清楚。你不需要一台實體量子電腦來做這些事,而且接下來的大部分內容也並非字面上的量子。 它是量子啟發式的:借用量子力學的數學結構——狀態向量、複數振幅、哈密頓量、退火、干涉——的古典演算法,並且在你已經擁有的同一張 GPU 上運行。價值在於結構,而非量子位元。誠實地對待這個區別,是讓一個可用的框架與一個流行詞分道揚鑣的關鍵。

銀行和量化機構——包括高盛、摩根大通、匯豐銀行,以及 Multiverse Computing 等專業公司——已經積極研究並發表了關於量子及量子啟發方法在衍生性商品定價、蒙地卡羅風險和投資組合優化方面的論文。理論是公開的。但幾乎沒有人寫下如何將它整合到一個自主 Agent 中——一個能夠自主感知、決策、執行和學習的系統。而這正是我們將要建立的。

2. 量子到市場的對照表

在開始寫任何程式碼之前,你需要這份對照表。下面每個量子概念都有一個精確的交易類比。請將此部分視為後續所有內容的觀念契約。

機率振幅對應到信念——但帶有相位。 古典機率只是非負數。量子振幅是複數:每個都帶有大小和一個相位角。相位就是整個升級的關鍵。它讓兩個看漲訊號能夠相消干涉而抵消,或讓兩個弱訊號相長干涉成一個強訊號。一個對正機率進行平均的古典集合體,在物理上無法做到這一點——它最多只能做到稀釋。相位讓訊號可以主動互相否決。

糾纏對應到你無法獨立分解的相關性。 當兩個資產以一個連結的體制運作時——想想一個主要幣種和那些依附其流動性的迷因幣——你無法誠實地描述其中一個而不提及另一個。Agent 將此編碼為一個不可分離的狀態,它能捕捉到體制連結的共變動,而靜態相關性矩陣往往會將其扁平化並低估,尤其是在尾部。

哈密頓量對應到你的風險/回報成本函數。 在物理學中,哈密頓量 H 編碼了系統的能量。在交易中,你編碼你的目標——最大化預期回報,最小化變異數,遵守頭寸和預算限制——作為一個能量地形。最佳投資組合就是基態:H 的最低能量配置。投資組合建構變成了一個能量最小化問題,而這是一個被研究得非常透徹的問題。

測量與塌縮對應到執行。 在你送出訂單的瞬間,疊加態塌縮到一個實現的結果。Agent 的真正工作是選擇何時以及測量什麼,以便塌縮傾向於落在一個有利可圖的配置上。甚至還有一個內建的風險原則,類似於海森堡不確定性原理:你無法同時以無限的精確度鎖定一個頭寸的準確價格和它的準確動量。對其中一個要求更多確定性,就會犧牲對另一個的確定性。這是一個類比,而非金融法則——但它是一個有用的類比,稍後它會變成一個具體的倉位規模設定規則。

DiKrass -X- - inline image

3. 量子交易 Agent 的架構

Agent 是一個由六個模組組成的封閉迴圈。附在本篇文章中的架構圖顯示了完整的循環;以下是每個階段的作用。

DiKrass -X- - inline image

1. 感知。 攝取原始市場數據——訂單簿、OHLCV、資金費率、鏈上流量。將其標準化為一個特徵向量 x。這是普通的量化基礎設施;目前還沒有量子相關的東西。

3. 哈密頓量建構器。 將你的風險/回報目標加上限制條件轉換為一個 QUBO / Ising 哈密頓量 H。預算限制、風險厭惡度和預期回報在此處被整合到一個能量地形中。

4. 量子啟發式求解器。 透過模擬退火、在模擬器上運行的 QAOA 電路或張量網路求解器,找到 H 的基態——最佳資產選擇。這個模組就是你的投資組合優化器,並且被刻意設計成可替換的。

5. 透過測量進行決策。 將狀態塌縮為具體的頭寸和規模,並採用海森堡風格的規則,在不確定性高時縮小曝險。

6. 執行與回饋。 路由訂單,觀察已實現的盈虧,並更新振幅。測量結果成為明天的先驗——這是一個強化學習迴圈,讓 Agent 能夠適應,而不是運行一個僵化的策略。

4. 程式碼:將市場編碼為量子態

我們將使用 numpy 進行狀態數學運算,並依賴 qiskit / pennylane 的慣例來處理量子啟發式的部分。這裡不需要真正的量子硬體——它可以在筆記型電腦上運行。

干涉是整個重點,因此編碼必須讓訊號在計算機率之前以複數相加。每個 Alpha 模型都為每個市場情境貢獻一個複數振幅——大小等於信念,相位等於時機或體制對齊。你將所有模型的貢獻相加,然後才應用波恩規則。

python
1import numpy as np
2
3def combine_signals(contributions: np.ndarray) -> np.ndarray:
4 """
5 contributions: 複數矩陣,形狀為 [n_signals, n_scenarios]。
6 |value| = 模型對某個情境的信念,
7 angle = 其相位(時機 / 體制對齊)。
8 returns: 正規化後的狀態 |psi>,對應於所有情境。
9 """
10 amplitudes = contributions.sum(axis=0) # 訊號在此處干涉
11 return amplitudes / np.linalg.norm(amplitudes)
12
13# 情境:[上漲, 下跌, 盤整, 突破]
14# 兩個動能模型都傾向 '上漲' -- 但它們相位不同,因此部分抵消。
15signal_A = np.array([0.7+0j, 0.1+0j, 0.2+0j, 0.3+0j]) # 看漲,相位 0
16signal_B = np.array([0.6*np.exp(1j*2.7), 0.15, 0.2, 0.25]) # 看漲但 ~反相位
17
18psi = combine_signals(np.vstack([signal_A, signal_B]))
19
20# 每個情境的機率 = |振幅|^2 (波恩規則)
21probs = np.abs(psi) ** 2
22print(probs.round(3)) # -> [0.147 0.102 0.26 0.491]

關鍵一行是波恩規則:機率等於振幅大小的平方。因為兩個看漲訊號在平方之前是以複數相加,它們的相位反向分量會抵消,使得擁擠的「上漲」情境從天真的 0.76 被壓低到 0.147。Agent 自動淡化了過度相關的共識押注。這就是這個方法與單純機率平均集成之間具體、可衡量的差異,附在本篇文章中的干涉圖表並排顯示了相同的數字。

DiKrass -X- - inline image

5. 沒有人告訴你的困難部分:相位從哪裡來?

每一篇兜售「量子交易」的文章都悄悄地硬編碼了相位,並希望你沒注意到。在上面的程式碼片段中,我用手寫了 np.exp(1j\2.7)。在一個真實系統中,發明相位是整個研究問題*,假裝不是這樣是欺騙自己最快的方式。

所以,將相位視為一個一流的建模目標,而不是一個裝飾品。以下是一些有根據的推導方法,而不是靠猜測:

時機 / 循環相位。 將每個訊號通過希爾伯特轉換或小波分解,讀出主導循環的瞬時相位。兩個在同一個方向上觸發但處於不同循環階段的動能模型,確實應該部分抵消——這正是你想要偵測的擁擠情況。

領先-落後相位。 估計訊號與未來回報之間的交叉相關滯後。將該滯後轉換為一個角度。領先價格的訊號獲得一個相位;而落後、實際上只是在追趕的訊號則獲得另一個相位,因此它們會與領先者相消干涉,而不是重複計算。

體制相位。 將一個體制分類器(趨勢 vs 區間,高 vs 低波動)映射到一個角度上,使訊號的貢獻隨著體制的轉變而旋轉。一個突破模型和一個均值回歸模型自然會處於接近相反的相位。

紀律很簡單:如果你無法解釋一個訊號為什麼有它所擁有的相位,你就不能使用相位。 將所有東西都回退到相位 0,你就回到了一個古典集成——這很好,也很誠實。相位之所以強大,正是因為它得來不易。

6. 程式碼:將投資組合視為基態搜尋

在限制條件下的投資組合選擇是組合優化——在預算和風險限制下選出最佳資產子集。這正是退火所擅長解決的問題類型。我們將「持有哪些資產」編碼為一個 QUBO(二次無約束二元優化),這是 Ising 哈密頓量的古典對應形式。

python
1import numpy as np
2
3def build_portfolio_hamiltonian(expected_returns, cov, risk_aversion=1.0,
4 budget=3, penalty=5.0):
5 """
6 建立一個 QUBO 矩陣 Q,使得最小化 x^T Q x (x in {0,1}^n)
7 能選出最佳的 'budget' 個資產:最大化回報,最小化風險,
8 並對違反預算限制的行為施加軟性懲罰。
9 """
10 n = len(expected_returns)
11 Q = np.zeros((n, n))
12
13 # 回報(取負值,因為我們要最小化)加上來自共變異數的風險項
14 for i in range(n):
15 Q[i, i] += -expected_returns[i] + risk_aversion * cov[i, i]
16 for j in range(i + 1, n):
17 Q[i, j] += 2 * risk_aversion * cov[i, j]
18
19 # 預算限制 (sum x_i - budget)^2 作為軟性懲罰
20 for i in range(n):
21 Q[i, i] += penalty * (1 - 2 * budget)
22 for j in range(i + 1, n):
23 Q[i, j] += 2 * penalty
24 return Q
25
26def simulated_anneal(Q, steps=20000, T0=5.0):
27 """量子啟發式退火:緩慢地將系統冷卻到其基態。"""
28 n = Q.shape[0]
29 x = np.random.randint(0, 2, n)
30 def energy(x): return x @ Q @ x
31 e = energy(x)
32 for t in range(steps):
33 T = T0 * (1 - t / steps) # 線性降溫曲線
34 i = np.random.randint(n)
35 x_new = x.copy(); x_new[i] ^= 1 # 將一個資產翻轉進/出
36 e_new = energy(x_new)
37 # 總是接受改善,有時接受較差的移動(這就是它逃離局部最小值的方式)
38 if e_new < e or np.random.rand() < np.exp(-(e_new - e) / max(T, 1e-9)):
39 x, e = x_new, e_new
40 return x, e
41
42returns = np.array([0.12, 0.09, 0.15, 0.04, 0.11])
43cov = np.array([
44 [0.10, 0.02, 0.01, 0.00, 0.03],
45 [0.02, 0.08, 0.02, 0.01, 0.01],
46 [0.01, 0.02, 0.18, 0.00, 0.02],
47 [0.00, 0.01, 0.00, 0.03, 0.00],
48 [0.03, 0.01, 0.02, 0.00, 0.09],
49])
50Q = build_portfolio_hamiltonian(returns, cov, risk_aversion=2.0, budget=2)
51selection, ground_energy = simulated_anneal(Q)
52print("持有資產:", np.where(selection == 1)[0], "| 能量:", round(ground_energy, 3))

關於規模的一個誠實說明。對於五個資產,你不需要退火——你可以暴力破解所有 32 種組合。退火在數百個資產加上硬性限制條件時才真正體現其價值,因為此時搜尋空間會爆炸,精確求解器會卡住。在小規模下這樣寫的原因在於,其介面從不改變:將 simulated_anneal 替換為一個真正的後端——D-Wave 的退火器、Qiskit 模擬器上的 QAOA 電路,或 Multiverse 所使用的那種張量網路求解器——Agent 中的其他部分完全不需要改動。求解器是一個可插拔的元件。

7. 程式碼:Agent 迴圈(從感知到塌縮再到執行)

現在將它們連接起來。這是一個自主 Agent 的骨架——與 LLM Agent 使用的感知/決策/行動控制迴圈相同,但以量子風格的狀態作為其世界模型,而不是文字。

python
1class QuantumTradingAgent:
2 def __init__(self, universe, risk_aversion=2.0, budget=2, gross_leverage=1.0):
3 self.universe = universe
4 self.risk_aversion = risk_aversion
5 self.budget = budget
6 self.gross_leverage = gross_leverage
7 self.memory = [] # 回饋 / RL 緩衝區
8
9 def perceive(self, market):
10 contributions = self.model_conviction(market) # 你的 Alpha 模型 -> 複數矩陣
11 return combine_signals(contributions) # -> 所有情境的狀態 |psi>
12
13 def deliberate(self, market):
14 Q = build_portfolio_hamiltonian(
15 market["expected_returns"], market["cov"],
16 self.risk_aversion, self.budget)
17 selection, _ = simulated_anneal(Q)
18 return selection
19
20 def measure(self, psi, selection, market):
21 """
22 塌縮為訂單。這裡發生兩件事:
23 1) 一個來自情境狀態的 GLOBAL 信念閘(方向性 + 海森堡波動縮減)
24 2) 一個 PER-ASSET 權重,使得所選資產根據其自身的預期回報來設定規模
25 """
26 scenario_probs = np.abs(psi) ** 2
27 directional = scenario_probs[0] + scenario_probs[3] # P(上漲) + P(突破)
28 vol = market["volatility"]
29 gate = directional / (1.0 + self.risk_aversion * vol) # 在高波動 / 低信念時縮小
30
31 idx = np.where(selection == 1)[0]
32 if len(idx) == 0:
33 return {}
34 edge = np.clip(market["expected_returns"][idx], 0, None) # 只做多具有正預期回報的標的
35 weights = edge / edge.sum() if edge.sum() > 0 else np.ones(len(idx)) / len(idx)
36
37 sizes = self.gross_leverage * gate * weights
38 return {int(a): round(float(s), 4) for a, s in zip(idx, sizes)}
39
40 def act(self, market):
41 psi = self.perceive(market)
42 selection = self.deliberate(market)
43 orders = self.measure(psi, selection, market)
44 # execute(orders) <- 在此處路由到交易所 / 經紀商
45 self.memory.append((market, orders))
46 return orders

仔細看 measure(),因為早期的簡化版本有一個真正的缺陷:它對每個選中的資產應用相同的規模,忽略了每個資產實際上的好壞。這個版本透過兩個階段來解決這個問題。一個全域閘讀取情境狀態——方向性信念,即 P(上漲) + P(突破),除以波動率項。這個除法就是海森堡風格的規則在進行風險管理:市場越抗拒精確定價(即波動性越高),Agent 的總承諾就越小。然後,一個每資產權重將該預算按比例分配到所選標的,比例取決於它們各自的預期優勢,並拒絕做多任何預期回報為負的標的。信念設定你押注多少;每資產優勢設定這些注碼去哪裡。

8. 華爾街的現實檢驗

這個方法在哪裡真正能賺錢,又在哪裡只是一個漂亮的演示?在這裡具體說明,才能讓其他部分更可信。

在古典硬體上,當下真正的優勢:

大規模投資組合優化。 對於數百個資產和硬性限制條件,退火器和張量網路方法在處理組合數和限制條件方面,比單純的平均-變異數求解器更優雅,而且通常更快。這是發展最成熟、最不帶炒作色彩的應用。

透過量子振幅估計進行風險估計。 理論上,這在 VaR 和 CVaR 方面比古典蒙地卡羅方法提供了二次加速。這仍然是大銀行最積極研究的方向之一,因為風險評估運行成本高昂且持續不斷。注意一個但書:頭條新聞中的加速是理論上的漸近結果,當今的硬體在生產規模上還無法實現。

透過干涉進行訊號組合。 用帶有相位的信念來建模,使得擁擠、過度相關的交易能夠相互抵消,這是一個真正有用的重新框架,而且它今天就能在你現有的 GPU 上運行。這是本文中最具直接實用性的想法——前提是你誠實地解決了第 5 節中的相位問題。

仍然主要是研究階段:

在真實量子硬體上進行端到端衍生性商品定價。 原則上很有前景,但雜訊和量子位元數量在今天限制了它。

「量子機器學習」價格預測。 被過度炒作。將古典市場數據載入到量子狀態的成本,通常會吃掉你希望獲得的任何加速。對任何兜售這個的人要保持高度懷疑。

誠實的底線:這個量子啟發式 Agent 現在就可以建立並進行回測,因為每個模組都在古典硬體上運行。你捕捉到了結構性的想法——假設的疊加、針對擁擠的相消干涉、基於哈密頓量的優化——而無需等待容錯量子電腦。當硬體成熟時,你只需替換模組 4,並保留其餘部分。

DiKrass -X- - inline image

9. 在生產環境中真正會扼殺它的因素

每個策略在遇到市場之前看起來都很棒。在你冒險投入一美元之前,請內化以下四件會悄悄摧毀量子啟發式 Agent 的事情。

交易成本和滑點。 每當新數據到達時,干涉層就會重新調整信念,這會誘使 Agent 頻繁換手。手續費和滑點不在乎你的狀態向量有多優雅。直接在哈密頓量中加入一個周轉率懲罰項並重新運行——許多「優勢」在收取現實成本後就會消失。

過度擬合相位。 相位給了你一整組額外的自由參數,而自由參數正是回測說謊的方式。將相位調整到去年能賺錢,而明年卻會虧損,是極其容易的。在查看回報之前,先根據理論(第 5 節)固定相位規則,絕不要讓回測為你選擇它們。

跨迴圈的數據窺探。 因為這是一個封閉的回饋迴圈,資料洩漏會疊加。如果你的信念模型、共變異數估計或體制標籤稍微窺探了未來,整個 Agent 就會繼承這個謊言。使用整個迴圈進行前向測試,而不僅僅是單獨測試訊號。

共變異數的體制脆弱性。 QUBO 依賴於一個共變異數矩陣,而共變異數矩陣在你最需要它的時候會崩潰——在崩盤中,相關性會趨向於 1。在衝擊後的共變異數下測試基態選擇,而不僅僅是平靜市場下的那個,否則優化器會輕易地給你一個只在紙面上實現了多元化的投資組合。

10. 你的建置清單

如果你真的想部署這個東西,以下是操作的順序。

量子啟發式求解器開始——純 numpy 加上模擬退火。不需要硬體、帳戶或依賴項。

將手動調整的振幅替換為一個提供給 combine_signals 的學習型信念模型,並根據理論推導相位,而不是去擬合它們。

回測整個迴圈,包含成本,而不僅僅是訊號。收取現實的手續費和滑點,加入周轉率懲罰項,並進行前向測試。干涉和規模設定邏輯既是優勢的來源,也是自我欺騙的藏身之處。

只有在這個抽象層在模擬中證明了自己的價值之後,才應該轉向一個真正的後端——先使用 Qiskit 或 PennyLane 模擬器,然後是 D-Wave,最後才是硬體。根據設計,替換模組 4 只是一個一行程式碼的更改。

市場一直都是一個機率波。幾乎每個人仍然像對待一個單一數字一樣交易它——而這兩種觀點之間的差距,就是整個機會所在。

如果這篇文章重新定義了你對市場的看法,請轉發並追蹤。完整的開源 Agent 程式碼庫將於近期發布。 ⚛️

免責聲明。 非投資建議,也不保證回報。量子啟發並不意味著量子保證——讓這個方法奏效的大部分是披著量子外衣的嚴謹古典建模。使用真實成本回測所有內容;無論你是否準備好,市場都會塌縮你的波函數。

一鍵儲存

使用 YouMind AI 深度閱讀爆款文章

保存原文、追問細節、總結觀點,並在一個 AI 工作空間裡把爆款文章沉澱成可複用筆記。

了解 YouMind
寫給創作者

把你的 Markdown 變成乾淨的 𝕏 文章

圖片上傳、表格、程式碼區塊,往 𝕏 上手動重排太痛苦。YouMind 把整篇 Markdown 一鍵轉成乾淨、可直接發佈的 𝕏 文章草稿。

試試 Markdown 轉 𝕏

更多可拆解樣本

近期爆款文章

探索更多爆款文章