← 返回文章列表
June 23, 2026
5 分鐘閱讀

策略的凱利公式:如何確定倉位大小並分配資本

策略的凱利公式:如何確定倉位大小並分配資本
#風險管理
#凱利公式
#money management
#倉位大小
#量化交易
📊
Part 5 of 5 · Collection
Portfolio Construction & Risk

正期望策略也可能因為下注規模失誤而爆倉。我們從公式推導一路講到策略組合,剖析凱利公式:為什麼 full Kelly 很危險,分數凱利如何用一半的波動率換來 75% 的增長,以及在量化交易中真正可用的倉位配方是什麼。文章中段有一個互動式計算器,讓你直觀看到凱利比例如何牽動收益與風險。

任何策略都必須回答的那個問題

你有一個具備正向優勢(edge)的策略:長期來看它能賺錢。剩下的只有一個細節——單筆交易該投入多少比例的資本,或者一個策略該分配多少資本。

這不是次要問題,而是核心問題。正的數學期望並不能讓你免於爆倉:押注太多——一連串失利就會把賬戶拖進一個統計上無法迴歸的區域(見 盈虧的不對稱性)。押注太少——你又會把大部分潛在增長白白留在桌上。

凱利公式給出了精確答案:它是那個能最大化長期增長速度的資本比例——是幾何增長,而非算術增長。正是幾何增長決定了你的賬戶在一千筆交易後會落在哪裡,因為收益是相乘的,而不是相加的(見 收益的乘法本質)。

公式從何而來:最大化資本的對數

凱利(1956)以及之後索普的核心思想是:需要最佳化的不是單筆交易的期望利潤,而是最終資本的期望對數。對數的出現並非偶然——它是唯一一個在最大化時能讓資本以最大幾何速度增長的函數。

二元情形:有兩種結果的下注

設以機率 pp,下注每單位帶來淨賠付 bb(賠率),而以機率 q=1pq = 1 - p,我們輸掉本金。我們押上資本的比例 ff。一筆交易後,贏時資本乘以 (1+fb)(1 + fb),輸時乘以 (1f)(1 - f)

期望對數增長:

g(f)=pln(1+fb)+qln(1f)g(f) = p \ln(1 + fb) + q \ln(1 - f)

ff 求導並令其為零:

g(f)=pb1+fbq1f=0g'(f) = \frac{pb}{1 + fb} - \frac{q}{1 - f} = 0

解出來就是凱利公式:

f=pbqb=pqbf^{*} = \frac{pb - q}{b} = p - \frac{q}{b}

用文字說:最優比例等於你的優勢除以賠率。沒有優勢(pb=qpb = q)——就不下注。

示例

某策略在 55% 的交易中獲勝,賠付比為 1:1(b=1b = 1):

f=pqb=0.550.451=0.10f^{*} = p - \frac{q}{b} = 0.55 - \frac{0.45}{1} = 0.10

full Kelly 要求每筆交易拿 10% 的資本去冒險。記住這個數字——下文我們會看到,為什麼幾乎沒人應該恰好押這麼多。

連續情形:用收益率代替下注

在交易中,一筆交易很少表現為只有兩種結果的下注——存在的是一個收益率分佈。對於單期均值為 μ\mu、方差為 σ2\sigma^2 的收益率,在槓桿(比例)ff 下的期望對數增長近似等於:

g(f)fμ12f2σ2g(f) \approx f\mu - \tfrac{1}{2} f^{2}\sigma^{2}

最大值在以下處取得:

f=μσ2\boxed{\,f^{*} = \dfrac{\mu}{\sigma^{2}}\,}

這就是著名的凱利連續形式(也叫默頓比例)。而最優點處的增長速度與夏普比率 SR=μ/σ\mathrm{SR} = \mu / \sigma 的關係優美到了極致:

g(f)=μ22σ2=SR22g(f^{*}) = \frac{\mu^{2}}{2\sigma^{2}} = \frac{\mathrm{SR}^{2}}{2}

一個值得掛在牆上的結論:組合的最大幾何增長速度等於其夏普比率平方的一半。夏普翻倍——資本增長速度就翻四倍。

為什麼 full Kelly 太過頭了

