使用凯利准则与蒙特卡洛模拟的投资组合风险模型(基础篇)
◍ 用凯利和蒙特卡洛给仓位上锁
在 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 的策略测试器跑完样本,先把交易历史用下方代码抓出来,后面才能喂给模拟器。
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% 回撤容忍来推。