从事计算机二级教育工作8年。 新支点教育创始人。 主要授课科目:MS Office高级应用。
适用人群:报考全国计算机等级考试二级OFFICE高级应用的同学 课程特色:讲课幽默,知识解析细致,考点讲解全面,题库最新权威 班级介绍:直指2018年3月计算机二级OFFICE考试 交流群: |
如果觉得这个很过瘾可以升级为完整版【二级OFFICE核心考点专题精讲】,升级课程可以联系QQ领取优惠劵。
二级OFFICE核心考点专题精讲观看地址:
微信购买的同学请加QQ:进群
多线程的软件设计方法确实可以最大限度地发挥多核处理器的计算能力,提高生产系统的吞吐量和性能。但是,若不加控制和管理的随意使用线程,对系统的性能反而会产生不利的影响。
一种最为简单的线程创建和回收的方法类似如下:
以上代码创建了一条线程,并在run()方法结束后,自动回收该线程。在简单的应用系统中,这段代码并没有太多问题。但是在真实的生产环境中,系统由于真实环境的需要,可能会开启很多线程来支撑其应用。而当线程数量过大时,反而会耗尽CPU和内存资源。
首先,虽然与进程相比,线程是一种轻量级的工具,但其创建和关闭依然需要花费时间,如果为每一个小的任务都创建一个线程,很有可能出现创建和销毁线程所占用的时间大于该线程真实工作所消耗的时间,反而会得不偿失。
其次,线程本身也是要占用内存空间的,大量的线程会抢占宝贵的内部资源。
因此,在实际生产环境中,线程的数量必须得到控制。盲目地大量创建线程对系统性能是有伤害的。
下面给出一个最简单的线程池,该线程池不是一个完善的线程池,但已经实现了一个基本线程池的核心功能,有助于快速理解线程池的实现。
//如果有空闲线程,则直接使用 }//没有空闲线程,则创建线程
2.要实现上面的线程池,就需要一个永不退出的线程与之配合。PThread就是一个这样的线程。它的主体部分是一个无限循环,该线程在手动关闭前永不结束,并一直等待新的任务到达。
//只要没有关闭,则一直不结束该线程 //任务结束了,到闲置状态 //线程空闲,等待新的任务到来 //设置了任务之后,通知run方法,开始执行这个任务
指定了线程池中的线程数量 |
指定了线程池中最大的线程数量 |
当线程池线程数量超过corePoolSize时,多余的空闲线程的存活时间。 即,超过corePoolSize的空闲线程,在多长时间内会被销毁 |
任务队列,被提交但尚未被执行的任务。 |
线程工厂,用于创建线程,一般用默认的即可。 |
拒绝策略。当任务太多来不及处理,如何拒绝任务。 |
或者通过submit()方法提交任务
//在其它线程中执行100次下列方法
用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。
SynchronousQueue: 一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量高于LinkedBlockingQueue,静态工厂方法Excutors.newCachedThreadPool()使用了这个队列
当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略还处理新提交的任务。它可以有如下四个选项:
更多的时候,我们应该通过实现RejectedExecutionHandler 接口来自定义策略,比如记录日志或持久化存储等。
可以使用execute和submit两个方法向线程池提交任务。
可以通过调用shutdown()
或shutdownNow()
方法来关闭线程池。它们的原理是遍历线程池中的工作线程,然后逐个调用线程的interrupt
方法来中断线程,所以无法响应中断的任务可能永远无法停止。
这俩方法的区别是,shutdownNow() 首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表,而 shutdown() 只是将线程池的状态设置成 SHUTDOWN 状态,然后中断所有没有正在执行任务的线程。
只要调用了这两个关闭方法的任意一个,isShutdown 方法就会返回 true。当所有的任务都已关闭了,才表示线程池关闭成功,这时调用 isTerminaced 方法会返回 true。
通常调用 shutdown() 方法来关闭线程池,如果任务不一定要执行完,则可以调用 shutdownNow() 方法。
要想合理地配置线程池,首先要分析任务特性
性质不同的任务可以用不同规模的线程池分开处理。
CPU密集型任务应该配置尽可能少的线程,如配置N+1个线程,N位CPU的个数。
而IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*N。
混合型任务,如果可以拆分,将其拆分成一个CPU密集型任务和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐量将高于串行执行的吞吐量。如果这两个任务执行的时间相差很大,则没有必要进行分解。可以通过Runtime.getRuntime().availableProcessors()
方法获得当前设备的CPU个数。
优先级不同的任务可以使用优先级队列PriorityBlockingQueue来处理。它可以让优先级高的任务先执行。
由于大量的使用线程池,所以很有必要对其进行监控。可以通过继承线程池来自定义线程池,重写线程池的beforeExecute、afterExecute 和 terminated 方法,也可以在任务执行前,执行后和线程池关闭前执行一些代码来进行监控。在监控线程池的时候可以使用一下属性:
(3) largestPoolSize: 线程池里曾经创建过最大的线程数量。通过这个数据可以知道线程池是否曾经满过。如该数值等于线程池最大大小,则表示线程池曾经满过。
(4) getPoolSize:线程池的线程数量。如果线程池不销毁的话,线程池里的线程不会自动销毁,所以这个大小只增不减。
使用 Executors 框架实现上节中的例子,其代码如下:
//在其它线程中执行100次下列方法
包括被执行任务需要实现的接口:Runnable 接口或 Callable 接口。
上面的示例中使用 execute() 方法提交任务,用于提交不需要返回值的任务。如果我们需要获取执行任务之后的返回值,可以使用submit()方法。
//在其它线程中执行100次下列方法
到这里,就不得不提Future接口与FutureTask实现类,它们代表异步计算的结果。
主线程可以执行 futureTask.get() 方法来阻塞当前线程直到任务执行完成,任务完成后返回任务执行的结果。
支持随到随学,23年02月过期
本班因教学质量问题暂时不能报名。
课程因违反平台规定暂时不能报名。
从事计算机二级教育工作8年。 新支点教育创始人。 主要授课科目:MS Office高级应用。
适用人群:报考全国计算机等级考试二级OFFICE高级应用的同学 课程特色:讲课幽默,知识解析细致,考点讲解全面,题库最新权威 班级介绍:直指2018年3月计算机二级OFFICE考试 交流群: |
* 课程提供者:新支点教育
免费 1317人最近报名
免费 2002人最近报名
仓位管理大杀器:凯利公式你用对了吗?
今天我们介绍一个神奇的人,和他神奇的公式。目前网络上传播较广的一篇讲凯利公式前世今生的文章,个人认为深度不够,而且思路是有问题的。大家不要看多了走偏路。最近也花了一些力气做梳理,把这篇分享出来,尽量做到讲对,讲透,也是提醒各位,低头挖矿,不要搞错了挖矿的初衷。
市场不好的时候,我们总是会犹豫,满仓?半仓?还是空仓?有没有一个科学的办法给出一个标准答案呢?下面来看看仓位管理神器——凯利公式。
投资(ji)就是一场赌博。像索普、香农等很多投资大师早期都对研究赌博业的秘密情有独钟,科学家们总是希望从理论上找到赌博游戏的必胜策略,使得一场游戏中赢的概率远远高过输的概率。
凯利就是这样一个大师。他是香农(信息论创始人)在贝尔实验室的同事,这个来自德克萨斯州、爱摆弄手枪、喜欢一根接一根抽烟的狂野硬汉,干过很多恶作剧,特别喜欢将填满塑料的子弹射进他客厅的墙壁里来戏弄家里暂住的客人。他的研究领域从量子物理学到电视信号解码,发明了能够准确模拟人类声音的电脑设备。最广为人知的研究贡献,便是将香农的信息论运用到了赛马赌博中。
凯利用这样一个精巧简洁的公式,将信息论与赌博之间的本质联系揭露出来,告诉我们在有限了解的信息下,如何下注能使得资本增值的速度最大化。
二、赌博怎么用凯利公式?
最早的凯利公式是运用在赌博游戏中的,我们先看看赌博情形下凯利公式的特殊形式:
:赌输的概率(=1-Pwin)
:赔率,押1赔b(这个赌球的朋友们是不陌生啦)
特殊形式凯利公式的证明过程(此处感谢的建议) 我们可以做一个简单的证明。资金曲线asset对f求导,就可以得到特殊形式下的凯利公式。
假想一个游戏。赢的概率是60%,输的概率40%。入场费随意交。如果赢了获得2倍的入场费金额(1赔1),输则输掉入场费。小米有100元做本金,请问小米每次给多少入场费,理论上4次游戏后几何期望收益能最大?
然后我拿凯利公式算了一下,最佳的策略是每次投剩余本金的20%。
基于上述的例子,做个简单的蒙特卡洛模拟实验(进行200次游戏):
图为进行200次游戏之后几何期望资金曲线的情况
凯利无疑是增长最快的!从另一个角度,我们来理解一下
不同赔率下,赢的概率多大我们会选择入场参与游戏?
还是上面的游戏,如果赢的概率40%,输的概率60%,那么,期望净收益就是(1×0.4-0.6)< 0;从概率的角度说,一个期望净收益为负的游戏是不值得参与的,求得的f小于0,也就是不下注。
下面看一下不同赔率下一个游戏赌赢的概率为多少才值得参加?
凯利的论文给出的押注策略,神奇之处就在于,当你总是遵循这一准则进行操作,你就能预测接下来发生的事情,你也能清楚的知道你的财富增长速度是在控制住风险情况下最优的结果。
来看看凯利运用他的财富公式,专门成立的hedge fund 的performance~20年15倍,就是辣么厉害。
因为股市的涨跌我们不会一次性赔光本金,所以引入损失率对凯利公式做微调,即更一般性的凯利公式:
:赌赢的概率—股市上涨概率
:赌输的概率—股市下跌概率
:赢钱率(资产从1增加到1+b)
:损失率(资产从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日均线
再多举一个例子:f>1
研究不能止步于此啊。很多知道凯利公式的朋友都有的疑问,是凯利计算出来的仓位容易过大。比如一不小心就提示几倍,几十倍了。这是什么情况呢?
来看看实验结果(代码同上,只修改上述参数)
f>1了,甚至等于4了,什么意思!!凯利公式在告诉你这个信号太好了,值得你做4倍的杠杆来操作~!什么,你说我多加一点好不好,看上图,加到6倍显然就挫了。。。
(想知道凯利公式为何能做到几何期望收益最大化,证明过程戳wiki百科自行科普)
再思考一个止损的问题,stopline不为1
上面杠杆的问题引出其实说明了A股版凯利公式暗含的一个假设:
资金可以随意无摩擦地加杠杆操作,无借贷成本。 什么意思。一个好的信号,凯利会告诉你在已知风险(Pwin,Ploss,b和c)的情况下,最优的杠杆是多少。你可以毫不犹豫的就按这个杠杆去操作,最大化自己的资金曲线。
B. 动态止损:即亏损剩余资金的一定比例后撤出投资 比如动态20%止损。base =100元,赚到200元后,如亏损到160元即止损。
好啦,少年。真正赚钱的是找有效的因子or信号,使得Pwin尽可能大,b尽可能大。无论是以往大家关注的一些技术指标(各种金叉、死叉)还是量价指标(放量、突破等等)又或者是财务指标,都可以作为一个信号。
统计历史信号出现时的一个表现,得到这个信号产生的收益的分布。只要这个信号的收益分布正偏一些些,就是纯纯的Alpha啊。当然这个因子or信号的挖掘,就是作为矿工孜孜不倦追求的终极目标了。当你找到这样一个神奇的信号,配上凯利公式会让你的财富增加更快~
好啦,说完啦。挖信号去了~
关于凯利和他的财富公式,有一本书专门介绍这个。
最后:附上凯利的论文,
资源共享,是人类进步的推动力凯利公式的仓位系数如何计算?
请问凯利公式f*=(bp-q)/b,赔率b如何确定?例如一项投资,
最好的结果是收益30%,概率60%
最坏的结果是收益5%, 概率40%,不可能有亏损,这时候如何计算赔率,如何使用凯利公式?
今天看到了凯利公式,觉得对交易的仓位控制非常有用,这里搜集了一些资料,放在博客上,以备后期学习需要。
在风险投资中任何交易成功率大于50%以上的机会时理论上都可以着手选择合适的入场点。有了入场点就可以决定止损位和止赢位,交易成功了赢利等于从买入点到止赢位(平仓点)差价,交易失败了最大损失等于买入点与止损点的差价。每次交易成功后的赢利值与失败后的亏损值是不一样的,那么凯利公式需要作出适当的修正。
问题是在没有交易以前我们无论如何也不知道未来的交易最终的收益和亏损到底有多大。这样我们只能使用交易以前的期望值来衡量,即一笔单下去后,如果行情判断正确,从技术理论上讲这笔单应该在什么地方平仓了结,这个理论值就是我们未来的盈利期望值。如果一笔单下去后做错了,至少应该在止损位斩仓出来,那么这个止损点将是我们计算亏损的期望值,所以凯利公式修改为:
仓位=P-(1-P)/((收益期望值)/(亏损期望值))
=P-(1-P)(亏损期望值)/(收益期望值)
有了这个修正公式以后,我们就可以在股票或者期货中确定仓位的的大小了。
我们把此公式应用到目前的股票行情中,计算在2005年12月份上证指数在形成双底时(日)进场的仓位大小,顺便把原始的凯利公式与道升的风险管理方法进行比较。
P(最大单次止损额)建立在古典概率基础上的机械化交易系统的M(最大连续亏损次数)理论值为无穷大,因此N(安全头寸)等于零。举例:一套65%的趋势跟踪系统,碰到盘局会有亏损。理论上的盘局可无限长,因此安全头寸为零。长期运作在市场上的交易者会碰到小概率事件,所以结局已经必然肯定了。结论:采用古典概率的参数优化等方法的机械化交易系统不成立。多思了一下,还是觉得自由飞翔的分级别设置止损百分比没有必要分级设置的本意是:更为精细的控制风险,同时不至于过分削弱仓位的盈利能力。但是否真能更加精细的控制风险,疑问很大理由主要是,针对具体交易对象的"主观概率",其实也不可靠,甚至不比从历史交易得来的"一般概率"更可靠。即使伟大的作手,不也常有"主观概率"定义错误,重仓导致重伤的吗?根据大量统计得来的"一般概率",其实已经内涵了过去在定义"主观概率"时,可能发生的错误。也就是说,"一般概率"正是修正过去的"主观概率"的结果。一个修正反而比它所要修正的东西更不可靠,这并非不可能,但如果这个修正是正确运用概率分析的结果,那它就是更有效的。所以,分级别设置止损百分比,是过度优化,实际是反优化。设置止损百分比的根本目的,是给出一个简明、可靠的风险控制规则。规则的意义,除了它的内在有效性,还在于它是可被执行的,一条最大限度排除现场主观判断(主观概率之类)的规则,具有最高的明确性,以及刚性,当你执行之时,你不必受到当时环境条件、心理状态、技术状态的影响,长期来看,你的失误可能将被降到最低。规则就要简明、刚性,不必过度细化、优化其实这就是风险百分比的仓位原则。可以看看《短线交易秘诀》。拉瑞在书里暗示是他发明了这个原则,并建立了新的公式拉瑞提出风险百分比是为改进凯利公式,因为这个公式先使他大胜,后又令他惨败。凯利公式可能是引用交易成功率 P 来计划仓位的最著名算法,但公式的最致命处正是 P 并非永远可靠,P 值的大出入会导致错误的大量持仓,引发大的亏损。可 以想见,所有引用 P 的公式,都难免这样的失误。而风险百分比原则废弃了主观估量的 P ,转而定量、刚性的规定一次交易允许暴露的风险,避免了采用 P 时风险暴露的意外失控,因此它更符合仓位控制的风险管理本质。可以说,如果不考虑操作上的技术性失误,则风险百分比在理论上没有意外风险,失败交易的单次 亏损全在计划之内。说到它的灵活性,则有两个含义。一,虽然它对风险的控制是定量、刚性的,但并未直接规定每次交易的仓位,它允许根据交易的实际 情形来决定仓位(这一点《趋势交易大师》里讲得具体)。
凯利公式在仓位管理中的应用
最早是在DAVID的《低风险投资之路》上看到凯利公式
* R是赔率,Pw是胜率,Pl是败率,F是现有资金下次下注的比例,可以理解为股票的仓位但是这个版本是简化的公式,主要用于赌博。后来又搜寻和分析,找到完整的公式
Rl)=Pw/Rl-Pl/Rw** Pw为赢的概率,Pl为输的概率。Rw是赢时的净收益率。Rl是输时的净损失率凯利为投资的仓位的控制提出了量化指标,提供了财富增长最大化的方法
凯利公式的推导需要高深的数学知识,我也看不懂。但是既然我们要把它作为摇钱树,还是应该充分验证它我们来设计一个赌局:你输和赢的概率分别是50%,例如抛硬币。赢的时候净收益率为1,即rw=1,输的时候净损失率为0.5,即rl=0.5。也就是说当你每赌一元钱,赢的时候你能再赢1元,输的时候你只要付出去0.5元这个赌局玩家的期望收益率为0.5
0.5=0.25,对玩家非常有利,问题是每次下注多少赚得最快呢我们现在用凯利公式计算F=0.25/(1
0.5)=0.5,也就是说每次下注一半,赚得最快,现在用EXCEL验证一下,以下计算引用了RAND和IF函数,下注100次
F=(PwR-Pl)/Rw R是赔率,Pw是胜率,Pl是败率,F是现有资金下次下注的比例,可以理解为股票的仓位
但是这个版本是简化的公式,主要用于赌博。后来又搜寻和分析,找到完整的公式
=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%的本金是不合理的,因为一旦哪一次赌博赌输了,那么所有的本金就会全部输光,再也不能参加下一局,只能黯然离场。而从长期来看,赌输一次这个事件必然发生,所以说长期来看必定破产。 所以这里就得出了一个结论:只要一个赌局存在一下子把本金全部输光的可能,哪怕这个可能非常的小,那么就永远不能满仓。
实际情况是不是这个样子呢?我们先不从理论上来分析这个问题,我们可以来做个实验。我们模拟这个赌局,并且每次下注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变成了,收益巨大。但是和20%比例的结果相比,那真是相当于没赚钱。 这就是知识的力量!
也就是说每次把一半的钱拿去下注,长期来看可以得到最大的收益。
下面我要根据实验得出平均增长率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(其实也就是期望收益)。 通过实验模拟之后也发现确实杠杆交易比满仓交易资金增长的速度要快的多。这也让我更好的理解了为什么很多量化投资基金公司需要使用杠杆交易。
当然凯利公式在实际的运用中不可能这么的简单,还有很多的困难需要克服。比如说杠杆交易所需要的资金成本,比如说现实中资金并不是无限可分的,比如说在金融市场并不像上文提到的简单的赌局那么简单。
但是不管怎么样,凯利公式为我们指明了前进的道路。