首页 / 交易学院 / 用 MQL5 表示统计概率分布:pdf/cdf/逆函数全实现
用 MQL5 表示统计概率分布:pdf/cdf/逆函数全实现
🎲

用 MQL5 表示统计概率分布:pdf/cdf/逆函数全实现

量化评估 难度 · 高阶 2013 13 分钟阅读
概率分布pdfcdf误差函数MQL5量化

分布的本质与分类

为描述随机变量,需要一维统计概率分布。按随机变量类型分连续与离散;按定义方式分概率密度函数(pdf)、分布函数(cdf)、逆分布函数(invcdf)、可靠性函数(sf)等。分析理论分布能直观识别频率形态并提取统计参数。

MQL5 中缺失多继承的挑战

最大挑战是 MQL5 不支持多继承。C++ 里常见的“分布基类 + 具体分布”多重继承层次,在 MQL5 要用组合或接口(interface)模拟,把公共方法拆到独立基类。

CNormaldist:正态分布的核心方法

CNormaldist 封装正态分布,提供 pdf(密度)、cdf(累积)、invcdf(逆累积)、sf(生存函数)。内部依赖误差函数 erf/erfc 与切比雪夫逼近 erfccheb。

class CNormaldist
  {
public:
   void CNormaldist(double mu, double sigma);
   double pdf(double x);     // 概率密度
   double cdf(double x);     // 累积分布
   double invcdf(double p);  // 逆累积(分位数)
   double sf(double x);      // 生存函数 1-cdf
private:
   double erf(double x);     // 误差函数
   double erfc(double x);    // 互补误差函数
   double erfccheb(double x);
   double inverfc(double p);
  };

误差函数的数值实现

erf/erfc 没有初等闭式,通常用切比雪夫多项式逼近(erfccheb),inverf/inverfc 用有理逼近反解。精度足够金融计算,且纯 MQL5 无外部依赖。

如何扩展到其他分布

以 CNormaldist 为模板,照同样接口实现指数、对数正态、学生 t 等分布。统一接口让上层模块(风险计算、蒙特卡洛)无需关心具体分布类型。

✦ invcdf 标定止损最实用
已知“愿意承受 5% 爆仓概率”,用 invcdf(0.05) 反推对应价格偏移,比拍脑袋定止损科学得多。

小结

把概率分布做成带 pdf/cdf/invcdf 的标准类库,量化交易的概率计算与风险定价才有可复用的数学底座。配合“统计分布在交易中的作用”做采样,形成完整工具链。

常见问题

用组合或 interface 模拟:把公共方法抽进基类,具体分布持有基类实例并暴露统一 pdf/cdf/invcdf 接口。
无初等闭式,通常用切比雪夫多项式逼近 erfccheb,再用有理逼近反解 inverf/inverfc。
已知可承受的爆仓概率 p,用 invcdf(p) 反推对应价格偏移来标定止损价位,比拍脑袋科学。