English Русский Español Deutsch 日本語 Português
preview
针对交易的组合数学和概率论(第一部分):基础知识

针对交易的组合数学和概率论(第一部分):基础知识

MetaTrader 5测试者 | 20 九月 2021, 08:03
4 593 0
Evgeniy Ilin
Evgeniy Ilin

内容


概述

依我的观点,概率论语言可针对行情内部运行过程提供完全不同等级的解读。 了解概率论的具体细节后,您将开始以全新的方式进行思考。 模糊的想法或一些未经证实的技巧也不会再诱发您急于用真实账户进行交易的愿望。 另一方面,我明白这种新途径也许并不适合所有人。 在本系列中,我打算向您展示一种真实且正确的交易方法。 所有决策都会仅基于数字,并应避免诸如“可能”、“假设”、“似乎”、和类似的假设。


概率论如何在行情分析中发挥作用?

我一生中从事技术科学的时间很长,而概率论对我来说是最难的。 这是因为我始终搞不懂它的可能性有多广泛。 一个无可争议的优势在于其无可限量的能力,这仅取决于您的创意和勤奋,当然还有您的智慧。 经历多年的技术研究,我意识到智慧不在于执行相同类型操作时的速度和注意力,而是在于您的思维活跃性。 例如,如果我们研究微分数学、向量场和标量场理论,甚至学校代数,它们都暗示着一组特定的规则或建议,遵循这些规则或建议,您几乎可以解决任何问题。 每一个非标准的任务都是对我们头脑的冲击。 在概率论中,这样的时刻数不胜数 — 这就是许多问题只能通过完全不同的方法来解决的地方。 换言之,只有通过勤奋和愿意去解决给定的问题才能开发智力,而概率论有助您解决这个问题。

概率论的框架描述了这些基础交易概念,诸如数学期望、各种事件的可能概率、平均值、百分位数、及更多内容。 概率论声称没有完美的交易系统,每个系统都有自己的风险。 我们能做的只是选择不会因风险引起太多麻烦的交易系统。 更重要的是正确解读这些风险。 换句话说,我们从感觉或视觉等不精确的近似语言转向清晰的定量标准。 当然,视觉评估也很重要,但与定量变量结合运用时则效果更佳。 不可能在一篇文章中讲述所有详情和细微差别,但我将尝试在此处囊括一些有趣的信息。 我希望您能在此找到有用的东西。


运用概率论进行手动和自动交易的细节

我们继续运用概率论进行行情分析之前,我们首先需要熟悉事件及其概率。 事件是一组满足某些标准的产物,或者根据某些标准将其分到某个集合群当中。 若产物是某个初级元素,即与给定群中的所有其他元素相等。 群是指一个过程的所有可能产物。 这是什么样的过程、其物理原理是什么、或者这个过程需要多长时间,这都不那么重要。 重要的是,作为这个过程的产物,我们将得到过程完成前不存在的东西。 那些与我们的事件相关的产物本质上就是我们的事件— 为了方便起见,我们将它们组合成一个单一对象。 上面的思路可以如下形象化:

事件

上面的插图中灰色椭圆代表所有产物。 在数学中,它被称为事件空间。 这并不意味着事件空间具有几何形状,但它非常适合阐述这些概念。 椭圆内有 4 个事件。 从插图中所见,每个事件内部都有一个小红点。 此类红点的数量即可有限亦或无限 — 这取决于所研究的过程。 插图中的两个事件相交。 此类事件称为重叠。 因此,有一些产物同时属于两个事件。 所有其它事件不重叠,因为它们位于椭圆的不同部分,且并无几何相交。 其余的灰色区域可以认为是最后的事件,或者也可以将其分解为更小的部分,直至没有灰色区域遗留。

每个事件至少有一个对应的数字,通常称为概率。 概率是指如果我们可以无限期地进行相同的实验,那么在重复相同的过程时,该事件出现的频率。 有两种类型的事件空间:

  1. 可能产物的数量有限
  2. 可能产物的数量无限

如果产物的数量有限,那么概率可以计算如下:

  • P = S/N , S 是满足事件标准的产物数量,N 是事件空间中所有产物的总数

在某些情况下,当某个空间中的产物数量无限时,也可以判定该概率,例如使用积分。 对于上图中的情况,值 “S” 和 “N” 可以替换为其几何形状的面积。

