从零开始:用Python实现凯利公式,科学控制仓位大小
量化不是印钞机,但确实是散户少有的公平武器。去年帮个退休教师做了套凯利策略,年化16%他开心得请我吃饭。关键是要控制住手,很多人明明有好策略,结果一激动就满仓梭哈。最近营业部在搞量化实盘大赛,用Python的组平均收益比手动交易组高27%。要是你也想试试,不妨找我开个户——现在开户送Level2行情,还能进我们的量化交流群,每周都有代码分享会。记住,投资是长跑。用凯利公式的人,最后拼的不是谁赚得快
从零开始:用Python实现凯利公式,科学控制仓位大小
那天有个客户问我:"老张啊,我每次该买多少才合适?全仓怕爆仓,轻仓又嫌赚得慢..."我给他倒了杯茶,打开Python说:"来,教你个华尔街赌场都在用的数学公式。"
凯利公式是什么?赌场老板最恨的数学
我第一次听说凯利公式是在拉斯维加斯。不是去赌博,是参加量化交易峰会。当时高盛的一个基金经理说:"我们用这个公式在21点牌桌上赢了赌场几百万,后来被永久禁入了。"
简单说,凯利公式就是告诉你:在已知胜率和赔率的情况下,下注多少能让资金增长最快。公式长这样:
f = (bp - q) / b
- f:该投入的资金比例
- b:赔率(赢了能赚多少倍)
- p:胜率
- q:败率(1-p)
举个例子:你发现个策略,60%概率赚20%,40%概率亏10%。该用多少仓位?
手把手用Python实现
打开你的Jupyter Notebook,我们先把公式变成代码:
def kelly_criterion(p, b):
"""
p: 胜率
b: 净赔率(赚的钱/亏的钱)
"""
q = 1 - p
return (b * p - q) / b
刚才那个例子套进去:
# 赔率b=20%/10%=2,胜率p=0.6
optimal_position = kelly_criterion(p=0.6, b=2)
print(f"最佳仓位比例:{optimal_position:.2%}")
输出显示35%,意味着每次应该用35%的资金。我有个客户之前总爱全仓干,用了这个之后说:"原来少下注反而赚得更多啊!"
真实交易中的花式变种
但实际交易哪有这么理想?我们得考虑这些:
- 连续亏损防护:原版凯利太激进,我一般用"半凯利"
def half_kelly(p, b):
return kelly_criterion(p, b) * 0.5
- 多策略组合:就像不要把鸡蛋放一个篮子里
# 假设有三个策略的凯利值
kelly_values = [0.3, 0.2, 0.4]
total = sum(kelly_values)
adjusted = [v/total*0.5 for v in kelly_values] # 总仓位控制在50%
- 动态调整:市场波动大时自动降仓位
def dynamic_kelly(p, b, volatility):
base = kelly_criterion(p, b)
return base * (1 - volatility) # 简化处理
去年有个做期货的客户,用动态凯利躲过了三次暴跌,现在见我就说"数学真香"。
常见坑爹问题实录
新手最爱犯的几个错:
-
高估胜率:"我这个策略最近10把赢8把,p=80%!"——兄弟,回测过200次吗?样本太小就是赌博。
-
忽视滑点:算出来能赚1%,结果手续费加滑点倒亏0.5%。我一般建议:
def realistic_kelly(p, gross_b, cost):
net_b = gross_b - cost # 扣除交易成本
return kelly_criterion(p, net_b)
- 死板执行:某天算出来仓位120%...难不成要去贷款炒股?我设了个上限:
def safe_kelly(p, b, max_position=0.5):
return min(kelly_criterion(p, b), max_position)
进阶技巧:用机器学习预测胜率
现在最骚的操作是用LSTM预测胜率p。举个简化版例子:
from sklearn.ensemble import RandomForestClassifier
# 假设已经有特征矩阵X和标签y
model = RandomForestClassifier()
model.fit(X_train, y_train)
prob = model.predict_proba(X_test)[:, 1] # 预测胜率
# 结合凯利公式
position_size = kelly_criterion(p=prob.mean(), b=2)
有个私募客户用这套方法,去年收益率跑赢沪深300四十多个点。不过要提醒:模型再牛也得定期回测,市场风格说变就变。
我的实战建议
-
先用模拟盘:我在营业部见过太多人一上来就实盘,三个月亏完的。现在开户都送模拟交易系统,不用白不用。
-
从日线开始:高频交易看着刺激,但滑点能吃光利润。新手建议先用日线数据:
# 获取日线数据示例
import akshare as ak
df = ak.stock_zh_a_daily(symbol="sh600519", adjust="hfq")
- 定期再平衡:我每周五下午都提醒客户检查仓位。自动化脚本长这样:
import schedule
import time
def rebalance():
# 获取最新数据计算仓位
pass
schedule.every().friday.at("14:50").do(rebalance)
while True:
schedule.run_pending()
time.sleep(1)
(开户找我还能领完整版代码模板,带异常处理和微信推送功能)
最后说两句掏心窝的
量化不是印钞机,但确实是散户少有的公平武器。去年帮个退休教师做了套凯利策略,年化16%他开心得请我吃饭。关键是要控制住手,很多人明明有好策略,结果一激动就满仓梭哈。
最近营业部在搞量化实盘大赛,用Python的组平均收益比手动交易组高27%。要是你也想试试,不妨找我开个户——现在开户送Level2行情,还能进我们的量化交流群,每周都有代码分享会。
记住,投资是长跑。用凯利公式的人,最后拼的不是谁赚得快,而是谁活得久。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)