公式給出的是關於增長的數學最優。但這個最優有一個公式沒有說出的代價:路徑的可怕波動和回撤,任何真實賬戶、任何真實的人都會在這上面崩潰。

偏離最優點的幾何

把比例 cfc \cdot f^{*}(其中 cc 是凱利乘子:c=1c = 1 是 full Kelly,c=0.5c = 0.5 是 half Kelly)代入增長公式。相對於最大值,我們得到:

g(c)g(f)=2cc2\frac{g(c)}{g(f^{*})} = 2c - c^{2}

收益相對於凱利比例:增長拋物線在最優點處達到峰值,越過之後便是斷崖

這條拋物線用一行字講完了風險管理的全部故事:

乘子 cc 增長佔比 2cc22c - c^2 波動率 評註
0.25 (quarter) 43.8% 25% 用四分之一的風險拿到近一半的增長
0.50 (half) 75.0% 50% 實戰者的黃金中道
1.00 (full) 100.0% 100% 增長最大,波動瘋狂
1.50 75.0% 150% 與 half 相同的增長,但風險高三倍
2.00 (double) 0.0% 200% 沒有增長,風險最大
> 2.00 負值 即便 edge 為正也會爆倉

三個結論:

  1. half Kelly 用一半的波動率拿走 75% 的增長。 從風險/收益比來看,這遠好於 full Kelly。
  2. 拋物線關於 c=1c = 1 對稱。1.5×1.5\times 凱利得到的增長與 0.5×0.5\times 相同,但波動高三倍。過頭比不足受到的懲罰更狠。
  3. 2×2\times 凱利處增長歸零,再往後就變成負的。即便是一個能贏的策略,過於激進的倉位也會殺死資本。

full Kelly 的回撤:一個讓人清醒的公式

回撤風險隨下注規模上升:平穩的曲線對比深深的塌陷

對於連續模型,資本曾經跌到初始值某個比例 α\alpha 的機率等於:

P(drawdown to α)=α2ccP(\text{drawdown to } \alpha) = \alpha^{\frac{2 - c}{c}}

代入各凱利檔位——就得到這張表,看完之後 full Kelly 就不再顯得有吸引力了:

乘子 cc P(曾經 −50%) P(曾經 −75%)
1.00 (full) 50% 75%
0.50 (half) 12.5% 1.6%
0.25 (quarter) 0.78% 0.006%
2.00 (double) 100% 100%

在 full Kelly 下,賬戶在某個時刻經歷 50% 回撤的機率等於 50%。這不是尾部情景——這是拋硬幣。half Kelly 把它壓到 12.5%,quarter Kelly——壓到不到一個百分點。而且這還是在理想化的高斯模型裡;現實中的肥尾會讓實際回撤更深。

計算器:調整凱利比例——觀察收益與風險

拖動滑塊。上面兩個設定策略的優勢(獲勝機率和賠付率),下面那個是凱利乘子 cc。看資本增長速度和深度回撤機率如何同時變化。注意文章的主線情節:當從 half 移向 full Kelly 時,增長只漲了一點點,而回撤風險——成倍上升。

凱利計算器
交易獲勝機率55%
賠付率(盈利 : 虧損)1.0
凱利比例(乘子 c)0.50x
拖動滑塊。
10.0%
full Kelly f*
5.0%
你的下注 c·f*
75%
相對最大值的增長
x43
1000 筆交易後的資本
0.50x
波動率
13%
回撤 ≥50% 的風險
2%
回撤 ≥75% 的風險
+0.375%
每筆交易的對數增長
c = 0最優 (full Kelly)c = 2:增長歸零

把凱利比例滑塊在 0.5 和 1.0 附近來回撥一撥:相對最大值的增長從 75% 升到 100%,而 50% 回撤的風險卻從 13% 跳到 50%。這正是專業人士活在拋物線左半邊的原因。

分數 Kelly 作為行業標準

嚴肅的管理人幾乎從不押 full Kelly。典型區間是 1/41/41/21/2 凱利。除了回撤之外,還有四個根本性的理由去削減比例。

