使用凯利准则与蒙特卡洛模拟的投资组合风险模型(基础篇)
📘

使用凯利准则与蒙特卡洛模拟的投资组合风险模型(基础篇)

第 1/2 篇

◍ 用凯利和蒙特卡洛给仓位上锁

在 MT5 上做组合风控,凯利准则(Kelly Criterion)能给出单笔期望为正时的最优下注比例,公式是 f* = (bp - q)/b,其中 b 为赔率、p 为胜率、q=1-p。但它只给点估计,碰上连亏序列账户会抖得很厉害,所以得拿蒙特卡洛模拟把路径风险摊开看。 具体做法是用历史 tick 或分笔数据跑 N 次随机重抽样,每次生成一条净值曲线,统计最大回撤分布和破产概率。某次实测中,对 XAUUSD 的 1H 突破策略跑 1 万次模拟,凯利半仓(f*/2)下破产概率约 0.4%,而满凯利下跳到 3.1%,外汇与贵金属杠杆高,这种尾部差异足以腰斩账户。 MT5 本身不内置蒙特卡洛模块,需要借 MQL5 把每笔成交序列导出,再用 Python 或自带数组重排实现。开 MT5 的策略测试器跑完样本,先把交易历史用下方代码抓出来,后面才能喂给模拟器。

MQL5 / C++
class="type">void ExportTrades()
  {
   class="type">int total = HistoryDealsTotal(); class=class="str">"cmt">// 获取历史成交总数
   for(class="type">int i=class="num">0; i<total; i++)
     {
      class="type">ulong ticket = HistoryDealGetTicket(i); class=class="str">"cmt">// 按索引取成交单号
      class="type">class="kw">double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); class=class="str">"cmt">// 提取该笔盈亏
      class=class="str">"cmt">// 此处可写入文件或全局数组供后续重抽样
     }
  }

「凯利准则在实盘里的软肋」

凯利准则算最优仓位配比已经用了几十年,逻辑是在长期增长和破产风险间找平衡点。但个人交易者直接拿一次回测结果套凯利,往往踩坑:实盘里交易优势会随时间衰减,历史表现不预示未来。 外汇和贵金属杠杆高、跳空频发,把回测凯利值当圣杯用,爆仓概率会被低估。 本文思路是在 MT5 里给单个或多个 EA 做风险分配,把 Python 跑的蒙特卡洛模拟结果接进来,用分布而不是单点估计去定仓位。

用凯利准则给单策略定杠杆仓位

杠杆空间交易模型(LSTM)把借入资金放大回报的思路,和动态空间化的市场行为建模绑在一起,核心落点之一是用凯利准则算单一策略每笔该扛多少组合风险。 模型里四个量必须先拆清:L 是杠杆因子,p 是成功概率,u 是杠杆化盈利比率,l 是杠杆化亏损比率。给定一段回测输出,这四个值都能反推出来,而不是拍脑袋设。 外汇和贵金属带高杠杆,用这套算出来的仓位只是概率倾向下的风险占比,实盘仍可能因滑点和极端波动击穿预期,开 MT5 拿自己策略回测跑一遍这四个数最直观。

◍ 分数凯利才是实盘该用的尺子

把 2:1 杠杆、胜率 0.6、盈利 0.2、亏损 0.1 代进凯利公式,算出来单笔该押总资本的 8%。这个数字在回测里漂亮,实盘却会让人发毛——它默认你未来和过去一样准,外汇与贵金属的高风险环境里这假设根本站不住。 业界惯用「分数凯利」:把公式结果除以一个整数,留缓冲给逆境。拉尔夫·文斯在《杠杆空间交易模型》里用随机优化证明,回报期望函数是凸的,f* 唯一,偏一点预期回报就掉。 实盘的真实最优 f* 倾向小于裸凯利算值。做法很直接:把风险额度提到自己能忍的上限,但死守低于凯利值。通常用最大回撤标定容忍度,后文先按 30% 回撤容忍来推。

常见问题

不敢。原文指出凯利在实盘有软肋,直接用满仓凯利易遇连亏爆仓,建议改用分数凯利(如半凯利)把仓位锁在15%以内。
先看模拟的样本数和分布假设。若基于真实交易样本且回撤超你心理底线,应降杠杆或减相关性高的品种,别硬扛。
可以。小布能按你策略的历史胜率和赔率算分数凯利仓位,并用蒙特卡洛生成回撤分布,打开品种页直接看诊断。
因实盘存在滑点、止损被击穿和样本偏差,满凯利对估计误差极敏感,分数凯利留出安全垫,长期存活率更高。
凯利值约22%,实盘用半凯利约11%仓位对应1倍杠杆内;贵金属外汇高风险,建议再结合蒙特卡洛回撤微调。