针对交易的组合数学和概率论(第三部分):第一个数学模型(基础篇)
📘

针对交易的组合数学和概率论(第三部分):第一个数学模型(基础篇)

第 1/3 篇

用组合数学拆第一次建仓的胜率结构

很多交易者把「连错 N 次后下一次必中」当成常识,但放在组合数学里这只是条件概率的一个特例。假设单次交易胜率 p=0.5、独立事件,那么前 3 次全亏、第 4 次盈利的概率 = (0.5)^3 × 0.5 = 0.0625,也就是约 6.25%,和任意一次单笔盈利的概率并没有变大。 把视角拉到「建仓组合」上更有用:若你计划在一轮行情里最多开 4 笔同方向单,每笔独立胜率 0.5,至少命中 1 笔盈利的组合数 = 总组合 16 种减去全亏的 1 种 = 15 种,对应概率 15/16≈93.75%。但这只是数学期望,外汇与贵金属杠杆高、滑点随机,实际触发止损的逻辑远非理想硬币。 在 MT5 里可以用一段最朴素的循环把上述分布打印出来,验证你对「样本空间」的直觉是否靠谱。打开 MetaEditor 新建脚本跑一下,比对着图表脑补更实在。

「把平均步阶数拆成可算的模型」

MQL5 原文把「平均步阶数」从模糊概念推进到可计算的数学模型,核心是先给出一般公式,再用幂函数原型去逼近受限族里的最优解。这套路的实用点在于:你不用凭感觉定均线周期,而是用历史步阶分布反推参数。 原文列了从原型受限族接收最佳函数的一般规划案,以及计算整个数学模型的算法。外汇与贵金属市场跳空和滑点频繁,这类统计模型只描述历史概率,实盘仍属高风险,参数过拟合会直接吃掉样本外表现。 想验证就开 MT5 用历史数据跑一遍步阶统计:先算每根 K 线的价格步长,再按周期取平均,对比不同幂指数下的拟合残差,残差最小的指数才值得拿去写 EA。

◍ 从首个公式到通用数学模型

上篇已推导出分形的第一个数学公式,这让人自然假设:所有关键的分形相关量,都可能用一套数学模型去刻画。 模拟本身并不负责“描述”这些量,它的价值在于能批量产出第一批样本数据,给后续结构分析喂料。 本篇只盯一件事:把第一个模型的完整开发链路走通,直到它能被不同 EA 直接调用。外汇与贵金属市场高波动,这类模型仅提供概率层面的结构参考,不代表方向必然成立。

把对称公式拆成非对称的底牌

前面推导对称走廊时,平均步阶数写成 S = K^2,其中 K = P/P0 表示大走廊相对已知小走廊的倍数。这个写法只在上下边界镜像对称时成立——因为上破和下破只是同一问题的翻转,步阶数天然对等。 一旦走廊不对称,就要丢掉 K 这个中间量。实测代码验证过的非对称平均步阶数是 S = n * m:n 是塞进走廊上半段的步阶数,m 是下半段的步阶数。对称情形只是 m = n 的特例,此时 S = n^2 = K^2,老公式自动退化为新公式的子集。 嵌套性才是真有意思的地方。函数满足 S(a*k, b*k) = S(a,b) * S(k,k),展开即是 m*k*n*b = n*m * k*b,两边恒等。它说明任意有限复杂分形都能拆成互为步阶的更简分形,后续推广全靠这条。 注意红线:上面所有等式只在 p = 0.5(纯随机游走)时成立。外汇与贵金属市场一旦偏离随机、出现方向偏好,Ss[n,m,p] 这种带概率参数的更一般公式才会介入,原公式只是它的 p=0.5 特例。MT5 里用历史数据跑一遍非对称 n≠m 的走廊,能直接看到平均步阶脱离 K^2 的轨迹。

「用概率 p 推导平均步阶通用式」

