🎲
用 MQL5 表示统计概率分布:pdf/cdf/逆函数全实现
概率分布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 无外部依赖。
- pdf:给定 x 求密度,用于似然与贝叶斯更新。
- cdf:给定 x 求 P(X≤x),用于 VaR 与胜率估计。
- invcdf:给定概率求分位数,用于止损价位标定。
如何扩展到其他分布
以 CNormaldist 为模板,照同样接口实现指数、对数正态、学生 t 等分布。统一接口让上层模块(风险计算、蒙特卡洛)无需关心具体分布类型。
✦ invcdf 标定止损最实用
已知“愿意承受 5% 爆仓概率”,用 invcdf(0.05) 反推对应价格偏移,比拍脑袋定止损科学得多。
小结
把概率分布做成带 pdf/cdf/invcdf 的标准类库,量化交易的概率计算与风险定价才有可复用的数学底座。配合“统计分布在交易中的作用”做采样,形成完整工具链。
常见问题
用组合或 interface 模拟:把公共方法抽进基类,具体分布持有基类实例并暴露统一 pdf/cdf/invcdf 接口。
无初等闭式,通常用切比雪夫多项式逼近 erfccheb,再用有理逼近反解 inverf/inverfc。
已知可承受的爆仓概率 p,用 invcdf(p) 反推对应价格偏移来标定止损价位,比拍脑袋科学。