2. 凯利公式在单笔交易中的应用
任务目标
基于历史交易统计中的胜率(p)与盈亏比(b,平均盈利/平均亏损),计算最优凯利比例 f* = (bp - (1-p)) / b,并模拟在固定初始资金下,分别按 0.25×f*、0.5×f*、1.0×f*、2.0×f* 四种比例下注时的资金曲线,直观展示过度下注(超过凯利比例)导致的回撤放大与最终资金衰减风险。
实现与核心逻辑
本案例使用 Python 实现,核心包含两部分:
1. 凯利比例计算:输入历史胜率与盈亏比,输出最优下注比例;
2. 资金曲线模拟:设定固定交易次数与单次盈亏幅度,按不同资金比例进行顺序交易,记录每次交易后的账户净值。模拟中每次交易的盈亏金额 = 当前资金 × 下注比例 × 单次盈亏幅度(盈利时取盈亏比 b,亏损时取 -1)。
模拟采用确定性序列(固定盈亏交替模式),保证结果可复现,便于对比不同比例下的资金演化差异。
完整代码
import matplotlib.pyplot as plt
def kelly_fraction(win_rate, profit_loss_ratio):
"""计算凯利比例 f* = (bp - (1-p)) / b"""
return (profit_loss_ratio * win_rate - (1 - win_rate)) / profit_loss_ratio
def simulate_curve(initial_capital, bet_fraction, profit_loss_ratio, trade_sequence):
"""按固定盈亏序列模拟资金曲线,返回每次交易后的资金列表"""
capital = initial_capital
curve = [capital]
for trade in trade_sequence: # trade: +1 表示盈利,-1 表示亏损
if trade == 1:
capital += capital * bet_fraction * profit_loss_ratio
else:
capital -= capital * bet_fraction
curve.append(capital)
return curve
# ========== 参数设置 ==========
win_rate = 0.55 # 历史胜率 55%
pl_ratio = 1.5 # 盈亏比 1.5(平均盈利/平均亏损)
initial_capital = 10000 # 初始资金
n_trades = 100 # 模拟交易次数
# 生成确定性盈亏序列:前55次盈利,后45次亏损(与胜率一致)
trade_seq = [1]*55 + [-1]*45
# ========== 计算凯利比例 ==========
f_star = kelly_fraction(win_rate, pl_ratio)
print(f"凯利比例 f* = {f_star:.4f} ({f_star*100:.2f}%)")
# ========== 模拟不同下注比例 ==========
multipliers = [0.25, 0.5, 1.0, 2.0]
curves = {}
for m in multipliers:
bet = f_star * m
curves[f"{m}×f*"] = simulate_curve(initial_capital, bet, pl_ratio, trade_seq)
# ========== 绘制资金曲线 ==========
plt.figure(figsize=(10, 6))
for label, curve in curves.items():
plt.plot(curve, label=label)
plt.axhline(y=initial_capital, color='gray', linestyle='--', linewidth=0.8)
plt.xlabel("交易次数")
plt.ylabel("账户资金")
plt.title("不同下注比例的资金曲线对比")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# ========== 输出最终资金 ==========
for label, curve in curves.items():
print(f"{label}: 最终资金 = {curve[-1]:.2f}")
运行方式
安装依赖:pip install matplotlib。将代码保存为 kelly_simulation.py,在终端执行 python kelly_simulation.py。
验证方法与判定标准
运行后观察控制台输出与资金曲线图:
1. 控制台打印的凯利比例应约为 0.1667(16.67%),计算过程为 (1.5×0.55 − 0.45) / 1.5;
2. 四条曲线中,1.0×f* 曲线在100次交易后资金最高,0.25×f* 与 0.5×f* 曲线平滑增长但终值较低;
3. 2.0×f*(过度下注)曲线在前期盈利阶段快速上升,但进入连续亏损阶段后急剧回撤,最终资金显著低于 1.0×f*,直观展示超过凯利比例下注的风险;
4. 最终资金输出中,1.0×f* 的终值应大于 2.0×f* 的终值,且 2.0×f* 的曲线出现明显峰值后大幅回落。
若上述条件满足,则说明凯利公式计算正确,且模拟有效展示了过度下注的资金衰减风险。
关键说明
本模拟采用固定盈亏交替序列(前55次盈利、后45次亏损),与设定胜率一致,保证结果确定性。实际交易中盈亏顺序随机,但长期来看,超过凯利比例的下注必然降低几何增长率,本案例的确定性序列已能清晰暴露这一风险特征。