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次亏损),与设定胜率一致,保证结果确定性。实际交易中盈亏顺序随机,但长期来看,超过凯利比例的下注必然降低几何增长率,本案例的确定性序列已能清晰暴露这一风险特征。