在我们进行投资或任意性质的赌Bo时,假设我们可以预估出胜率、赢时的利润率、输时的亏损率,那我们应该拿出多少本金进行投资呢?这就是凯利公式要回答的问题。
注意上面的话,凯利公式有个前提,就是胜率、赢时的利润率、输时的亏损率 要已知,你可以通过其他技术手段或者经验来进行预估。
用数学公式表示则为:
f ( p , W , L ) = p ? W ? ( 1 ? p ) ? L W ? L f(p,W, L) = \frac{p*W - (1-p)*L }{W*L} f(p,W,L)=W?Lp?W?(1?p)?L?
其中:
这里每次投注的比例,是以现在的钱为基准。假设第一次手里有100,投注比例是20%,赢了之后变120了。那么下次的20%就是 120 * 20% = 24元
我们举几个实际例子来感受一下:
python公式很简单,就是按照上面公式写一下即可
def kelly_buy_ratio_strategy(
p: float, # 获胜概率
W: float, # 获胜时的盈利,或止盈点。例如:当上涨时预计盈利为20%,则rW=0.2
L: float, # 失败时的亏损,或止损点。例如:当下跌10%时止损,则rL=0.1
):
"""
根据“凯利公式”决定买入的仓位比例
"""
buy_ratio = (p * W - (1 - p) * L) / (W * L)
if buy_ratio < 0:
buy_ratio = 0
return buy_ratio
该节讲解凯利公式的推导,不感兴趣可以不看。
假设有一种赌Bo游戏,胜率固定为 p p p,盈利率固定为 W W W,亏损率固定为 L L L。(注意这里 p , W , L p, W, L p,W,L 都是常量)
假设我们进行 N N N 次游戏,那么将会有 N ? p N \cdot p N?p 次获胜, N ? ( 1 ? p ) N \cdot (1-p) N?(1?p) 次失败。
我们用 A n A_n An? 来表示第 n n n次的本金,假设我们每次投注的比例为 x x x,则第 A n + 1 A_{n+1} An+1? 次的金额则为:
A n + 1 = { A n ( 1 + x W ) if?win A n ( 1 ? x L ) if?lose A_{n+1} = \begin{cases} A_n(1+x W) &\text{if win} \\ A_n(1-x L) &\text{if lose} \end{cases} An+1?={An?(1+xW)An?(1?xL)?if?winif?lose?
我们的初始本金为 A 0 A_0 A0?,进行 N N N 次游戏,我们的本金变化可能如下:
A 1 = A 0 ( 1 + x W ) ????? w i n A 2 = A 1 ( 1 ? x L ) ????? l o s e A 3 = A 2 ( 1 + x W ) ????? w i n ? A n ? 1 = A n ? 2 ( 1 ? x L ) ????? l o s e A n = A n ? 1 ( 1 + x W ) ????? w i n \begin{aligned} A_1 &= A_0 (1+xW) ~~~~~ win \\ A_2 &= A_1 (1-xL) ~~~~~ lose \\ A_3 &= A_2 (1+xW) ~~~~~ win \\ \cdots \\ A_{n-1} & = A_{n-2} (1-xL) ~~~~~ lose \\ A_{n} & = A_{n-1} (1+xW) ~~~~~ win \\ \end{aligned} A1?A2?A3??An?1?An??=A0?(1+xW)?????win=A1?(1?xL)?????lose=A2?(1+xW)?????win=An?2?(1?xL)?????lose=An?1?(1+xW)?????win?
上述式子中,每次win和lose都是随机的,但一共有 N ? p N \cdot p N?p 次胜 和 N ? ( 1 ? p ) N \cdot (1-p) N?(1?p) 次败。
我们现在消除 A 1 , A 2 , … , A n ? 1 A_1, A_2, \dots, A_{n-1} A1?,A2?,…,An?1?,则式子变为:
A n = A 0 ( 1 + x W ) ( 1 ? x L ) ( 1 + x W ) ? ( 1 ? x L ) ( 1 + x W ) = A 0 ( 1 + x W ) N p ( 1 ? x L ) N ( 1 ? p ) \begin{aligned} A_n & = A_0 (1+xW)(1-xL) (1+xW)\cdots (1-xL)(1+xW) \\\\ &= A_0 (1+xW)^{Np}(1-xL)^{N(1-p)} \end{aligned} An??=A0?(1+xW)(1?xL)(1+xW)?(1?xL)(1+xW)=A0?(1+xW)Np(1?xL)N(1?p)?
上述式子中, A 0 , W , L , N , p A_0,W,L,N,p A0?,W,L,N,p都是常量,只有投注比例 x x x 是变量,因此当自变量 x x x 变化时,最终的金额 A n A_n An? 也会变。所以我们的目的就是求一个 x x x,使得 A n A_n An? 最大。
因此,我们重新表示一下这个式子:
A n ( x ) = A 0 ( 1 + x W ) N p ( 1 ? x L ) N ( 1 ? p ) A_n (x) = A_0 (1+xW)^{Np}(1-xL)^{N(1-p)} An?(x)=A0?(1+xW)Np(1?xL)N(1?p)
接下来让 A 0 A_0 A0?除过去,式子变为:
A ′ ( x ) = A n A 0 = ( 1 + x W ) N p ( 1 ? x L ) N ( 1 ? p ) A'(x) = \frac{A_n}{A_0} = (1+xW)^{Np}(1-xL)^{N(1-p)} A′(x)=A0?An??=(1+xW)Np(1?xL)N(1?p)
此时我们发现,求 A n ( x ) A_n(x) An?(x) 最大 和 求 A ′ ( x ) A'(x) A′(x) 最大是等价的。因此,我们就可以消除 A 0 A_0 A0?了。之后我们再对两边开 N N N次方根,式子变为:
A ′ ′ ( x ) = A ′ ( x ) 1 n = [ ( 1 + x W ) N p ( 1 ? x L ) N ( 1 ? p ) ] 1 n = ( 1 + x W ) p ( 1 ? x L ) ( 1 ? p ) A''(x) = A'(x)^{\frac{1}{n}} = [(1+xW)^{Np}(1-xL)^{N(1-p)}]^{\frac{1}{n}} = (1+xW)^{p}(1-xL)^{(1-p)} A′′(x)=A′(x)n1?=[(1+xW)Np(1?xL)N(1?p)]n1?=(1+xW)p(1?xL)(1?p)
我们同样发现,求 A ′ ( x ) A'(x) A′(x) 最大 和 求 A ′ ′ ( x ) A''(x) A′′(x) 最大也是等价的。因此,这次我们就消除了 N N N 。为了让式子更简单,我们两边再取对数,式子变为:
A ′ ′ ′ ( x ) = ln ? A ′ ′ ( x ) = p ln ? ( 1 + x W ) + ( 1 ? p ) ln ? ( 1 ? x L ) A'''(x) = \ln A''(x) = p \ln (1+xW) + (1-p) \ln (1-xL) A′′′(x)=lnA′′(x)=pln(1+xW)+(1?p)ln(1?xL)
同样,求 A ′ ′ ( x ) A''(x) A′′(x) 最大 和 求 A ′ ′ ′ ( x ) A'''(x) A′′′(x) 最大也是等价的。最终,我们将一开始的式子就化简为了对下式求最大值:
A ′ ′ ′ ( x ) = p ln ? ( 1 + x W ) + ( 1 ? p ) ln ? ( 1 ? x L ) A'''(x) = p \ln (1+xW) + (1-p) \ln (1-xL) A′′′(x)=pln(1+xW)+(1?p)ln(1?xL)
求最大值嘛,让导数等于0即可。即:
d A ′ ′ ′ ( x ) d x = p W 1 + x W + ( 1 ? p ) ? L 1 ? x L = 0 \frac{d A'''(x)}{dx} = p \frac{W}{1+xW} + (1-p) \frac{-L}{1-xL} = 0 dxdA′′′(x)?=p1+xWW?+(1?p)1?xL?L?=0
到这里就简单多了,我们将 x x x解出来,最终得:
x = p ? W ? ( 1 ? p ) ? L W ? L x = \frac{p*W - (1-p)*L }{W*L} x=W?Lp?W?(1?p)?L?
即,当胜率为 p p p,胜利时收益率为 W W W,失败时亏损率为 L L L时,最佳的投注比例 x = p ? W ? ( 1 ? p ) ? L W ? L x = \frac{p*W - (1-p)*L }{W*L} x=W?Lp?W?(1?p)?L?
凯利公式,以及一个横扫股圈的男人 : https://www.bilibili.com/video/BV1sz4y1w7Hj/
凯利公式是啥?(李永乐): https://www.bilibili.com/video/BV1Qt41197GY/