https://zhuanlan.zhihu.com/p/20849995
陈小米· 9 个月前
今天我们介绍一个神奇的人,和他神奇的公式。目前网络上传播较广的一篇讲凯利公式前世今生的文章,个人认为深度不够,而且思路是有问题的。大家不要看多了走偏路。最近也花了一些力气做梳理,把这篇分享出来,尽量做到讲对,讲透,也是提醒各位,低头挖矿,不要搞错了挖矿的初衷。
一、故事背景
市场不好的时候,我们总是会犹豫,满仓?半仓?还是空仓?有没有一个科学的办法给出一个标准答案呢?下面来看看仓位管理神器——凯利公式。
投资(ji)就是一场赌博。像索普、香农等很多投资大师早期都对研究赌博业的秘密情有独钟,科学家们总是希望从理论上找到赌博游戏的必胜策略,使得一场游戏中赢的概率远远高过输的概率。
凯利就是这样一个大师。他是香农(信息论创始人)在贝尔实验室的同事,这个来自德克萨斯州、爱摆弄手枪、喜欢一根接一根抽烟的狂野硬汉,干过很多恶作剧,特别喜欢将填满塑料的子弹射进他客厅的墙壁里来戏弄家里暂住的客人。他的研究领域从量子物理学到电视信号解码,发明了能够准确模拟人类声音的电脑设备。最广为人知的研究贡献,便是将香农的信息论运用到了赛马赌博中。
凯利用这样一个精巧简洁的公式,将信息论与赌博之间的本质联系揭露出来,告诉我们在有限了解的信息下,如何下注能使得资本增值的速度最大化。
二、赌博怎么用凯利公式?
最早的凯利公式是运用在赌博游戏中的,我们先看看赌博情形下凯利公式的特殊形式:
特殊形式凯利公式的证明过程(此处感谢@程峰的建议)
我们可以做一个简单的证明。资金曲线asset对f求导,就可以得到特殊形式下的凯利公式。
In[0]:
from sympy import f,b,pwin = symbols('f b pwin')#资金曲线assetasset = pwinlog(1 + bf) + (1 - pwin)log(1-f)#资金曲线增长最大,即asset对f求导=0时f的值solve(diff(asset,f),f)
Out[0]:
[(b*pwin + pwin - 1)/b]
举个简单的例子
假想一个游戏。赢的概率是60%,输的概率40%。入场费随意交。如果赢了获得2倍的入场费金额(1赔1),输则输掉入场费。小米有100元做本金,请问小米每次给多少入场费,理论上4次游戏后几何期望收益能最大?
然后我拿凯利公式算了一下,最佳的策略是每次投剩余本金的20%。
f = (1×0.6-0.4)/1 = 0.2。
基于上述的例子,做个简单的蒙特卡洛模拟实验(进行200次游戏):
In[1]:
from pandas import DataFramebase = 100pwin = 0.6ploss = 1-pwinb = 1c = 1rnd_position = 0.25rnd_position2 = 0.15kelly_position = (pwinb - ploss)/bstopline = 1print 'kelly position is %s'%kelly_positionport_A = DataFrame()port_B = DataFrame()port_C = DataFrame()port_D = DataFrame()#重复模拟次数for i in range(1000): port1 = [base] port2 = [base] port3 = [base] port4 = [base] #游戏进行次数 for step in range(200): rnd = random.random() if rnd < pwin: next_step = b else: next_step = -c if port1[-1] > base(1-stopline): port1.append(port1[-1](1+next_step)) else: port1.append(port1[-1]) if port2[-1] > base(1-stopline): port2.append(port2[-1](1+next_stepkelly_position)) else: port2.append(port2[-1]) if port3[-1] > base(1-stopline): port3.append(port3[-1](1+next_steprnd_position)) else: port3.append(port3[-1]) if port4[-1] > base(1-stopline): port4.append(port4[-1](1+next_steprnd_position2)) else: port4.append(port4[-1]) port_A[i] = port1 port_B[i] = port2 port_C[i] = port3 port_D[i] = port4plt.figure(figsize = (8,5))plt.plot(exp(log(port_A.T).sum()/1000),label = 'port1:full')plt.plot(exp(log(port_B.T).sum()/1000),'*',label = 'port2:kelly')plt.plot(exp(log(port_C.T).sum()/1000),label = 'port3:0.25')plt.plot(exp(log(port_D.T).sum()/1000),label = 'port4:0.15')plt.legend(loc = 0)print '\n不同组合的几何期望收益'print 'full position %s'%exp(log(port_A.T).sum()/1000).iloc[-1]print 'kelly position %s'%exp(log(port_B.T).sum()/1000).iloc[-1]print 'position = 0.25 %s'%exp(log(port_C.T).sum()/1000).iloc[-1]print 'position = 0.15 %s'%exp(log(port_D.T).sum()/1000).iloc[-1]
Out[1]:
图为进行200次游戏之后几何期望资金曲线的情况
凯利无疑是增长最快的!
从另一个角度,我们来理解一下
不同赔率下,赢的概率多大我们会选择入场参与游戏?
还是上面的游戏,如果赢的概率40%,输的概率60%,那么,期望净收益就是(1×0.4-0.6)< 0;从概率的角度说,一个期望净收益为负的游戏是不值得参与的,求得的f小于0,也就是不下注。
下面看一下不同赔率下一个游戏赌赢的概率为多少才值得参加?
同样,用实验来观察:
In[2]:
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Db = np.linspace(20,1,20)pwin = np.linspace(0,1,20)b,pwin = np.meshgrid(b,pwin)kelly = (bpwin-(1-pwin))/b(b*pwin-(1-pwin)>=0)zero = 0fig = plt.figure(figsize = (10,6))ax = fig.gca(projection = '3d')surf = ax.plot_surface(b,pwin,kelly,rstride=1, cstride=1,cmap = plt.cm.coolwarm)ax.plot_surface((1-pwin)/pwin,pwin,0)ax.set_xlabel('b 赔率')ax.set_ylabel('pwin 赢概率')ax.set_zlabel('kelly 下注比例')fig.colorbar(surf,shrink = 0.6,aspect = 10)
Out[2]:
- 如果一次赌博赔率越大,在赢的概率较小的情况下,凯利公式就开始提示要下注啦。(如图赔率为20时,只需要10%的赢率就可以入场玩啦)
- 同一赔率下,凯利公式只有在稳赢(赢概率=100%)时才会支持押下全部本金,否则都是本金的一定比例。也即永远不会输完所有的钱。
三、炒股怎么用凯利公式?
凯利的论文给出的押注策略,神奇之处就在于,当你总是遵循这一准则进行操作,你就能预测接下来发生的事情,你也能清楚的知道你的财富增长速度是在控制住风险情况下最优的结果。
来看看凯利运用他的财富公式,专门成立的hedge fund 的performance~20年15倍,就是辣么厉害。
那么问题来了,我们量化炒股如何引入这么神奇的仓位管理神器?
因为股市的涨跌我们不会一次性赔光本金,所以引入损失率对凯利公式做微调,即更一般性的凯利公式:
f:仓位比例
Pwin:赌赢的概率—股市上涨概率
Ploss:赌输的概率—股市下跌概率
b:赢钱率(资产从1增加到1+b)
c:损失率(资产从1减少到1-c)
一般性凯利公式的证明过程(再次感谢@程峰的提议,在此加上证明过程)
一次投资过程,压上总资本(A)的一定比例:fA。有pwin的概率赢,赢了财富为A(1+fb),ploss的概率会输,输了资本变为A(1-fc)。N次投资后,总资本函数为:
凯利公式要做的是使得总资本曲线的几何收益最大,也就是log(An)/N最大。即log(AN)/N对f求导=0时f的值就是凯利公式了~
仔细想一个问题(挖矿秘籍)*
赌博和买股票,赢概率Pwin和输概率Ploss究竟是什么?
赌博的时候,Pwin和Ploss是根据游戏规则算出的概率而定。比如投硬币(Pwin=Ploss=0.5),或者转轮盘,扑克等更为复杂的游戏。
而买股票的过程,是n次离散赌博的过程。当你找到一个有效信号之后进行一次操作(比如有效信号是价格突破5日均线,财务数据好,成交量放大,或者各种金叉死叉等等。。)
假设我们找到了一个有效信号,信号发生时,股价为S。我们提前给定价格S(1+b)和S(1-c)作为信号发生后止盈和止损的边界,这个时候的Pwin和Ploss应该是基于历史这个信号的收益情况做数据统计分析胜率(赢概率)和败率(输概率)来给出,也即价格触碰到S(1+b)止盈的概率是Pwin,触碰到S(1-c)止损的概率是Ploss。
关于信号这部分的可视化的理解,可参见好多凯利公式的文章,但好像没有说透彻的……。这篇是与JoinQuant的小编讨论后发布在JQ社区的一篇文章。
又举一个简单例子
有效信号:当前价突破5日均线
统计样本:100只相似股票,过去三年有效信号发生了1000次
统计包含:假定上涨20%止盈,下跌20%止损。止盈赢钱的次数57次,止损输钱的次数43次
对应公式的参数: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%
按照我们对某一个有效信号做历史统计定出来的Pwin,Ploss,b和c来进行模拟的投资组合看看看效果:
In[3]:
from pandas import DataFramebase = 100pwin = 0.57ploss = 1-pwinb = 0.2c = 0.2# stopline后文会介绍stopline = 1rnd_position = 0.6rnd_position2 = 0.9kelly_position = (pwin/c - ploss/b)stoplineprint 'kelly position is %s'%kelly_positionport_A = DataFrame()port_B = DataFrame()port_C = DataFrame()port_D = DataFrame()#重复模拟次数for i in range(1000): port1 = [base] port2 = [base] port3 = [base] port4 = [base] #投资次数步长 for step in range(500): rnd = random.random() if rnd < pwin: next_step = b else: next_step = -c if port1[-1] > base(1-stopline): port1.append(port1[-1](1+next_step)) else: port1.append(port1[-1]) if port2[-1] > base(1-stopline): port2.append(port2[-1](1+next_stepkelly_position)) else: port2.append(port2[-1]) if port3[-1] > base(1-stopline): port3.append(port3[-1](1+next_steprnd_position)) else: port3.append(port3[-1]) if port4[-1] > base(1-stopline): port4.append(port4[-1](1+next_steprnd_position2)) else: port4.append(port4[-1]) port_A[i] = port1 port_B[i] = port2 port_C[i] = port3 port_D[i] = port4plt.figure(figsize = (8,5))plt.plot(exp(log(port_A.T).sum()/1000),label = 'port1:full')plt.plot(exp(log(port_B.T).sum()/1000),label = 'port2:kelly')plt.plot(exp(log(port_C.T).sum()/1000),label = 'port3:position = 0.6')plt.plot(exp(log(port_D.T).sum()/1000),label = 'port3:position = 0.9')plt.legend(loc = 0)print '\n不同组合的几何期望收益'print 'full position %s'%exp(log(port_A.T).sum()/1000).iloc[-1]print 'kelly position %s'%exp(log(port_B.T).sum()/1000).iloc[-1]print 'position = 0.6 %s'%exp(log(port_C.T).sum()/1000).iloc[-1]print 'position = 0.9 %s'%exp(log(port_D.T).sum()/1000).iloc[-1]
Out[3]:
- 凯利公式下资金曲线增长是最快的。
- 高于或低于凯利公式的比例资金曲线增长都不是最快的。
再思考一个问题:关于杠杆
再多举一个例子:f>1
研究不能止步于此啊。很多知道凯利公式的朋友都有的疑问,是凯利计算出来的仓位容易过大。比如一不小心就提示几倍,几十倍了。这是什么情况呢?
比如我们找到一个信号:Pwin=0.7,Ploss=0.3,b=0.20,c=0.20
来看看实验结果(代码同上,只修改上述参数)
Out[4]:
f>1了,甚至等于4了,什么意思!!凯利公式在告诉你这个信号太好了,值得你做4倍的杠杆来操作~!什么,你说我多加一点好不好,看上图,加到6倍显然就挫了。。。
(想知道凯利公式为何能做到几何期望收益最大化,证明过程戳wiki百科自行科普)
再思考一个止损的问题,stopline不为1
上面杠杆的问题引出其实说明了A股版凯利公式暗含的一个假设:
资金可以随意无摩擦地加杠杆操作,无借贷成本。
什么意思。一个好的信号,凯利会告诉你在已知风险(Pwin,Ploss,b和c)的情况下,最优的杠杆是多少。你可以毫不犹豫的就按这个杠杆去操作,最大化自己的资金曲线。
那么真实情况下呢,我们可能不加杠杆,而且也不能承受全部本金损失掉的风险。也就是,我们stopline会小于1,甚至只到30%或者20%。那这时候凯利公式怎么用?
这里不做实验,仅抛个引子。感兴趣的朋友可以继续深入研究,也欢迎与我探讨。
A. 静态止损:即亏损本金的固定数额后撤出投资
kelly_position = (pwin/c - ploss/b)×stopline
stopline应为此时剩余可承受的损失/本金base。
举例:base=100元,输20元止损。initial_stopline = 0.2。假设损失率c = 0.04
第一次,赔了4块,base=96,stopline = (20-4)/96 = 0.16
第n次,输输赢赢后,base = 250,stopline = (150+20)/250 = 0.68
B. 动态止损:即亏损剩余资金的一定比例后撤出投资
比如动态20%止损。base =100元,赚到200元后,如亏损到160元即止损。
这个具体实验就留给各位自己研究啦~~
Bonus:小结一下
好啦,少年。真正赚钱的是找有效的因子or信号,使得Pwin尽可能大,b尽可能大。无论是以往大家关注的一些技术指标(各种金叉、死叉)还是量价指标(放量、突破等等)又或者是财务指标,都可以作为一个信号。
统计历史信号出现时的一个表现,得到这个信号产生的收益的分布。只要这个信号的收益分布正偏一些些,就是纯纯的Alpha啊。当然这个因子or信号的挖掘,就是作为矿工孜孜不倦追求的终极目标了。当你找到这样一个神奇的信号,配上凯利公式会让你的财富增加更快~
好啦,说完啦。挖信号去了~
本文研究工具为IPython Notebook 2.7。API来自聚宽(JoinQuant),在此表示感谢。
更多扩展可见:好多凯利公式的文章,但好像没有说透彻的……
关于凯利和他的财富公式,有一本书专门介绍这个。财富公式:玩转拉斯维加斯和华尔街的故事.PDF,密码:i8fi。
最后:附上凯利的论文,A New Interpretation of Information Rate资源共享,是人类进步的推动力凯利公式的仓位系数如何计算?
请问凯利公式f*=(bp-q)/b,赔率b如何确定?例如一项投资,
最好的结果是收益30%,概率60%
最坏的结果是收益5%, 概率40%,不可能有亏损,这时候如何计算赔率,如何使用凯利公式?
谢谢! 曾莲欣
79 人赞同了该回答
今天看到了凯利公式,觉得对交易的仓位控制非常有用,这里搜集了一些资料,放在博客上,以备后期学习需要。
在风险投资中任何交易成功率大于50%以上的机会时理论上都可以着手选择合适的入场点。有了入场点就可以决定止损位和止赢位,交易成功了赢利等于从买入点到止赢位(平仓点)差价,交易失败了最大损失等于买入点与止损点的差价。每次交易成功后的赢利值与失败后的亏损值是不一样的,那么凯利公式需要作出适当的修正。
问题是在没有交易以前我们无论如何也不知道未来的交易最终的收益和亏损到底有多大。这样我们只能使用交易以前的期望值来衡量,即一笔单下去后,如果行情判断正确,从技术理论上讲这笔单应该在什么地方平仓了结,这个理论值就是我们未来的盈利期望值。如果一笔单下去后做错了,至少应该在止损位斩仓出来,那么这个止损点将是我们计算亏损的期望值,所以凯利公式修改为:
仓位=P-(1-P)/((收益期望值)/(亏损期望值))
=P-(1-P)(亏损期望值)/(收益期望值)
有了这个修正公式以后,我们就可以在股票或者期货中确定仓位的的大小了。
我们把此公式应用到目前的股票行情中,计算在2005年12月份上证指数在形成双底时(2005-12-6日)进场的仓位大小,顺便把原始的凯利公式与道升的风险管理方法进行比较。
第一图是日K线图。
计算方法 仓位
凯利公式 20.85-1=70%
修正凯利公式 0.85-(1-0.85)(1087-1076)/(1122-1087)=80.3%
道升方法 3%/((1087-1076)/1087)=296%(股市中满仓)
第二图是周K线图。注意这是12月9日的周K线图。
我们同样以BOLL线为投资理论,原则不变。在12月6日,周K线也可以认为也形成了双底,那么成功率大约为85%。当时周BOLL上轨线大约为1216,下轨线大约为1048,当天收盘价为1087点,则:
计算方法 仓位
凯利公式 20.85-1=70%
修正凯利公式 0.85-(1-0.85)(1087-1048)/(1216-1087)=80.5 %
道升方法 0.03/((1087-1048)/1087)=83.6%
小结:
凯利公式是在输赢都相等时计算出来的,适合赌博场合。在风险投资中,修正后的凯利公式和道升风险管理更好。修正后的凯利公式考虑了期望收益和期望亏损两个参数,让仓位更接近实际最佳值,比较合理。而道升风险管理原则更强调止损要限制3%以内,而不考虑赢利空间的大小,体现"切短亏损,让利润奔跑"的原则。在实盘中,道升的风险管理计算非常方便,如下图所示,在周K线上,使用幅度尺从买入点拖动到止损点,将在K线图上马上得到买入点到止损点的幅度百分比,以3%/(止损幅度%),将得到仓位的大小数量。道升风险管理中没有考虑成功率问题,那是因为成功率自己应该掌握,道升以为成功率不在80%以上最好不进场。
凯利修正后的公式最大仓位为100%,不能解决信用扩张的问题,在股票中使用比较合适。而道升风险管理方法在股票和期货中都适用。当然期货中还可以使用其它一些方法。
在实战中,也可以把修正后的凯利公式计算结果与道升仓位计算结果对比一下,从中选择一个折中方案。
以下图为例,说明在周K线图上使用道升原则迅速计算仓位的方法。
2005-12-6日的收盘价为1087点。这是画幅度线的起点。
如果把止损点放在1048点,那么止损点与买入点的幅度为3.5%,这样仓位应该为3%/3.5%=85.7%.(有一点误差是由于画线造成的)
如果把止损点放在1000点附近,那么止损点与买入点的幅度为8.1%,仓位为3/8.1=37%.
凯利公式的理解最重要补充如果能重仓是最大的成就如果能少下一点,规避风险,两者兼之 更好?拉瑞用这个公式大赚过也大赔过,最后在WS的帮助下看到了它致命的缺陷。见《短线交易秘诀》一书p241-254,读一下还是有意义的。有一个更精确的算法,不过算式相对复杂,并需数学软件的支持,软件有多种,其中 Mathematica 5 ,网上有下载有破解(下面以此为例)。关于算式,以下是演示与详解:假设过去我有50次交易,并假定未来一个时期,交易情况仍大致相仿,那么,我就能以前50次来测算未来交易的最佳仓位策略,及理想状态的最大收益率。1、为演示方便,先作一个设定:设定操作总是严格止损,且每次止损只损失账户余额的一个固定比例x,而盈利的交易可以换算成它与止损比例的一个比值,即盈利可用1x、2x、10x之类来表示,2、又设过去50次交易中,30次亏损x ,15次盈利x,2次盈利5x,2次盈利8x,1次盈利15x,如果初始帐户为1,那么,以复利计算,50次交易的期末帐户是:f[x] = (1-x)30(1+x)15(1+5x)2(1+8x)2(1+15x)1注:(1-x)30即(1-x)相乘30次,表示共有30次亏损x,余类推3、调用求最大值函数 FindMaximum[],具体来说,输入:FindMaximum[f[x],{x,0,0.5}] 注:{x,0,0.5} 是为了给x一个范围,如0到0.5软件运算后输出: {3.26631, {x -> 0.113104}}意思是当 x = 0.113104 时,f[x] 最大值为 3.26631也就是说,当保持单次亏损为11.3104%时,50次交易的期末帐户为3.26631 ,收益率为266.31%4、还可以绘出直观的曲线,观察单次亏损额定值x与收益f[x]的关系,输入并运算下式: Plot[Evaluate[f[x]],{x,0,0.5}]即输出一条钟形曲线,呵呵,一幅图胜过一千句话……自己看吧再说几句,其实我赞成一粒沙的话:"市场不是赌博,压下去就等着开结果,而是个连续的过程。过程中概率和赔率就在不断变化"因此,不论巴菲特公式,凯利公式,还是我前面的算式,都不具有精确指导交易的意义,不过略作参考也无妨比较而言,前面所述的算式,含义更丰富些,可能参考价值相对大些比如说,算式中的x,它不是直接代表投入资金的大小,而单次亏损的额定量,只要保证止损结果的亏损是x,具体持仓是多大,没有限制。但x与仓位可以建立联系,一个简单的方法是:根据x值及止损宽度,可以反推算出"亏得起"的仓位所谓"亏得起"的仓位,其实是开首仓的数量,一旦首仓盈利可观,即可考虑加仓。本质上,首仓克制,只是为了控制不确定性带来的风险,而加仓,才是真正"让利润飞跑"所以使用额定亏损x的概念,似乎比直接计算仓位或投入资金,更本质,更灵活巴菲特的公式是凯利公式中R=1(赔率为1)的简化表示,本质是一样的。市场不是赌博,压下去就等着开结果,而是个连续的过程。过程中概率和赔率就在不断变化。另外,概率和赔率是带主观性的,按传统科学难以测量。凯利公式的一个推论是:寻找高胜率的机会,然后押大赌注,但是这个赌注不能超过所能承受的极限,因为投资中的概率都是主观概率。所以那种初始仓位固定一个百分比止损并不是一个很好的主意,可以根据主观概率设定不同的级别。比如普通 3%止损,高胜率 5%,低胜率1%。从资金管理看机械化交易系统的结构性风险Z总资金N(安全头寸)=----------------------------------------------------------B(保证金) + M(最大连续亏损次数) P(最大单次止损额)建立在古典概率基础上的机械化交易系统的M(最大连续亏损次数)理论值为无穷大,因此N(安全头寸)等于零。举例:一套65%的趋势跟踪系统,碰到盘局会有亏损。理论上的盘局可无限长,因此安全头寸为零。长期运作在市场上的交易者会碰到小概率事件,所以结局已经必然肯定了。结论:采用古典概率的参数优化等方法的机械化交易系统不成立。多思了一下,还是觉得自由飞翔的分级别设置止损百分比没有必要分级设置的本意是:更为精细的控制风险,同时不至于过分削弱仓位的盈利能力。但是否真能更加精细的控制风险,疑问很大理由主要是,针对具体交易对象的"主观概率",其实也不可靠,甚至不比从历史交易得来的"一般概率"更可靠。即使伟大的作手,不也常有"主观概率"定义错误,重仓导致重伤的吗?根据大量统计得来的"一般概率",其实已经内涵了过去在定义"主观概率"时,可能发生的错误。也就是说,"一般概率"正是修正过去的"主观概率"的结果。一个修正反而比它所要修正的东西更不可靠,这并非不可能,但如果这个修正是正确运用概率分析的结果,那它就是更有效的。所以,分级别设置止损百分比,是过度优化,实际是反优化。设置止损百分比的根本目的,是给出一个简明、可靠的风险控制规则。规则的意义,除了它的内在有效性,还在于它是可被执行的,一条最大限度排除现场主观判断(主观概率之类)的规则,具有最高的明确性,以及刚性,当你执行之时,你不必受到当时环境条件、心理状态、技术状态的影响,长期来看,你的失误可能将被降到最低。规则就要简明、刚性,不必过度细化、优化其实这就是风险百分比的仓位原则。可以看看《短线交易秘诀》。拉瑞在书里暗示是他发明了这个原则,并建立了新的公式拉瑞提出风险百分比是为改进凯利公式,因为这个公式先使他大胜,后又令他惨败。凯利公式可能是引用交易成功率 P 来计划仓位的最著名算法,但公式的最致命处正是 P 并非永远可靠,P 值的大出入会导致错误的大量持仓,引发大的亏损。可 以想见,所有引用 P 的公式,都难免这样的失误。而风险百分比原则废弃了主观估量的 P ,转而定量、刚性的规定一次交易允许暴露的风险,避免了采用 P 时风险暴露的意外失控,因此它更符合仓位控制的风险管理本质。可以说,如果不考虑操作上的技术性失误,则风险百分比在理论上没有意外风险,失败交易的单次 亏损全在计划之内。说到它的灵活性,则有两个含义。一,虽然它对风险的控制是定量、刚性的,但并未直接规定每次交易的仓位,它允许根据交易的实际 情形来决定仓位(这一点《趋势交易大师》里讲得具体)。
凯利公式具体公式:凯利公式的神奇
一。凯利公式的表达最早是在DAVID的《低风险投资之路》上看到凯利公式F=(PwR-Pl)/Rw* R是赔率,Pw是胜率,Pl是败率,F是现有资金下次下注的比例,可以理解为股票的仓位但是这个版本是简化的公式,主要用于赌博。后来又搜寻和分析,找到完整的公式F=(PwRw-PlRl)/(RwRl)=预期收益率/(RwRl)=Pw/Rl-Pl/Rw** Pw为赢的概率,Pl为输的概率。Rw是赢时的净收益率。Rl是输时的净损失率凯利为投资的仓位的控制提出了量化指标,提供了财富增长最大化的方法二。凯利公式的验证凯利公式的推导需要高深的数学知识,我也看不懂。但是既然我们要把它作为摇钱树,还是应该充分验证它我们来设计一个赌局:你输和赢的概率分别是50%,例如抛硬币。赢的时候净收益率为1,即rw=1,输的时候净损失率为0.5,即rl=0.5。也就是说当你每赌一元钱,赢的时候你能再赢1元,输的时候你只要付出去0.5元这个赌局玩家的期望收益率为0.51-0.50.5=0.25,对玩家非常有利,问题是每次下注多少赚得最快呢我们现在用凯利公式计算F=0.25/(10.5)=0.5,也就是说每次下注一半,赚得最快,现在用EXCEL验证一下,以下计算引用了RAND和IF函数,下注100次
由以上计算可以看出50%下注,果然赚得最快,100%下注竟然不赚钱。面对如此诱人的正收益的投资机会,如果采取错误的仓位,也会颗粒无收。不同的仓位导致的结果相去甚远。当前石油价格在50美元左右,假设涨到100和跌到25概率各50%,这个投资机会就和上面的赌局一模一样。如果投资QDII LOF品种,还有套利的福利,大家自己判断。三。德隆投资“三知道”原则与凯利公式德隆投资“三知道”加上涨跌的概率,就能推导出最佳持仓F,原来德隆投资“三知道”是有理论支撑的,哈哈!四。低风险投资与与凯利公式低风险投资的机会大部分能知道胜率和赔率,因此很容易计算出仓位例1: 3分级在0.8元时,假如涨跌概率都是50%,最低跌到0.75,最高涨到0.95。上涨时收益率=(0.95-0.8)/0.8=18.75%下跌时收益率=(0.75-0.8)/0.8=-6.25%,注意在公式中取绝对值。F=0.5/0.0625-0.5/0.1875=533%原来0.8的分级A应该加杠杆买买买,不过杠杆有成本的,大家自己计算例2:假如某垃圾债年化收益率比国债高20%,但是有10%违约风险F=(0.90.2-0.1)/0.2=40%最后引用DAVID的话:对于低风险投资者来讲,并不该拒绝有风险的品种,甚至不必拒绝高风险品种,只要控制好仓位,都可以将其变成低风险投资组合
凯利公式
2016-01-09 一览众山... 文章来源 阅 803 转 11
F=(PwR-Pl)/Rw R是赔率,Pw是胜率,Pl是败率,F是现有资金下次下注的比例,可以理解为股票的仓位
但是这个版本是简化的公式,主要用于赌博。后来又搜寻和分析,找到完整的公式
F=(PwRw-PlRl)/(RwRl)
=预期收益率/(Rw*Rl)
=Pw/Rl-Pl/Rw Pw为赢的概率,Pl为输的概率。Rw是赢时的净收益率。Rl是输时的净损失率
凯利为投资的仓位的控制提出了量化指标,提供了财富增长最大化的方法
导 读
假设赌局1:你赢的概率是60%,输的概率是40%。赢时的净收益率是100%,输时的亏损率也是100%。也即,如果赢,那么你每赌1元可以赢得1元,如果输,则每赌1元将会输掉1元。
赌局可以进行无限次,每次下的赌注由你自己任意定。问题:假设你的初始资金是100元,那么怎么样下注,即每次下注金额占本金的百分之多少,才能使得长期收益最大?
编辑:优品金融研究所-侯泽文
编辑:第一时间揭秘
对于这个赌局,每次下注的期望收益是下注金额的60%1-40%1=20%,期望收益为正。也就是说这是一个对赌客占优的赌局,而且占得优势非常大。
那么我们应该怎么样下注呢?
如果不进行严密的思考,粗略的想象一下,我们会觉得既然我每次赌的期望收益是20%,那么为了实现长期的最大收益,我应该在每次赌博中尽量放入更多比例的本金。这个比例的最大值是100%。
但是显然每一局赌博都放入100%的本金是不合理的,因为一旦哪一次赌博赌输了,那么所有的本金就会全部输光,再也不能参加下一局,只能黯然离场。而从长期来看,赌输一次这个事件必然发生,所以说长期来看必定破产。
所以这里就得出了一个结论:只要一个赌局存在一下子把本金全部输光的可能,哪怕这个可能非常的小,那么就永远不能满仓。
因为长期来看,小概率事件必然发生,而且在现实生活中,小概率事件发生的实际概率要远远的大于它的理论概率。这就是金融学中的肥尾效应。
继续回到赌局1。
既然每次下注100%是不合理的,那么99%怎么样。如果每次下注99%,不但可以保证永远不会破产,而且运气好的话也许能实现很大的收益。
实际情况是不是这个样子呢?
我们先不从理论上来分析这个问题,我们可以来做个实验。我们模拟这个赌局,并且每次下注99%,看看结果会怎么样。
这个模拟实验非常的简单,用excel就能完成。请看下图:
如上图,第一列表示局数。第二列为胜负,excel会按照60%的概率产生1,即60%的概率净收益率为1,40%的概率产生-1,即40%的概率净收益为-1。
第三列为每局结束时赌客所有的资金。这个实验每次下注仓位是99%,初始本金是100,分别用黄色和绿色标出。
大家从图中可以看出,在进行了10局之后, 10局中赢的局数为8,比60%的概率还要大,仅仅输了两次。但即使是这样,最后的资金也只剩下了2.46元,基本上算是输光了。
当我把实验次数加大,变成1000次、2000次、3000次……的时候,结果可想而知了,到最后手中的资金基本上是趋向于0。
既然99%也不行,那么我们再拿其他几个比例来试试看,看下图:
从图中可以看出,当把仓位逐渐降低,从99%,变成90%,80%,70%,60%的时候,同样10局的结果就完全不一样了。从图中似乎可以看出随着仓位逐渐的变小,在10局之后的资金是逐渐变大的。
大家看到这里,就会渐渐的发现这个赌局的问题并不是那么简单的。就算是赌客占优如此之大的赌局,也不是随随便便都能赢钱的。
那么到底怎么下注才能使得长期收益最大呢?
是否就像上图所显示的那样,比例越小越好呢?应该不是,因为当比例变成0的时候显然也不能赚钱。
那么这个最优的比例到底是多少呢?
这就是著名的凯利公式所要解决的问题!
凯利公式介绍
其中f为最优的下注比例。p为赢的概率。rw是赢时的净收益率,例如在赌局1中rw=1。rl是输时的净损失率,例如在赌局1中rl=1。注意此处rl>0。
根据凯利公式,可以计算出在赌局1中的最有利的下注比例是20%。
我们可以进行一下实验,加深对这个结论的理解。
如图,我们分别将仓位设定为10%,15%,20%,30%,40%。他们对应的列数分别是D、E、F、G、H。
当我把实验次数变成3000次的时候,如下图:
当我把实验次数变成5000次的时候,如下图:
大家从两幅图中可以看到F列对应的结果最大,和其它列相比压根就不是一个数量级的。而F列对应的仓位比例正是20%。
大家看到凯利公式的威力了吧。在上面的实验中,如果你不幸将比例选择为40%,也就是对应H列,那么在5000局赌博之后,你的本金虽然从100变成了22799985.75,收益巨大。但是和20%比例的结果相比,那真是相当于没赚钱。
这就是知识的力量!
凯利公式理解
凯利公式的数学推导及其复杂,需要非常高深的数学知识,所以在这里讨论也没有什么意义。哎,说白了其实就是我也看不大懂。在这里我将通过一些实验,加深大家对凯利公式主观上的理解。
我们再来看一个赌局。赌局2:你输和赢的概率分别是50%,例如抛硬币。赢的时候净收益率为1,即rw=1,输的时候净损失率为0.5,即rl=0.5。
也就是说当你每赌一元钱,赢的时候你能再赢1元,输的时候你只要付出去5毛。
容易看出赌局2的期望收益是0.25,又是一个赌客存在极大优势的赌局。
根据凯利公式,我们可以得到每局最佳的下注比例为:
也就是说每次把一半的钱拿去下注,长期来看可以得到最大的收益。
下面我要根据实验得出平均增长率r的概念。首先来看实验2.1,如下两张图:
这两张图都是模拟赌局2做的实验,在第二列的胜负列中,实验会50%的概率产生1,表示盈利100%。50%的概率产生-0.5,表示亏损50%。第三第四列分别是在仓位为100%和50%下每次赌局之后所拥有的资金。
仔细对比两张图可以发现结论一,亦即在经过相同次的局数之后,最后的结果只与在这些局数中赢的局数的数量和输的局数的数量有关,而与在这些局数中赢的局和输的局的顺序无关。
例如在上两幅图中,同样进行了4局,同样每幅图中赢了两局输了两局,但是第一张图的输赢顺序是赢输输赢,第二张图的输赢顺序是输赢赢输。它们最终的结果都是一样的。
当然这个结论非常容易证明(乘法交换律,小学生就会),这里就不证明了,上面举的两个例子足够大家很好的理解。
那么既然最终的结果和输赢的顺序无关,那么我们假设赌局2如实验2.2一样进行下去,看下图:
我们假设赌局的胜负是交替进行的,由于结论一,从长期来看这对结果资金没有任何影响。
在自己观察图片之前我们先做一个定义。假设将某几局赌局视为一个整体,这个整体中各种结果出现的频率正好等于其概率,并且这个整体的局数是所有满足条件整体当中局数最小的,那么我们称这个整体为一组赌局。
例如在上图的实验中,一组赌局就代表着进行两局赌局,其中赢一次输一次。
仔细观察上图中蓝色标记的数字,它们是一组赌局的结尾。你会发现这些数字是保持着稳定的增长的。当仓位是100%时,蓝色标记数字的增长率是0%,即一组赌局之后本金的增长率为0%。这也解释了当每次都满仓下注的时候,在赌局2中长期来看是无法赚钱的。当仓位是50%(即凯利公式得出的最佳比例)时,蓝色标记数字的增长率是12.5%,即一组赌局之后本金的增长率为12.5%。
这是一个普遍的规律,每组赌局之后的增长率与仓位有关。且每组赌局之后的增长率越大,那么长期来看最终的收益也就越多。
根据每组赌局的增长率可以计算出每个赌局的平均增长率g。在上面的图中,每组赌局之中包含两个赌局,那么每个赌局的平均增长率
其实这个r是可以通过公式算出来的。
从长期来看,想要让资本得到最大的增长,其实只要让r最大,也即让g最大化。而最佳下注比例f其实也是通过求解max(g)的出来的。
凯利公式其他结论——关于风险
凯利传奇
凯利公式最初为 AT&T 贝尔实验室物理学家约翰·拉里·凯利根据他的同僚克劳德·艾尔伍德·夏农于长途电话线杂讯上的研究所建立。凯利解决了夏农的资讯理论要如何应用于一名拥有内线消息的赌徒在赌马时的问题。赌徒希望决定最佳的赌注金额,而他的内线消息不需完美(无杂讯),即可让他拥有有用的优势。凯利的公式随后被夏农的另一名同僚爱德华·索普应用于二十一点和股票市场中。
索普利用工作之余,通过数个月的艰苦演算,写了一篇题为《“二十一点”优选策略》的数学论文。他利用自己的知识,一夜之间“奇袭”了内华达雷诺市所有的赌场,并成功的从二十一点赌桌上赢得了上万美元。他还是美国华尔街量化交易对冲基金的鼻祖,70年代首创第一个量化交易对冲基金。1962年出版了他的专著《打败庄家》,成为金融学的经典著作之一。
运用展望
如何利用凯利公式在现实生活中赚钱?那就是要去创造满足凯利公式运用条件的“赌局”。在我看来,这个“赌局”一定是来自金融市场。
近期我一直在做交易系统的研究,对于一个优秀的交易系统来说什么是最重要的?一个期望收益为正的买卖规则占到重要性的10%,而一个好的资金控制方法占到了重要性的40%,剩下的50%是操控人的心理控制力。
而凯利公式正是帮助我进行资金仓位控制的利器。
比如说之前我研究出的一个股票交易系统,该系统每周进行一次交易,每周交易成功的概率是0.8,失败的概率是0.2。当成功的时候可以赚取3%(扣掉佣金,印花税),每次失败时亏损5%。
在不知道凯利公式之前,我都是盲目的满仓交易,也不知道我这个仓位设定的对不对,心理很虚。在运用凯利公式之后,计算的最佳的仓位应该是9.33,就是说如果借款利率是0的话想要得到最快的资金增长速度就要使用杠杆交易,通过公式计算得到每次交易的平均增长率r约等于7.44%,而满仓交易的平均资金增长率为r约等于 1.35(其实也就是期望收益)。
通过实验模拟之后也发现确实杠杆交易比满仓交易资金增长的速度要快的多。这也让我更好的理解了为什么很多量化投资基金公司需要使用杠杆交易。
当然凯利公式在实际的运用中不可能这么的简单,还有很多的困难需要克服。比如说杠杆交易所需要的资金成本,比如说现实中资金并不是无限可分的,比如说在金融市场并不像上文提到的简单的赌局那么简单。
但是不管怎么样,凯利公式为我们指明了前进的道路。
网友评论