并不总是能够清楚地定义事件空间是什么,以及定义事件的产物数量和物理描述。 这些图形表示应能帮助我们的大脑对数据进行类比,如此大脑就可以习惯用概率和与这些概率相对应的附加数字来尝试理解正在发生的事情,替代几何图形处理。 事件也可以称为状态。 如果我们使用状态的逻辑,那么概率则是重复相同实验导致特定状态出现的频率。 

以图形的面积类推,椭圆中包含的所有图形的面积之和正好等于该椭圆的面积。 从数学方面,面积是落在那里的产物数量。 故此:

  • N = S[1] + S[2] + ... + S[n]
  • S 是特定事件的产物数量
  • N 是事件空间的所有产物

将等式的两边除以值 N,我们得到了一个有趣且非常重要的关系,其是整个概率理论的基础:

  • 1 = S[1]/N   +   S[2]/N   +   ...   +S[n]/N

请注意,此比率仅适用于非重叠 事件。 因为如果将事件连接起来,形状区域会重叠,它们的区域总和会大于原始椭圆的区域。 它类似于拼图,其中所有拼图的面积与生成的图像完全相等。 在这种情况下,一块拼图代表事件之一。 所有这些分数代表特定事件的概率:

  • 1  = P[1]   +   P[2]   +   ...   +P[n]

该比率则作为术语穷尽事件集合的基础。 穷尽事件集合是所有非重叠事件的统合,这些事件形成一个确定的事件空间。 对于拼图,一个完整的集合就是所有拼图。 所有这些事件的总概率必定等于 1,这意味着作为实验结果,这些事件之一必须会发生。 我们不知道哪个事件会发生,但我们会从实验结果中发现这一点。

根据上述内容,来自所选事件空间的任何一组产物都可作为一个事件。 这意味着穷尽集合能够收集所有可能的方式和组合。 当我们处理有限数量的产物时,这种组合的数量也许有限;若是产物数量无限,组合的数量始终是无限的。 如果已知产物的数量等于无穷,数学家就会考虑随机值的概念。 在某些情况下,随机值可以更方便地操作,且这是任务所允许的。 随机值是一种稍微不同的描述事件空间的方法。 在这种情况下,产物是清晰的一个或多个数字的集合。 我们可以说这是一个向量。 所考虑模型暗示了概率密度的概念。 

在探索这个主题时,将进一步运用这些概念,所以我们现在就来研究它们。 概率密度是描述整个事件空间的函数。 这个函数的维度正好等于描述该事件空间中每个产物所需的数字数量。 例如,如果我们考虑射击靶场上一个目标的命中问题,这个函数的维度将等于 2,因为目标是平面(二维)。 在这种情况下,特定结果将由 X 和 Y 坐标表征。 这些数字是我们的随机变量,因此我们可以写出以下内容:

  • R = R(X,Y)
  • R 是子弹命中坐标点 (X,Y) 的概率密度

该函数属性使得该函数所有变量从负无穷到正无穷的全积分等于一,从而证明了上述等式。 这里的概率仅由函数所在区域的积分所决定。 不同的事件可以由分段集成区域组成。 因此,我们能够根据需要描述尽可能多的事件,因为它们的数量是无限的。 这个定义在本文的框架内就足够了。

我想添加一些关于重叠事件的更多细节。 这些事件对于对整个画面的一般性理解也非常重要。 很明显,与重叠事件相比,非重叠事件应该更容易处理。 概率论有时必须处理事件的组并或切分。 但在这里我们只对这些变换所示结果的概率感兴趣。 为此目的,我们将使用事件累加乘积、以及反转操作的概念 . 这些操作与数学中的含义不同。 甚至,它们仅以概率进行操作。 连接事件的概率不能相加,因为这会破坏集合的完整性。 一般来说,应用于源事件的这 3 个操作可以描述由源事件片段组成的所有可能的事件。 使用两个重叠事件的例子,我可以在展板上示意它是何等模样:

布尔代数

额外的代数运算可由上述那些组成。 例如,布尔除法相当于上图中的第三种和第四种情况,因为除法相当于乘以所选事件的倒数。 严格说来,前两个事件足以描述由源事件的部分组成的所有可能事件。 拥有两个以上重叠事件的案例要困难得多。 在本文中,我们将只处理非重叠事件。