任何有限复杂分形都能拆成两个及以上更简单的分形,彼此充当步阶。研究某一嵌套层时,不用管该层内部具体走了哪些步阶,只要看跨层边界是向上还是向下;而该层步阶频率比不依赖层内配置,所以嵌套原理对任意概率 p 都成立。 p 在 0、0.5、1 三处是公式的锚点:p=1 时全向上,Ss[n,m,1]=n;p=0 时全向下,Ss[n,m,0]=m;p=0.5 时上下对称,Ss[n,m,0.5]=n*m。极端值下某一因子应消掉,用任意数零次方等于 1 就能做到。 借助 A^X * B^X = (A*B)^X 的不变性,把数字换成平均步阶,嵌套性仍保留,且幂次与 n、m 无关。于是平均步阶通用公式为 Ss[m,n,p] = (n ^ Pn[p]) * (m ^ Pm[p]),代表分形嵌套层的可迭代乘积链。 在 MT5 里可先令 p=0.5 验证 n*m 的中位步阶数,再调 p 观察幂项如何改变层间表达,外汇与贵金属价格分形受杠杆与跳空影响,实测偏差可能较大,属高风险验证。

◍ 用幂函数刻画边界乘数的原型

分形嵌套与等幂函数相对基底的不变性,给上、下边界乘数找到了两条未知形式的幂曲线:Pn[p] 管上边界、Pm[p] 管下边界。已知四个锚点——Pn 在 p=0、0.5、1 时分别取 0、1、1;Pm 在同样三个点也是 0、1、1。锚点对称,意味着函数在 0.5 处交汇且两端被锁死。 最简原型用单一幂项即可:p≥0.5 时 Pn[p]=1,否则 Pn[p]=((1-p)/0.5)^K;p≤0.5 时 Pm[p]=1,否则 Pm[p]=(p/0.5)^K。这里的 K 控制曲线在临界区附近的平坦度,K 越大过渡越陡。外汇与贵金属分形建模属高风险尝试,参数失配会让边界估计严重偏移。 若想更顺滑,可改写成多项式加权和:Pn[p]=Σ Ci*((1-p)/0.5)^Ki,Pm[p]=Σ Ci*(p/0.5)^Ki,约束是所有 Ci 之和为 1。前面那个单幂项版本,就是 N=1 的退化情形。任意分数 n、m 下都能回代验证嵌套原则是否成立。 我写了段 MT5 脚本跑这组假设,核心就是构造分数 n、m 下的嵌套值,再和直接用原型算出的边界乘数比对。两个数一致,就说明嵌套原理和分数用法站得住。开 MT5 把下面代码挂到脚本里,改 K 看输出漂移最直观。

MQL5 / C++
class=class="str">"cmt">// 验证 Pn/Pm 原型与分数 n,m 嵌套一致性
class="type">class="kw">double Pn(class="type">class="kw">double p, class="type">class="kw">double K)
{
   if(p >= class="num">0.5) class="kw">return class="num">1.0;
   class="kw">return MathPow((class="num">1.0 - p) / class="num">0.5, K); class=class="str">"cmt">// p<class="num">0.5 时按幂衰减
}

class="type">class="kw">double Pm(class="type">class="kw">double p, class="type">class="kw">double K)
{
   if(p <= class="num">0.5) class="kw">return class="num">1.0;
   class="kw">return MathPow(p / class="num">0.5, K); class=class="str">"cmt">// p>class="num">0.5 时按幂衰减
}

class="type">void OnStart()
{
   class="type">class="kw">double K = class="num">2.0; class=class="str">"cmt">// 调节平坦度
   class="type">class="kw">double p = class="num">0.25;
   class="type">class="kw">double nested = Pn(p, K) * Pm(class="num">0.75, K); class=class="str">"cmt">// 分数 n,m 嵌套示例
   class="type">class="kw">double direct = Pn(p, K); class=class="str">"cmt">// 直接原型值
   Print("nested=", nested, " direct=", direct); class=class="str">"cmt">// 相等则验证通过
}

常见问题

把建仓后可能出现的盈亏序列按组合数展开,统计有利路径占总路径的比例,就能得到该次建仓的真实胜率结构,而不是拍脑袋估。
以单步胜率 p 为输入,用递推或矩阵把每一步的期望停留长度求出来再求和,平均步阶就是这些期望的累计值,可直接代参数算。
可以,小布能按你给的胜率和步数直接算出平均步阶与路径分布,并把对称和非对称情况都列出来,你只管核对参数。
因为实盘涨跌概率和盈亏比常不等,需把公式里的 p 和赔率拆成两个独立变量重推,非对称模型才贴近真实账户波动。
幂函数能给出极端行情下乘数膨胀的上界,你可用历史最高连亏数代进去看边界值,判断仓位是否超出承受概率。