凯利公式(量化课堂)
转载量化课堂凯利公式,你用对了吗?
导语:众所周知,凯利公式揭露了信息论与赌博之间的本质联系,简约而不简单。 但是,重点来了!只有正确运用凯利公式,才能让你的净值增长如虎添翼。打开方式不对,就看不到成效。本文旨在给出凯利公式的正确使用方法,让我们了解在有限的信息里,如何下注能使得资本增值的速度最大化。
本文由JoinQuant量化课堂推出 。难度标签为进阶上,理解深度标签:level-0
作者:陈小米,宏观经济算命师
编辑:宏观经济算命师
某日,社区用户陈小米找到了本小编,说她在网上看到一篇凯利公式的介绍,但整个方法看着有点不严谨。后来经过我们的讨论,其假设确实有点牵强。所以后来我们一合计,凯利公式被人提到很多,网上的文章也很多,但总有点隔靴搔痒的感觉,同时社区内的有些朋友对于凯利公式不甚清楚。于是决定一起写篇东西吧,介绍介绍。
如果不去证明,只看凯利公式本身,它有着非常简洁的形式。在小编的量化体系中,凯利公式是基础中的基础。虽然基础,但是却是很重要的一环,可以说是小编整个量化体系的根基之一。
但须知差之毫厘,谬之千里。有如天龙八部中的易筋经,打开方式不对,你就看不到武功秘籍。而正确的使用凯利公式,有一个正确的方法论,才能让你的净值增长如虎添翼。
那怎么做呢?请继续往下看。
一、凯利公式产生的背景
人物介绍什么的就不多说了,总之,就是有那么一个牛人,找到了连续赌博中的最佳投注比例公式,横扫赌场。后来他又以此构建了一个对冲基金,战绩不俗。
这个人的大头像也不贴了,陈小米的帖子里面有。我们直接开始正文:
二、赌博怎么用凯利公式?
最早的凯利公式是运用在赌博游戏中的,我们先看看赌博情形下凯利公式的特殊形式:
f=pwin∗b−plossbf=pwin∗b−plossbf=pwin∗b−plossb
其中Pwin表示胜率,Ploss=1-Pwin,b表示赌赢了的赔率(扣除本金后的收益/本金)。f表示单次下注占总资金的比例。
就是这个精巧简洁的公式,将信息论与赌博之间的本质联系揭露出来,告诉我们在有限了解的信息下,如何下注能使得资本增值的速度最大化。
这个公式怎么来的,由于是普及向的文章,我们跳过了。各位就默认这个是对的就行:),真想深入,请看wiki链接:https://en.wikipedia.org/wiki/Kelly_criterion
一个简单的例子
假想一个赌博游戏。赢的概率是60%,输的概率40%。入场费随意交。如果赢了获得2倍的入场费金额(b=1),输则输掉入场费。小编有100元做本金,请问小编每次给多少入场费,若干次游戏后几何期望收益能最大?
答:f = (1×0.6-0.4)/1 = 0.2。
也就是说最佳的策略是每次投剩余本金的20%。
这块不难理解,带入公式就能算出来。
注意两点:
1.从概率的角度说,一个期望净收益为负的游戏是不值得参与的,凯利公式也完美的体现了这一点。还是上面的游戏,如果赢的概率40%,输的概率60%,那么,期望净收益就是(1×0.4-0.6) lt;0;求得的f为-0.2。
负数仓位意味着你有上中两策可以选。中策选择不下注,上策是诱骗别人来跟你下注。
2.赌博版凯利公式只有在稳赢(赢概率=100%)时才会支持押下全部本金,否则都是本金的一定比例。随着本金的减少,下的注也越来越少。如果没有交易费用,下注可无限分割,我们是亏不完的(留得青山在,不怕没柴烧)。
下图能更直观的看到凯利公式对仓位的控制:如果押注的比例限制在0和1之间,对应不同的胜率(Pwin)和赔率(b)时,f会在三维空间上形成一个曲面。这个曲面与f=0对应的平面相交的那条黑线就是期望为0所形成的曲线。

接下来我们在股票操作中构建一个类似上述的赌博模型,然后引入凯利公式。
三、把股票模型转换为赌博模型
下图来自《财富公式:玩转拉斯维加斯和华尔街的故事》,看看凯利的结果还不错嘛

股票的假设和赌博有点不一样。股票是一个连续的过程,未来某一个时刻的收益率不是固定的一个值,而是一个分布。
那么我们怎么做捏?
怎么做可以发挥各种想象力,我们提供一个思路。
首先,在西方那一套理论中,往往用随机游走来描述股价的波动:

怎么把模型转换成与赌博模型类似的呢?方法有很多,这里来一个简单粗暴的。设置一个止盈价格和止损线,碰到了就出局。如果取对数后的股价服从随机游走假设,并且初始点是上沿和下沿的正中间,按照理论,先碰到上沿和先碰到下沿的概率是一样的。(忽略漂移项)。