行情数学主要基于随机游走的概念。 我们将研究这个概念,然后可以通过形态的存在来概括这些事件。 假设我们开仓时,并以距离开仓价同等空间设置止损、止盈。 在此,我们不考虑点差、佣金和掉期利率。 因此,如果我们在不同方向和不同图表点位上免费开仓,并随机交易,则盈亏比将等于 1。 换言之,在无休止的交易中,盈利仓位的数量将等于亏损仓位的数量。 综上所述,无论交易多长时间,利润均为零。 如果您算上所有佣金、点差和掉期利率,则最终结果将为负数值。

随机游走也许看起来毫无头绪,因为这个过程的数学推导总是会导致亏损。 但是随机游走能有助于计算不同事件的概率。 这也许包括以非对称止损平仓、或经过图表特定价格范围时以均价平仓。 我们还可以计算持仓生存期,和其它有用的变量,这些变量有助于计算风险、或助您尝试最大化盈利或最小化亏损。


概率树和假设

开发您的额叶的一个非常有用的例子是事件树,或概率树。 本主题源于伯努利预划案,它是所有概率树的基础。 该预划案验证彼此相随的非重叠事件链。 但在此之前,我们先来研究全概率公式。 通过研究这个重要的构造,我们可以继续处理伯努利预划案,及它们对应的概率树。 公式如下所示:

  • P(A) = Sum(0 ... i .... n) [ P(H[i]) * P(A|H[i]) ] - 事件 A 的概率
  • P(H[i]) — 假设概率 H[i]
  • P(A|H[i]) — 事件 A 在假设 H[i] 框架内发生的概率

我想说的是,在处理概率时,最好以假设的方式来编写它们。 例如,项式 P(H[k]|H[i]) 表示以下内容:

  1. 相对于空间 H[i] 计算出的事件 H[k] 的概率

这种方式可以清楚哪个事件被认为是空间,哪个事件是嵌套的。 事实上,每个事件都是一个小型的事件空间,其内可以容纳其它事件,而这些事件也可以作为事件空间,等等。 按照这个逻辑,项式 P(H[i]) 可以写成:

  • P(H[i]|O) — 因为这个概率是相对于 O 估算的。

现在,我们将总概率公式拆分为若干个部分,以便了解其背后的含义。 这个公式乍一看似乎很难,所以我们有必要把它说得更清楚。 首先,我会以略微不同的形式重写公式:

  • P(A) = (S[0] + ... + S[i] + ... + S[n]) / O   =   S[0]/O + ... + S[i]/O + ... + S[n]/O  =  (S[0]/N[0]) * ( N[0]/O ) + ... + (S[i]/N[i]) * ( N[i]/O ) + ... + (S[n]/N[n]) * ( N[n]/O )
  • S[i] — 假设 H[i] 交集特定片段的面积
  • N[i]  — 整个假设 H[i](包括 S[i])的面积
  • O  — 所有结果或整个椭圆的面积

进行小型变换后,即将分子和分母乘以值 N[i] ,我们可以看到原始公式中存在的概率:

  • S[i]/N[i] ----> P(A|H[i])
  • N[i]/O ----> P(H[i])

它可以用图形方式直观表达如下:

总概率公式

 

外椭圆是事件空间。 中心椭圆是我们要寻找的事件概率。 假设它是一个时钟:绘制椭圆的直径,逆时针旋转,然后按假设将椭圆切割成线段。 假设只是事件的特殊名称。 然而,它们实际上是相同的事件,与我们计算概率的事件并无不同。

这个公式有一个特例,它将有助于建立伯努利预划案。 想象一下,中心椭圆整体处于这些假设之一的内部。 然后得出这个累加和的所有项,与其余的假设有关,自动归零,因为在这些假设中事件 A 的概率不可能发生或等于零,则这些项最终归零 . 结果就是,得到这个:

  • P(A) = P(H) * P(A|H)
  • H  — 假设的概率,所选事件完全处于其内。

甚至,如果我们假设事件 A 也称为假设呢? 为什么不呢? 假设是一个事件,所以任何事件都是一个假设。 现在,假设有另一个事件 B,它位于 A 内部。 那么 A 是相对于 B 的假设,并且前面的公式适用于这两个事件:

  • P(B) = P(A) * P(B|A) = P(H) *  P(A|H) *  P(B|A)