1. 參數估計誤差。 公式假設你知道真實的 ppbbμ\muσ\sigma。而實際上你是在用有限樣本去估計它們。增長函數又是不對稱的:高估優勢會把你推到最優點之外,那裡增長下跌的速度比同等幅度低估時增長上漲的速度更快。如果真實凱利為 ff^{*},而你帶誤差地估計了它,那麼系統性地押少一些會更安全。粗略規則:估計存在不確定性時,把比例減半。

2. 非平穩性。 策略的優勢不是常數——市場狀態會變,edge 會衰減,競爭對手會複製你的想法。用昨天的資料算出的凱利,到了明天可能就偏高了。分數乘子是應對 edge 衰減的緩衝墊。

3. 肥尾。 高斯公式 f=μ/σ2f^{*} = \mu/\sigma^2 低估了極端波動的風險。在現實中具有重尾的分佈上,它會系統性地下注過頭。分數 Kelly 在一定程度上補償了這一點。

4. 業務上回撤的成本。 對做市商而言,回撤不只是心理問題。它意味著追加保證金、在最糟糕的時刻被迫減倉、投資者資本流出、融資成本上升(見 funding rates 如何殺死槓桿)。一條平滑的資本曲線本身就有獨立的價值,而凱利公式裡並沒有這一項。

策略組合的 Kelly

組合的矩陣凱利:協方差矩陣把資本分配到各個策略

到目前為止我們談的都是單一策略。但真正的問題是複數意義上的為多個策略選擇凱利:你有好幾個策略,需要在它們之間分配資本。

樸素的做法——為每個策略單獨算凱利再相加——是災難性地錯誤,因為它忽略了相關性。兩個高度相關的策略,本質上就是一個加倍的下注,總風險必須按一個來算。

矩陣形式

對於期望收益向量 μ\boldsymbol{\mu} 和協方差矩陣 Σ\boldsymbol{\Sigma},一次性求出所有策略的最優比例向量:

f=Σ1μ\boxed{\,\mathbf{f}^{*} = \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}\,}

最優點處的增長速度推廣為組合夏普的平方:

g(f)=12μΣ1μ=12SRportfolio2g(\mathbf{f}^{*}) = \tfrac{1}{2}\, \boldsymbol{\mu}^{\top} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu} = \tfrac{1}{2}\,\mathrm{SR}_{\text{portfolio}}^{2}

請注意:Σ1μ\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu} 正是最大夏普組合(切點組合)的方向。凱利和均值-方差最佳化是同一枚硬幣的兩面:凱利只是把槓桿水平固定在那個能最大化幾何增長的水平上。

協方差逆矩陣在做什麼

  • 相關的策略分攤風險預算。 如果兩個策略幾乎相同,矩陣會把它們的總比例削減到一個策略的水平——自動完成,不需要手工打補丁。
  • 不相關的策略獲得分散化溢價。 它們可以保持在接近各自單獨的規模,而組合的總夏普會高於其中任何一個。
  • 負相關的策略可能獲得加大的比例——它們互相對沖,矩陣會鼓勵這一點。

關於估計 Σ\boldsymbol{\Sigma} 的警告

協方差矩陣求逆在數值上是不穩定的:在有噪聲的估計上,Σ1\boldsymbol{\Sigma}^{-1} 會把微小誤差放大成離譜的權重。協方差向對角線的收縮(shrinkage)、槓桿約束以及同一個分數乘子都是必須的。沒有這些,矩陣凱利會給出在回測上漂亮、在實盤中致命的比例。

量化交易與做市的修正

純粹的公式活在一個無菌的世界裡。在真實的引擎中需要做修正。

  • 手續費和滑點 會削減有效優勢。請用扣除所有成本之後的收益率來算凱利,否則你會系統性地下注過頭。
  • 下注的離散性和手數 讓你無法恰好押到 ff^{*}——請向下取整,而不是向上。
  • 非平穩的 edge 需要隨時間重新計算:用帶半衰期的滑動視窗去估計 μ\muσ\sigma,而不是用全部歷史。
  • 回撤約束。 在凱利之上設一個硬上限:最大回撤、最大槓桿、單策略最大比例。存在正式的帶回撤約束的凱利版本(Bassett、Boyd),但實踐中一個簡單的上限就夠了。
  • 誠實評估 edge。 最大的錯誤是把樣本內(in-sample)測出來的優勢餵給凱利。只取樣本外(out-of-sample)的估計,走 walk-forward,扣除手續費之後。喂進公式的 edge 被高估了——出來的下注就被高估了。

