凯利公式(The Kelly Criterion)由 John R. Kelly, Jr. 于1956年提出(Kelly 1956)。它指出在一个期望收益为正的重复性赌局或者重复性投资中,每一期应该下注的最优比例。凯利公式表达式为:f*=(bp-q)/b=(p(b+1)-1)/b,其中f*为应投注的资本比值,p为获胜的概率,q为失败的概率,b为赔率。我们在投资中真正应该关心的是长期累积的收入,对于累积的收益来说,最后的结果只和输赢的局数有关,而和输赢的顺序无关。凯利公式推出了一个最佳的投入仓位比,来最大化长期的累积收益。
发现简史
凯利公式最初为AT&T贝尔实验室物理学家约翰·拉里·凯利(John Larry Kelly)根据同僚克劳德·艾尔伍德·香农于长途电话线杂讯上的研究所建立。凯利说明香农的信息论要如何应用于一名拥有内线消息的赌徒在赌马时的问题。赌徒希望决定最佳的赌金额,而他的内线消息不需完全准确(无杂讯),即可让他拥有有用的优势。凯利的公式随后被香农的另一名同僚爱德华·索普应用于二十一点和股票市场中。1
简介
除可将长期增长率最大化外,此方程式不允许在任何赌局中,有失去全部现有资金的可能,因此有不存在破产疑虑的优点。方程式假设货币与赌局可无穷分割,而只要资金足够多,在实际应用上不成问题。凯利公式的最一般性陈述为,藉由寻找能最大化结果对数期望值的资本比例f*,即可获得长期增长率的最大化。对于只有两种结果(输去所有资金,或者获得资金乘以特定赔率的彩金)的简单赌局而言,可由一般性陈述导出以下式子:
f*=(bp-q)/b
其中
f*为现有资金应进行下次投注的比例;
b为投注可得的赔率(此处的赔率是净赔率);
p为获胜率;
q为落败率,即1-p;举例而言,若一赌博有40%的获胜率(p=0.4,q=0.6),而赌客在赢得赌局时,可获得二对一的赔率(b=2),则赌客应在每次机会中下注现有资金的10%(f*=0.1),以最大化资金的长期增长率。
注意,这个广为人知的公式只适用于牌桌赌博,即输的情况下本金全部亏光,而适用更为广泛的凯利公式是:
f*=(prW-qrL)/(rLrW)
其中f*,p,q同上,rW是获胜后的净赢率,rL是净损失率。
换句话说,第一个公式不过是第二个公式里rL=100%的情形。
凯利公式最初为AT&T贝尔实验室物理学家约翰·拉里·凯利根据同僚克劳德·艾尔伍德·香农于长途电话线杂讯上的研究所建立。凯利说明香农的信息论要如何应用於一名拥有内线消息的赌徒在赌马时的问题。赌徒希望决定最佳的赌金额,而他的内线消息不需完美(无杂讯),即可让他拥有有用的优势。凯利的公式随後被香农的另一名同僚爱德华·索普应用於二十一点和股票市场中。
The Kelly Criterion
Kelly % = W – [(1 – W) / R]
Where:
W = Winning probability
R = Win/loss ratio
投资运用
凯利公式在投资中可作如下应用:
1、凯利公式不能代替选股,选股还是要按照巴菲特和费雪的方法。
2、凯利公式可以选时,即使是有投资价值的公式,也有高估和低估的时候,可以用凯利公式进行选时比较。
3、凯利公式适合非核心资产寻找短期投机机会。
4、凯利公式适合作为资产配置的考虑,对于资金管理比较有利,可以充分考虑机会成本。
盲点
凯利公式原本是为了协助规划电子比特流量设计,后来被引用于赌二十一点上去,麻烦就出在一个简单的事实,二十一点并非商品或交易。赌二十一点时,你可能会输的赌本只限于所放进去的筹码,而可能会赢的利润,也只限于赌注筹码的范围。但商品交易输赢程度是没得准的,会造成资产或输赢有很大的震幅。
介绍了这么多那么凯利公式是否能利用在炒股上呢。当然可以股票的每日涨跌不定 就像丢硬币的正反面。但关键的是你买了股票不是当天卖掉。你可能过几天卖,也可能过几十年才卖。所以输赢无定。就直接套用凯利公式非常不准确。于是出现了变种。
凯利算概率代码
如下代码
==========================================
import yfinance as yf
import numpy as np
# 下载纳斯达克100指数的历史数据
data = yf.download('^NDX', period='1y')
# 计算日收益率
daily_returns = data['Adj Close'].pct_change().dropna()
# 计算年化标准差
annual_std_dev = np.std(daily_returns) * np.sqrt(252)
# 计算年化平均回报率
annual_mean_return = np.mean(daily_returns) * 252
# 假设无风险利率为0,简化凯利公式的计算
# 凯利公式: f* = (bp - q) / b
# 其中:
# f* 是当前资金的投注比例;
# b 是获得的赔率(b比1);
# p 是获胜的概率;
# q 是失败的概率,即1 - p。
# 在股票市场中,b大约等于平均回报率除以回报的标准差
# p可以近似为资产回报率大于无风险利率的概率。
# 为凯利公式近似计算b和p
#平均年化回报率/除标准差 标准差反应的是股价的变动如果变动幅度越大说明你盈亏风险越大 反之年化回报率高 其实标准差也会越大 股市么 波动的 大家要辩证法去看待这个问题富贵险中求生存
b = annual_mean_return / annual_std_dev
#这里的p是概率 即每天收益>0的日子之和 ➗ 总体日利率之和 算出总共252个交易日你赚钱的概率
p = len(daily_returns[daily_returns > 0]) / len(daily_returns)
# 计算凯利公式
kelly_criterion = (b * p - (1 - p)) / b
# 输出结果
print(f"纳斯达克100指数赔率:{b}/{p}")
print(f"纳斯达克100指数的年标准差: {annual_std_dev}")
print(f"纳斯达克100指数的年收益率: {annual_mean_return}")
print(f"纳斯达克100指数的凯利持仓比例: {kelly_criterion}")
==================================================
数据回测
这个概率算出来后可以带入数据算出你的收益
import yfinance as yf
import numpy as np
# 获取纳斯达克100指数的历史数据
data = yf.download('NDX', period='1y')
# 计算每日收益率
daily_returns = data['Adj Close'].pct_change()
# 定义凯利公式函数
def kelly_criterion(b, p):
q = 1 - p
return (b * p - q) / b
# 假设胜率和赔率
win_prob = 0.56 # 胜率
win_loss_ratio = 2.3 # 赔率
# 计算每天的投资比例
investment_ratios = kelly_criterion(win_loss_ratio, win_prob)
# 初始资金
initial_capital = 100000
capital = initial_capital
# 模拟每天的投资
for daily_return in daily_returns[1:]: # 排除第一天的 NaN
capital += capital * investment_ratios * daily_return
# 计算一年后的总金额
final_amount = capital
print(f'一年后的总金额: {final_amount}')
=====================================
结局
jiangming@admin\njiangming ~ % python3 m2.py
[*********************100%%**********************] 1 of 1 completed
一年后的总金额: 114810.36208716096
我算出来年化大概在14%
不足之处
因为凯利公式没法预测未来。他是对历史数据的测算。历史数据有一定准确率。但也非常不靠谱。只有一个股市10年 20年长期赢面比较大的时候才能应用凯利公式。比如纳斯达克 道琼斯 长达百年的上涨行情。真的就像赌场。如果股票类似买彩票官方设定好赔率是投注总金额的65% 那么这种玩法你每把投资都会亏损35%的现金。你投注越多亏的越多。
应用凯利公式可以帮你取得相比纳斯达克100指数更好的年化收益。
你可以去测算每只股票 比如apple 比如微软公司的 年化收益和风险比,但切记它不能预测未来纳斯达克中很多科技公司收益也很高。但也有很多科技公司消失在历史长河中。比如瑞幸咖啡这些
公司经营好坏 会反应在股价中公司的好坏其实和ceo强相关性。比如apple的库克比较靠谱 巴菲特大概有10%-15%的资金就押注在他身上。
但apple这些年也麻烦不断 受到了华为的正面挑战。所以也是有亏的概率的,这些黑天鹅事件无法用凯利公式测试。
又比如nvidia去年因为ai计算 盈利暴涨,股价暴涨了10倍。这些都是历史数据中无法预测的。
但相同的一点是皮衣黄 和库克 和马斯克 都是这个地球上最优秀的人类。他们值得你下注。
另外一个反面教材是纳斯达克的阿里巴巴 你去看看纳斯达克BABA。受政策法规影响太大
这就是纳斯达克欣欣向荣 而大A3000点的原因了。当中国不够强大,华为 国内盈利强的公司不在a股中的时候。a股是不值得你投资的。
但你测试纳斯达克指数就比较准了。
但读者你思考一个问题,如果一个公司长期上涨,你是all in在开头 还是用凯利公式按日定投呢?