插入之前的比率替换 P(A) — 您可以看到某种模式,可针对任意数量的嵌套假设或事件构建通用公式。 它的目的是什么? 这是伯努利公式的直接原型,我们稍后会研究。 现在,还有另一个有趣的事实需要研究。


关于分形

根据上面的公式,如果 P(A) + P(B) = 1,那么这是一个穷举的事件集合。 这意味着一个完整的群可由任意两个相互嵌套的假设链组成。 但是这些假设可能是重叠的。 如果我们要求所有可能的嵌套假设是其它不重叠的假设链,那么所有链自动与该事件空间中的链互不重叠。 它的图形表示是一个非常有趣的模式:

分形

这种模式被称为分形,因为这样的结构无法构建终结;它可以无限地构建下去。 在上图中,结构只有 3 层深度。 蓝色矩形表示单独概率链的末端。 如果我们将所有这些链的概率累加起来,它们将形成一组详尽的事件集合。

这种分形可以用组合来很好地描述。 组合基于阶乘的概念。 还有另一个概念,置换,它介于阶乘和组合之间。 置换公式是从阶乘公式推导出来的,组合的概念是从置换公式推导出来的。 下面是对应的公式:

  • n! - 数值 n 的阶乘
  • P(n,k) = n! / ( n - k )!  — 从 N 个元素到 K 个元素的排列
  • С(n,k) = n! / ( k! * ( n - k )! )  — N 个元素乘 K 个元素的组合

阶乘是所有以 1 开头并以 n 结尾的自然数的乘积,而 “0! = 1"。 也就是说,零的阶乘等于一。 在该情况下,它只是规则的一个例外,但我还没有看到这种例外会干扰计算或令算法复杂化的案例。

排列稍微复杂一些。 想象一下,您有一副牌,而这副牌只含有一定数量的牌。 进行一个简单的实验:洗牌并从整副牌里以完全任意的方式抽出几张牌,按照我们抽取顺序将它们放在桌子上。 所以,排列是这个实验所有可能产物的数量,而每张牌的顺序也被认为是特定产物的唯一标识符。 这种排列适用于任何需要的元素。

第一张牌可以用 n 种不同的方式从牌组中取出,第二张则能以 “n-1” 种方式取出,因为第一张牌已不再在牌组中。 依此类推,直到第 “n-k-1” 张牌。 为了获得所有可能的排列数量,我们需要将所有数字从 “n-k-1” 乘以 “n”。 此过程类似于阶乘。 如果我们取 “n!” 并将其除以 “n-k” 因子,我们将得到与 “(n-k)!” 完全相等的原始乘积。 这就是我们如何得到排列公式。

组合公式稍微复杂一些,但也能轻松推导出来。 我们已拥有所有可能的排列,但元素的顺序并不重要 — 只有在其中的牌才重要。 现在,我们需要找到此类案例的数量,每个案例都有不同的一套牌。 事实上,每个排列已经包含这些独有集合之一,但我们不需要它们的全部。 我们来改变逻辑,尝试收集所有可能组合的所有排列:由它得出,如果我们取用一个组合,无论我们如何重新排列其中的元素,它们都是唯一的。 甚或,如果我们取用所有独有的组合,并在其中生成所有可能的排列,我们会得到以下结果:

  • P(n,k) = C(n,k) * P(k,k)

组合中所有可能的独有排列的数量等于 “P(k,k)”,因为我们需要从 “k” 个变体的所有可能排列中收集 “k” 个变体。 将方程的两部分同时除以 “P(k,k)”,我们得到所需的组合公式:

  • C(n,k) = P(n,k)/P(k,k) = n! / ( k! * ( n - k )! )

排列和组合都广泛用于各种概率论问题。 当在实际应用里运用它时,则组合对我们来说最有用。 组合可构建分形函数,并用于各种目的。 也许称它们为递归更正确,但出于某种原因,我将这些函数称为分形(可能是因为它们确实是分形的,因此它不仅是递归,而是一整棵调用树)。


伯努利(Bernoulli)预划案

在继续研究此类分形函数之前,我们先来研究著名的伯努利公式。 假设我们有一系列相同的实验,需要我们重复若干次。 实验应表现为事件以一定的概率出现或不出现。 甚至,假设我们想要查找在 “n” 个实验链中我们的事件恰好出现 “k” 次的概率。 伯努利公式可以回答这个问题:

  • P = C(n,k)*Pow(p,k)*Pow(q,n-k)   — 伯努利公式
  • p  — 单次实验结果中事件发生的概率
  • q = 1 - p   — 实验结果中事件不会发生的概率