但是在实际情况中呢,股价不是所有的时候都服从这个随机游走模型。股价先碰到上沿的概率会高于先碰到下沿的概率。比如说,突然出一个利好,财报公布后超预期,降准降息啦,或者单纯的资金面涌入造成短时间多空失衡,等等。
我们管这些事件,或者与这些事件同时发生的一些现象称为信号。比如说,降息的事件本身,就是一个信号。利好之前可能会有人提前知道偷偷买,造成股价跌不下去,这个该跌不跌就是一个信号。资金的涌入造成成交量放大,这个成交量放大也是一个信号。

上图表示事件对股价形成了影响,整体概率分布向上偏移,先碰到止盈的概率大于先碰到止损的概率。
交易所做的事情,就是这么一个寻找信号的过程,找到有效信号,意味着信号背后的事件会使股价的概率分布偏离,赢的期望变大。同时我们设置止盈止损线,这样赔率也就固定了下来。
由此我们就把投资股票的过程转换成一个连续赌博的过程。信号发出就是我们入场点。止盈止损发生的时候,就是我们的出场点。赔率和损失率就是止盈止损与入场价格之差。一次入场和出场就相当于赌博模型中的单次赌博,单次赌博的仓位由凯利公式确定。
逻辑好通顺。
各位童鞋注意,这个信号嘛,是需要同学自己去找的(这就是你们要做的事情啊喂!找到有效的信号就可以赚钱了)。而一旦找到有效信号,由某种方法固化了胜率赔率,凯利公式就华丽登场了。
四、凯利公式登场以后呢?
前文的赌博公式中,赔一次会输掉押注的所有金额。而由于在股市中,我们不会一次性赔光本金,而是赔掉本金的一定比例。所以我们需要使用一般性的凯利公式:
f=pwinc−plossbf=pwinc−plossbf=pwinc−plossb
其中:
f:仓位比例
Pwin:赌赢的概率—股市上涨概率
Ploss:赌输的概率—股市下跌概率
b:赢钱率(资产从1增加到1 b)
c:损失率(资产从1减少到1-c)
假设我们找到了一个有效信号。并且根据历史上的统计,过去三年这个有效信号发生了1000次。以信号发出的价格为起点,在20%的正收益时止盈,在20%的负收益时止损。
那么在信号发出后,如果先触碰盈的次数570次,先触碰止损的次数430次(这里只是为了举例而做简化,实际中我们需要做更多的工作)。于是,我们就成功的把问题转换成了一个连续赌博的问题:有这么一种赌博,赢一次的赔率为20%,输一次的损失率为20%,赢率为57%
对应公式,有Pwin=0.57,Ploss=0.43,b=0.20,c=0.20
此时f=Pwin/c – Ploss/b = 0.57/0.20 – 0.43/0.20= 70%
也就是说,不管你现在剩余多少钱,应该买入剩余部分的70%的仓位。
接下来,我们用蒙特卡洛模拟的方法做一组测试,看看凯利公式是怎么发挥作用的。假设股票投机产生了T次信号。我们相应的按照上述参数随机生成胜率和赔率,做了T次投机。把这T次投机算成一组完整的投资过程,这样就会得到一个净值的序列。对于任意的T,我们将这个投资过程重复1000次,求净值的几何平数。
我们看看在不同的投机次数T下的效果:
T=100:

其中蓝线表示每次投机都是满仓;
绿线表示每次投机都是凯利公式给出的仓位(0.7);
红线是接近凯利公式的仓位(0.6);
还选了一个每次0.9的仓位,谁知道那个线的颜色是什么名字……
当T=100时,凯利公式仓位下净值增长最快,但是与其他仓位相比,优势不明显。
T=500:

此时,最接近凯利公式仓位的红线,尚能与凯利公式一战。其他仓位的净值已经与凯利公式拉开了距离。
T=1000:

各个仓位明显看到差距。凯利公式完胜!
说明如果想有效的应用凯利公式,你找到的信号不能太稀疏。否则的话随机的因素可能占据上风。但是随着你的交易次数增加,你的净值能否增长就是一个字:
大概率事件。
99.99%曰大概率。
接下来,还有些微小的工作:
加杠杆:
我们看看另外一种情况:现在你找到了一个信号,继续延续上文的方法,但止盈止损线都是2%。历史统计涨过2%的概率是0.7,跌破2%的概率是0.3。那么带入凯利公式,得到的f值是多少呢?
2000%,也就是20倍的押注。
这是什么鬼?!背后的实际意义是什么?
凯利公式在告诉你这个因子太好了,值得你作20倍的杠杆来操作么?如果是那样,我再贪心一点好不好,看下图,加到25倍显然就挫了。。。

所以要理解,凯利公式判断押注比例的时候,是综合赢钱期望和输赢之间的差距(类似于方差的概念)进行的。如果说:

