欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

组合学 - MetaTrader 5 库

author emer | 524 人阅读 | 0 人评论 |

组合函数的初始库。

组合学是一个分支数学,研究离散结构,组合,排列、安排和枚举组合学)以及它们之间的关系(例如,部分有序集)。组合学与许多其他领域相关数学例如代数,几何学,概率论并且在不同的知识领域有广泛的应用(例如遗传学,计算机科学,统计物理学)。

1)第一个函数:

//+------------------------------------------------------------------+
//|                     数字阶乘                             |
//+------------------------------------------------------------------+
双倍的阶乘(整数x);

阶乘常用于组合学,数论功能分析

阶乘是一个增长极快的函数。它的增长速度快于多项式任何程度并且比指数函数(但比双指数函数慢)。

这就是为什么返回值必须是双倍的类型。这样做是因为阶乘增长太快并且已经是 13 了!不符合 a 的范围长的类型。

2)第二个函数:

//+------------------------------------------------------------------+
//|                 组合(组合)                        |
//+------------------------------------------------------------------+
双倍的组合(整数尼,整数k);

组合允许从由 N 个元素组成的集合中选择唯一的元素集合。每个集合将有 k 个元素。

因此,此类集合的数量将是组合的数量:

C(k,N) = C(3,10) = 120。

IE。每个信号上有 3 个信号,有 120 种独特的组合。 

3)第三个函数:

//+------------------------------------------------------------------+
//|            与重复的组合(组合)     |
//+------------------------------------------------------------------+
双倍的_组合(整数尼,整数k);

与重复的组合承认在集合中某些元素可以出现多次。假设有五个水果。由 3 个元素组成的集合有 2 个橙子和 1 个苹果。这样的组合是重复的组合。橙子重复道。

对于 10 个信号的集合和可能的集合(3 个信号),我们找到了许多具有重复的组合:

〜C(k,N)=〜C(3,10)= 220。

4)第四个函数:

//+------------------------------------------------------------------+
//|                        安排                               |
//+------------------------------------------------------------------+
双倍的安排(整数尼,整数k);

排列与组合的不同之处在于,重要的不是套件,而是套件中元素的顺序。假设有 2 个包含 3 个元素的集合:苹果-橙子-香蕉,苹果-香蕉-橙子。就组合而言,我们只有一种组合(一组参与者)。但就排列而言,有两种组合(参赛者在一组中改变顺序)。

显然,排列方式将多于组合方式。例如,从信号集(10 个信号)和可能的信号集(3 个信号)中,我们可以得到尽可能多的排列:

A(k,N) = A(3,10) = 720。

5)第五个函数:

//+------------------------------------------------------------------+
//|                   重复排列                   |
//+------------------------------------------------------------------+
双倍的_安排(整数尼,整数k);

IE。就像组合的情况一样,承认集合中的元素可以重复。

那么对于 10 个信号的集合和可能的集合(3 个信号),我们将得到这样一些重复的排列:

〜A(k,N)=〜A(3,10)= 1000。

6)第六个函数:

//+------------------------------------------------------------------+
//|                       排列                                |
//+------------------------------------------------------------------+
双倍的排列(整数N);

排列可以让我们知道有多少种方法可以改变元素集中的顺序。

因此,对于信号集(10 个信号),我们可以获得尽可能多的排列:

P(N) = P(10) = 3 628 800。

对于 3 个信号的集合,我们可以获得尽可能多的排列:

排列数回报 阶乘。因此,3 个元素和 10 个元素的排列数之间存在差异。

7)第七个函数:

//+------------------------------------------------------------------+
//|                  重复排列                    |
//+------------------------------------------------------------------+
双倍的_排列(整数&nM[]);

IE。就像组合的情况一样,承认集合中的元素可以重复。

仅作为参数传递数组,其中每个元素指示可以重复多少次。

例如,有3个信号,每个信号重复一次,则:

~P(N) = ~P({1,1,1}) = 6。

IE。 ~P({1,1,1}) = P(3)。

假设第一个信号可以重复2次,则:

 ~P({2,1,1}) = 12。


附件下载

📎 combinatorics.mqh (4.81 KB)

Source: MQL5 #1197

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录