还记得之前为概率链推导出的公式吗? 我们将其扩展为任意超大链长度:

  • P(n) = P(H[1]|O) *  P(H[2]|H[1]) *  P(H[3]|H[2]) * ... * P(H[k]|H[k-1]) * ... *P(H[n]|H[n-1])
  • n  — 链中的段数
  • O  — 整个产物集合;可以表示为 H[0]

该公式计算确定需要的假设链发生的概率。 该公式可以直观地表示如下:

概率链

我们的公式在第一个也是最大的椭圆中,而右边的另一个链与我们的链不重叠,它象征着来自不同组合的其它分支。 此类分支的数量与我们公式中用于计算组合的变体一样多。 所以不要将组合与组合计算变体混淆。 用于计算组合的变体数量等于:

  • n+1 (因为 “0” 的成功产物组合也要被计算在内)
  • n 是实验链中独立测试的数量

现在想象所有这些假设的概率等于 “p” 或 “q”。 然后简化公式:

  • P(n) = Pow(p,k)*Pow(q,n-k)
  • k  — 乘积中有多少个等于 “p” 的因数
  • n-k  — 乘积中有多少个等于 “q” 的因数

它已经类似于伯努利公式,但缺少组合。 如果您更仔细思考,很明显具有相似概率的链的变体,以及 “k” 和 “n-k” 的数量恰好等于“C(n,k)”。 由于所有概率链都不重叠,因此获得这些链之一的概率就是所有这些链的概率之和。 由于所有这些概率都相同,我们可以将一条链的概率乘以其数量得到伯努利公式:

  • P = C(n,k)*Pow(p,k)*Pow(q,n-k)

这个公式能够进一步扩展,例如,当我们所要寻找的概率不是一个严格固定的组合,而是一个事件发生 k 次和更多次、k 次和更少次、以及所有类似组合的概率。 在这种情况下,它将是所有所需组合的概率之和。 例如,事件发生超过 k 次的概率计算如下:

  • P = Summ(k+1 ... i ... n)[C(n,i)*Pow(p,i)*Pow(q,n-i)]

重要的是要理解:

  • P = Summ(0 ... i ... n)[C(n,i)*Pow(p,i)*Pow(q,n-i) ] = 1

换言之,所有可能的链形成了一个穷举事件集合。 另一个重要的等式是:

  • Summ(0 ... i ... n)[C(n,i)] = Pow(2,n)

这是合乎逻辑的,因为概率链的每个部分只有两种状态:“事件已发生”和“事件尚未发生”。 事件尚未发生时的状态也是暗示另一个事件已发生的事件。

组合还有另一个有趣的特性:

  • C(n,k) =  C(n,n-k)

它的推导如下:计算“C(n,n-k)”,并与 “C(n,k)” 进行比较。 略微经过一些转换,我们可以看到两个表达式是相同的。 我已创建了一个基于 MathCad 15 的小程序,可检查以上所有语句:

检查伯努利预划案

这个例子十分贴近行情。 它计算行情在 n 个步级之后向上移动 u 步的概率。 一个步级是价格相对于前一步向上或向下移动的一定数量点数。 每个 “u” 的概率图形数组可以如下所示:

概率图

为简单起见,我采用了 10 个步级的伯努利预划案。 该文件附于文后,故您可对其进行测试。 您不一定需要将此预划案应用于定价。 它也可以应用于订单或其他任何东西。


创建第一个分形

应特别注意与止损和止盈价位相关的问题。 当我们知晓止损和止盈的点数(与当前价格的距离)时,我们应该以某种方式计算由止损或止盈平仓的概率。 该值可在任何时候计算,即使不再针对开盘价,因为所有这些因素都直接取决于定价机制。 在这个例子中,我打算用分形来展示公式的证明。 在随机游走的情况下,这个概率可以计算如下:

  • P(TP) = SL / ( TP + SL ) - 触发止盈的概率
  • P(SL) = TP / ( TP + SL ) - 触发止损的概率
  • SL  — 止损点距
  • TP  — 止盈点距

这两个概率共同构成了一个穷举事件集合:

  • P(TP) + P(SL) = 1