中,c=0,计算出来的f是无穷大。在现实中就意味着找到了一个项目,要么赚钱,要么持平,怎么都不会亏。理论上,我们能借多少就要借多少啊!
但理论是理论,实际是实际。前文中隐含的前提是借钱没有摩擦,没有费用,也没有利息的。而在现实中,借钱是有成本的。一般人也借不到这么高的杠杆。
即使凯利公式告诉你要使用高杠杆,我们也不建议加过高的杠杆。除了上述的财务摩擦之外,还有如下原因:
黑天鹅
由于篇幅有限,以后有机会写文章介绍一下长尾效应和黑天鹅。简而言之,我们股票上所有的概率赔率,都是基于历史数据的。而现实中,小概率事件的概率往往会被低估。
所以说,如果凯利公式告诉你,要压大仓位,可千万要三思。你要是不加思考傻乎乎的信了,出了一件在模型历史统计之外的事情,爆仓分分钟教你做人。
这么说有点抽象,打个比方,假设股灾前,你找了一个很好的信号,比如跌5%时大概率会反弹的这种。然后如上文所述,凯利公式给你的仓位比例是10倍。你压了两倍杠杆,还嫌少,又配资加到了5倍。
接下来发生了股灾,小概率事件一个接一个。第一天直接击破止损,还没等你反应过来,就跌停了卖不出去。第二天开盘跌停了,卖不出去;第三天开盘跌停了,卖不出去……
就问你怎么办。
永远记住:这个世界充满了因果性和蝴蝶效应。模型只是一个近似的替代。
真正的本金是什么?
有人说,凯利公式计算的仓位总是偏大。其原因嘛,除了上文中提到的,实际股票收益率的分布具有长尾因素,导致极端情况发生的次数比预计要多以外,还有一个原因是很多人没明白凯利公式的投注比例所对应的本金到底是什么。
人们往往会认为凯利公式所针对投注比例是全资产,但其实上并不是,凯利公式所针对的投注比例是你可承受损失的资产。比如说,有一个私募,投入了1000w,但是有0.8的清仓线,其实只能承受200w的损失。那么在凯利公式里,f针对的本金其实只有200w,也就是说,如果f=0.7,你一次压上去的钱只有 200w*0.7=140w。
明白了没有?如果现在这个1000w亏的只剩 910w了,那么本金只有110w,一次下注的钱只能是110w0.7=77w
而如果这个1000w赚到了1150w,那么本金就变成了(1150w-800w)0.7=350w,需要压的数量就是350w*0.7=245w。
所以说,如果一个人虽然有100%的仓位,但是实际心理能承受的损失就是20%,那么此时就应该用这个20%作为本钱来带入凯利公式。如果用100%的仓位带入,结果会让你很烦躁。
差点忘了,那个错误的例子:
开头提到了,我们在网上找到了一个错误的例子。
注:后面的回测为错误例子
剖析一下:

我们画了一张图来理解本文的假设:

上面那段话的暗含的条件是,如果一年内最高价H=2,一年内最低价L=1,不论当前你的价格在那里,未来价格先碰到H的概率和先碰到L的概率都相等。
即Pwin = Ploss = 0.5的情况下,如果当前价为1.3, 此时该保持的仓位 f = (0.5×0.54-0.5×0.23)/(0.54×0.23) = 124.80%。
按照上文逻辑,挑选中信证券 (600030.SH)进行回测(如果仓位大于100%,则调整成100%):
1.中信证券

哇塞,比一直持有更赚钱。
到这里,你以为你真的就可以一招吃遍天下,用凯利就可以躺着赚钱了吗?且慢,换一个标的试试。
2.嘉实沪深300ETF

纳尼?大师的一世英名岂不是要栽在这张回测图上了。说好的收益最大化呢??是不是哪里出错了??
问题出在哪?
问题出在假设中,文中假设任意的股票任意位置,先触碰最高价和先触碰最低价的概率都是0.5,这显然是不合理的强假设。因此可能一个股票刚好回测效果比较好,另外一个股票回测效果就比较差。
如果假设改进一下,比如先判断一下目前是不是一个震荡中枢里。如果在震荡中枢里,我们假设先碰到震荡下沿和上沿的概率相等,都是0.5。如果突破上沿,说明新的趋势形成,可以满仓追进去。如果跌破下沿,说明反向趋势形成,暂时避开。我觉得可能更合理一些。(这只是一个猜想,大家有兴趣可以验证)
哇。。。
好啦,少年。真正赚钱的是找有效的因子or信号,使得Pwin尽可能大,b尽可能大。而这个因子or信号的挖掘,就是作为矿工孜孜不倦追求的终极目标了。当你找到这样一个神奇的因子,你需要做的就是,用一种方法将其近似成连续的赌博模型。接下来,凯利公式就会给你指引一条正确的道路。
行动起来吧。加入宽客大军。
彩蛋:
评论区有朋友问,如果长期即碰不到上沿也碰不到下沿怎么办。其实这个问题就出在将股票模型转换为连续赌博模型的方法上,这就是该方法的缺陷所在。
如果各位仔细看,可以看出本篇文章中转换为赌博模型的方法,其实是加强了对赔率的控制,舍弃了对时间的控制。因为我们不知道何时才会触碰上下沿。
如果点赞转发数高,我再写一个固定时间,模糊赔率的股票投资至赌博模型转换方法。
本文由JoinQuant量化课堂推出,版权归JoinQuant所有,非商业转载请注明出处。