配方:如何應用

  1. 誠實地評估優勢。 樣本外、走 walk-forward、扣除手續費和滑點。這是最重要的一步——輸入端的垃圾會在輸出端變成爆倉。
  2. 算出 full Kelly。 離散結果用二元式 f=pq/bf^{*} = p - q/b,收益率用連續式 f=μ/σ2f^{*} = \mu/\sigma^2
  3. 取一個分數。 預設是 full Kelly 的 1/41/41/21/2。edge 越不穩定——乘子就越小。
  4. 組合就用矩陣算。 f=Σ1μ\mathbf{f}^{*} = \boldsymbol{\Sigma}^{-1}\boldsymbol{\mu},對協方差做收縮,然後用同一個分數乘子。
  5. 設硬性上限。 單倉位上限、槓桿上限、回撤限制——凌駕於一切之上。
  6. 重新計算。 隨著估計的更新,在不確定性上升和 edge 衰減時削減比例。

程式碼

import numpy as np

def kelly_binary(p, b):
    """p — 获胜概率,b — 每 1 单位下注的净赔付率。"""
    q = 1 - p
    return (b * p - q) / b          # = p - q/b

def kelly_continuous(mu, sigma):
    """mu, sigma — 单期收益率的均值和标准差(同一单位)。"""
    return mu / sigma ** 2

def kelly_portfolio(mu, cov, shrink=0.0):
    """策略组合的矩阵凯利。
    mu  — 期望收益向量;
    cov — 收益率的协方差矩阵;
    shrink — 向对角线收缩的系数(0..1),用于求逆的稳定性。"""
    cov = np.asarray(cov, float)
    if shrink:
        cov = (1 - shrink) * cov + shrink * np.diag(np.diag(cov))
    return np.linalg.solve(cov, np.asarray(mu, float))

def sized(f_star, kelly_fraction=0.25, cap=0.2):
    """带比例硬上限的分数凯利。"""
    return float(np.clip(f_star * kelly_fraction, -cap, cap))

f = kelly_binary(p=0.55, b=1.0)    # 0.10 — full Kelly
print(sized(f))                    # 0.025 — quarter Kelly,安全的规模

常見錯誤

  • 在樣本內 edge 上用凱利。 最昂貴的錯誤。被高估的優勢 → 下注過頭 → 負增長。
  • 忽略策略之間的相關性。 單個凱利之和不等於組合凱利。
  • 在實盤中用 full Kelly。 增長的數學最大值,但有 50% 的機率回撤掉一半本金。幾乎不適合任何人。
  • 在不穩定的 edge 上用凱利。 如果優勢在衰減,公式會系統性地高估下注。
  • 混淆目標。 凱利最大化的是資本的幾何增長——不是夏普,不是保持盈利的機率,也不是舒適度。如果你更看重曲線的平滑,那就有意識地押分數凱利。

總結

凱利公式用一個最大化長期幾何增長的公式,回答了任何策略的核心問題——押多少:下注用 f=pq/bf^{*} = p - q/b,收益率用 f=μ/σ2f^{*} = \mu/\sigma^2,組合則用 f=Σ1μ\mathbf{f}^{*} = \boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}

但 full Kelly 是關於增長的數學最優,而非關於存活的最優。分數 Kelly(1/41/41/21/2)用成倍更小的波動和回撤,拿走了大部分增長。所以關於為策略選擇凱利這個問題,實戰上的答案是這樣的:誠實地算出 full Kelly——然後只押它的一個分數,並凌駕於硬性風險限額之上。


相關閱讀:

免責宣告:本文提供的資訊僅用於教育和參考目的,不構成財務、投資或交易建議。加密貨幣交易涉及重大損失風險。

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

緊跟市場步伐

訂閱我們的時事通訊,獲取獨家 AI 交易見解、市場分析和平台更新。

我們尊重您的隱私。您可以隨時退訂。