根据这个公式,对于随机交易,如果我们排除点差、佣金和掉期利率,这些策略的数学期望都为零:

  • M =  P(TP) * TP - P(SL) * SL = 0

当我们设置固定止损位时,这是最简单的情况。 但将其推广到任何策略也绝无问题。 现在,我们用相同的 MathCad 15 来证明公式。 我用这个程序已经很长时间了。 它可以生成几乎任何复杂度的计算,甚至可用来编程。 在这个例子中,除了证明上面的公式,我们将看到第一个构造分形公式的例子。 我们从勾画价格变动过程开始。 这里我们不能使用连续函数,只能使用离散函数。 为此,我们取我们的条件订单,并计算向上和向下的停止点距,然后我们将这些段落切分成具有相等步数的部分,并令每一步级均含整数型步长。 想象一下价格按这些步级移动。 由于步级相等,因此朝两个方向中的任何一个方向移动的概率都是 0.5。 我们需要一个图形表述来实现相应的分形:

分形预划案

为了解决这个问题,我们来研究三种可能的分形延续情况:

  1. 我们在中线上方( U > MiddleLine )
  2. 我们在中线下方 ( U < MiddleLine )
  3. 我们处于中线之上 ( U = MiddleLine )

“U” 是相对于开盘价之上 “u-d” 的总步级数。 如果我们要继续构建分形时点距低于价格,则 U 根据函数取负值。 如果我们位于中线,则我们可取的步级数不用担心交叉线低于 Mid。 但是在继续构建之前,我们必须将分形构建限制为价格或订单可以执行的步级数。 如果步级数超过了要求数量,我们必须中断进一步的构建。 否则,我们将得到无限递归,无法退出。 它的计算时间将等于无穷大。

在图例中,我画了若干个紫色的步级 — 在这些点位上,我们收集概率,并将它们累加到一个通用变量之中。 之后,我们需要根据链条的边界朝向,把链向上或向下翻动,从而它可以继续进一步移动来构建新的嵌套分形级别。 在其他方面,我们可以基于伯努利预划案自由构建完整的分形级别。

当可以基于伯努利预划案创建一棵树时,我们必须首先判定我们可以制定的步级数,考虑到所有步级仅向上或向下的极端情况。 对于所有三种情况,该值等于:

  • (n - 1) - U  — 当我们的链已高于中线之上时(因为 U 的增加会导致到上边界的距离减少)
  • (m - 1) + U  — 当我们的链已低于中线之下时(因为 U 的减少会导致到下边界的距离减少)
  • (floor(Mid)-1)  — 当我们的链条正好处于中线时
  • n  — 顶部段落数量
  • m  — 底部段落数量
  • floor  — 该函数舍弃小数部分(这可能没有必要)

首先我们需要计算两个辅助值:

  • Mid = (m+n)/2  — 范围宽度的一半(步级数)
  • Middle = (m+n)/2 - m   — 中线的 “U” 值(步级数)

这些数值稍后将用于描述分形分支逻辑。 至于现在,我们只针对 “n>=m” 的情况创建分形。 然而,这些数据尚不足以构建分形。 为了能够构建更深层的分形级别,有必要为伯努利预划案中的每个新组合重新定义 “U”,并将其传递给新的分形级别。 此外,有必要调整增加所执行的步级数,并在将来正确传递它们。 与此类似,我们要用下一个分形级别的乘数来收集整个链的概率,并将中间链的概率进一步传递到下一个级别,直到该过程成功穿越所需边界而结束。 下图解释了这三种变体:

分支逻辑

  

根据该流程图,我们现在可以写出 “NewU”,和其它对应每个所表述情况的辅助值。 我们来研究一个构建分形来计算越过上边界的概率的例子:

对于案例 1:

案例 1

我们看一下上面的图片,并用数学方式描述发生在那里的事情。 此图展示了来自我的 MathCad 15 中的程序摘要。 下面附上程序的全部代码。 在此,我提供了最重要的细节,它们是分形的基础。 第一个矩形在一个循环中,它通过 “i” 迭代来描述所有可能的组合。 该逻辑可在 MetaEditor IDE 中重现。 我们从流程图中的第一个示意图开始。 为了定义 “NewU”,我们首先需要定义一些基本公式:

  • ( n - 1 ) - U = f — 它是未来组合树的步级数(距离由到分形范围最近边界的距离决定)
  • u + d = f  — 数值相同,但表达形式为上涨和下跌段落的数量
  • s = u - d  — 最终步级数量,以下跌段落和上涨段落表示
  • u = i  — 这是因为我的程序使用 “i” 迭代(应该记住)

