最被忽视的变量:仓位计算
大多数交易者痴迷于入场信号。然而,针对期货和外汇市场的广泛研究显示,对长期资金曲线影响最大的变量不是入场规则也不是出场规则,而是仓位计算。CME集团在2017年针对10,000个模拟交易账户的研究表明:使用系统化仓位计算的交易者,在500笔交易后的账户存活率比使用固定手数的交易者高出73%。
本文覆盖三种具体的仓位计算方法,适用于手工主观交易者和自动化EA策略,从简单到数学最优依次展开。
方法一:固定分数法(基础款)
这是行业标准方法,原因很简单——它有效。每笔交易承担固定百分比的账户净值风险,大多数策略建议0.5%到2%。
计算公式:
```
仓位大小 = (账户净值 × 单笔风险%) / (止损点数 × 每标准手点值)
```
逐步计算示例:
为什么有效: 亏损时期仓位自动缩小,盈利时期仓位自动扩大,而波动率环境恰恰通常也需要这样的调整。
EA实现方法: 大多数平台可使用`NormalizeDouble()`函数进行手数计算。伪代码如下:
```python
def calculate_lot_size(account_balance, risk_percent, stop_pips, pip_value):
risk_amount = account_balance * (risk_percent / 100)
pip_risk = stop_pips * pip_value
lot_size = risk_amount / pip_risk
return round(lot_size * 100) / 100 # 保留两位小数,以迷你手为单位
```
方法二:波动率调整法(用于震荡策略)
固定止损点在波动率变化时会失效。使用平均真实波幅(ATR)来归一化仓位大小,可以在不同市场环境下保持一致的风险暴露。
基于ATR的公式:
```
仓位大小 = (账户净值 × 风险%) / (ATR × 每标准手点值 × 波动率倍数)
```
波动率倍数通常为2倍或3倍ATR。以使用3倍ATR止损的波段交易策略为例:
当前EURUSD示例(日线ATR = 85点):
当波动率翻倍(ATR变为170点): 同样计算得出0.058手。仓位自动减半,尽管止损幅度扩大,但美元风险保持不变。
方法三:修正凯利公式(数学最优但有风险)
凯利准则根据胜率和盈亏比计算最优下注比例。但完整凯利对外汇交易来说过于激进,专业人士通常使用分数凯利(25%到50%)。
凯利公式(交易版简化):
```
f = W - (1-W)/R
```
其中:
计算示例:
这意味着每笔交易建议投入35%的资金——在外汇中显然是鲁莽的。解决方案:使用分数凯利。
分数凯利(取完整凯利的25%):
0.35 × 0.25 = 0.0875(每笔8.75%)
结合最大回撤约束后,进一步降至每笔2-3%。
关键警告: 凯利公式假设你确切知道自己的胜率和盈亏比。现实中,这些都只是带有显著抽样误差的估计值。始终使用计算出的凯利值的25-50%,然后将结果上限设为每笔3%的风险。
心理约束:最大回撤法则
任何仓位计算方法,如果允许的回撤超过了你的情绪承受能力,都是无效的。以下规则不受数学计算的影响:
最大仓位限制 = 最大可承受回撤 / (预期连续亏损次数 × 平均单笔亏损率)
示例:
如果计算结果低于1.0,则必须降低单笔风险。
为EA建立完整的风险框架
对于自动化系统,建议实施以下三个层次:
第一层:单笔风险上限
趋势跟踪系统最高2%,均值回归系统最高1%(后者通常有更长的回撤期)。
第二层:日亏损上限
若当日亏损达到起始净值的6%,暂停交易24小时。
第三层:周亏损上限
若累计亏损达到净值峰值的15%,暂停交易一周。
MQL5代码示例:
```mql5
double CalculateDynamicLot(double riskPercent, double stopPips)
{
double accountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
double riskAmount = accountEquity * riskPercent / 100.0;
double pipValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double lotSize = riskAmount / (stopPips * pipValue);
// 应用最大手数限制
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
lotSize = MathMax(minLot, MathMin(lotSize, maxLot));
// 按步长取整
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
lotSize = MathFloor(lotSize / step) * step;
return lotSize;
}
```
常见的仓位计算错误
1. 马丁格尔翻倍法: 亏损后加倍仓位虽然能快速回本,但会导致灾难性回撤。在50%胜率系统中连续10次亏损的概率只有0.1%,但一旦发生,账户归零。
2. 固定手数不调整净值: 一个在5000美元账户上使用0.1手的交易者,单笔风险为2%。亏损后账户变成3000美元,同样的0.1手风险变成了3.3%——在亏损期间反而放大了风险。
3. 忽略相关品种的叠加风险: 同时交易EURUSD和GBPUSD,风险翻倍但机会并未翻倍。对于相关性高的货币对,应将合计仓位向下调整30-50%。
月度仓位检查清单
每月末复盘以下指标:
付诸实践
第一个月使用0.5%的单笔风险进行固定分数法。记录每笔交易的实际风险百分比。50笔交易后,计算你真实的胜率和盈亏比,然后应用分数凯利(25%乘数)来判断能否将风险提高到1%。大多数交易者会发现自己的实际绩效指标低于预期——这是有价值的信息,而不是失败。
参考来源:
Van K. Tharp,《交易之道:通向财务自由之路》(2006),第12章仓位计算。Ralph Vince,《资金管理的数学》(1992)。CME集团,“不同仓位计算方法下的交易者存活率”(2017白皮书)。John L. Kelly Jr.,“信息率的新解释”(1956)。CFTC关于杠杆与风险的投资者教育材料,2025年3月更新。
```