为了计算所有需要的数值,我们需要通过 “U” 和 “i” 来表达 “s”。 为此,我们需要排除变量 “d”。 首先表达它,然后代入到 “s” 的表达中:

  1. d = f - u = f - i = ( n - 1 ) - U - i
  2. s = i -( n - 1 ) + U + i = -( n - 1 ) + 2*i + U

接下来,使用找到的 “s”,找到 “NewU” 和所有要传递到下一个分形级别的数值:

  • NewU = s + U = -( n - 1 ) + 2*i + 2*U   - 我们要传递到下一个分形级别的新 “U”
  • NewP = P * C(f,i) * Pow(p,i) * Pow(1-p,f-i)P * C( ( n - 1 ) - U ,i) * Pow(p,i) * Pow(1-p,( n - 1 ) - U -i)  — 我们新的链概率 “P” 被传递 到下一个分形级别(通过乘以链的新段落概率获得)
  • NewS = S + f = S + ( n - 1 ) - U  — 新的 “S” 要传递到下一个分形级别

现在,看看下面的矩形。 当步级链已触及范围上边界,此刻我们要处理这种情况。 此处应该处理两种情况:

  1. 收集与边界相交链的概率(红色下划线)
  2. 类似的动作,把我们将传递到下一个分形级别的新值提升

这种情况非常简单,因为只有两种可能的变体:

  1. 触及边界
  2. 从边界翻转

这些动作不需要伯努利预划案,因为每种情况只意味着一个步级。 反转的概率要额外乘以 “(1-p)”,因为相交的概率是 “p”,且这两个事件应该形成一个穷举集合,这可从之前的计算清晰地看出。 步级增加 1,“U” 减少 “1”,因为这是下降的反射。 现在我们拥有了正确构建这个案例的一切。 这些规则对于构建主要分形是相同的,我们需要完全不同的情况。

对于案例 2:

案例 2

对于这个案例,计算几乎相似。 唯一的区别是 “f” 会取不同的数值:

  • ( m - 1 ) + U = f

再次,使用与前一个案例相同的公式,通过 “U” 和 “i” 表达 “s”:

  1. d = f - u = f - i = ( m - 1 ) + U - i
  2. s = i -( m - 1 ) - U + i = -( m - 1 ) + 2*i - U

与此类似,找到我们需要传递到下一个分形级别的所有其它数值:

  • NewU = s + U = -( m - 1 ) + 2*i  - 我们的新 “U” 将被传递到下一个分形级别
  • NewP = P * C(f,i) * Pow(p,i) * Pow(1-p,f-i) P * C( ( m - 1 ) + U ,i) * Pow(p,i) * Pow(1-p,( m - 1 ) + U -i)  — 我们将链 “P” 的新概率传递到下一个分形层
  • NewS = S + f = S + ( m - 1 ) + U  — 我们的新 “S” 将被传递到下一个分形层

较低的矩形几乎与前一种情况相同,只是我们将 “U” 增加 1,因为上升反射,故 “U” 增加。 在这种情况下不收集概率,因为在此分形中我们对下边界的交叉不感兴趣。 现在,此处是最后一种情况,当链发生在范围的中线时。

对于案例 3:

案例 3

定义 “f”:

  • floor(Mid) - 1 = f

查找 "s":

  1. d = f - i =  floor(Mid) - 1 - i
  2. s = i - d = -(floor(Mid) - 1) + 2*i

最后,找到要传递到下一个分形级别的数值:

  • NewU = s + U = -(floor(Mid) - 1) + 2*i + U
  • NewP = P * C(f,i) * Pow(p,i) * Pow(1-p,f-i) = P * C( floor(Mid) - 1 ,i) * Pow(p,i) * Pow(1-p,floor(Mid) - 1 - i)  — 我们的新链概率“P”,将被传递到下一个分形级别
  • NewS = S + f = S + (floor(Mid) - 1) — 我们的新 “S”,将被传递到下一个分形级别

这种情况的一个显著特点是该模块不收集概率,因为概率只会在 “U” 的边界值处收集,而概率链也被反射回链中,以便它们可以进一步扩散。 为计算穿过上边界的概率创建分形是相同的,但只在第二种情况下计算概率,第一种情况下则不会。

构造这种分形时的一个有趣特征是,该函数中伯努利公式强制存在。 组合以粉红色突出显示,概率的乘积以黄色显示。 这两个乘数共同构成了伯努利公式。

现在,我们同时验证两件事:整个分形构造的正确性,以及预期收益仅取决于预测能力的假设。 这些步级可由点数和成交来表示。 在后一种情况下,点数应该乘以相应的比例系数,这取决于手数和即时报价大小。 在此,我们将采用点数 - 这种表示是通用的:

预期收益取决于预测能力

在这个示例中,使用以下输入数据来绘制数学期望与一个步级概率上升的对决图:

  • n = 3 — 顶部段落数量
  • m = 2  — 底部段落数量
  • s = 22  — 分形函数链式反应的允许步级数量(如果您增加这个数值,它会给计算机带来额外的负担,所以这个步级数量已经足够了)
  • 0 ... 0.1 ... 0.2 ...... 1.0   — 将上升步级概率的范围切分为 10 个部分,步长为 0.1

如您所见,对于 0.5 的概率,我们成交的数学期望等于 0,如公式先前预测的那样。 在极值点 0 和 1 处,函数值趋向于 “n” 和 “-m”,这也证实了我们的假设。 分形成功地完成了它的任务,尽管它暴露出一个缺点:计算时间和复杂性大大增加。 然而,为类似的任务等待数个小时甚至一天是完全可以接受的。

此分形仅适用于 n >= m 的情况,即到上边界的距离大于到下边界的距离,但在分形中无需指出这一点。 这种构造可以被镜像:如果 n < m,我们可以在传递时把 m 和 n 互换来计算分形。 然后切换概率,得到想要的结果。 这种分形不仅可用于证明公式,还可以用于逆过程。 有些公式只能通过使用分形来获得。


总结

我认为这篇文章得出了以下非常重要的结论:

  • 概率论与程序设计相结合,可为描述众多行情过程提供理论基础。
  • 分形结合概率论的主要法则可以解答最困难的问题。
  • 我们已经见识到了一个创建相当复杂分形的例子。
  • 整个理论已在 MathCad 15 环境中利用编程进行了实践测试。
  • 文章已证明伯努利预划案为创建任何具有两步状态的分形提供了机会。

    结束语

    我希望读者能从这份资料中看到一些新的东西,可以在实践中用于交易。 在撰写本文时,我尝试传达离散数学和概率论的全部力量,从而令您为另一项艰巨的任务做好准备 — 运用分形概率链描述市场过程。 我尝试将概率论的所有主要法则组合成一种素材,其可进一步帮助解决实际交易中的复杂任务。 我还尝试删除所有无关紧要的细节。 下一篇文章将提供分形实际应用的新示例,以及其它重要问题的解答。

    本文由MetaQuotes Ltd译自俄文
    原文地址: https://www.mql5.com/ru/articles/9456

    附加的文件 |
    For_Mathcad_15.zip (173.77 KB)
    DoEasy 函数库中的图形(第七十九部分):“动画框”对象类及其衍生对象 DoEasy 函数库中的图形(第七十九部分):“动画框”对象类及其衍生对象
    在本文中,我将开发单个的动画框,及其衍生类。 该类允许绘制造型,同时维护,并恢复它们得下层背景。
    优秀程序员(第 01 部分):您必须停止做这 5 件事才能成为一名成功的 MQL5 程序员 优秀程序员(第 01 部分):您必须停止做这 5 件事才能成为一名成功的 MQL5 程序员
    萌新甚至高级程序员都会有很多坏习惯,这令他们无法在其编程事业中成为最佳的。 我们将在本文中就这些问题予以讨论并定位。 对于所有梦想成为优秀 MQL5 开发者的人来说,这篇文章都是必读的。
    DoEasy 函数库中的图形(第八十部分):“几何动画框”对象类 DoEasy 函数库中的图形(第八十部分):“几何动画框”对象类
    在本文中,我将优化前几篇文章中的类代码,并创建几何动画框对象类,允许我们绘制给定顶点数的正多边形。
    形态与示例(第一部分):多顶 形态与示例(第一部分):多顶
    这是研讨算法交易框架中逆转形态相关的系列文章中的首篇。 我们将从最有趣的形态家族开始,它们源自双顶和双底形态。