Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Combinatorics - библиотека для MetaTrader 5

Просмотров:
15725
Рейтинг:
(36)
Опубликован:
2012.12.10 09:28
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Начальная библиотека по функциям комбинаторики.

Комбинато́рика  — это раздел математики, изучающий дискретные объекты, множества (сочетания, перестановки, размещения и перечисления элементов) и отношения на них (например, частичного порядка). Комбинаторика связана со многими другими областями математики — алгеброй, геометрией, теорией вероятностей и имеет широкий спектр применения в различных областях знаний (например в генетике, информатике, статистической физике).


1) Первая функция:

//+------------------------------------------------------------------+
//|                     Факториал числа                              |
//+------------------------------------------------------------------+
double factorial(int x);

Факториалы часто используются в комбинаторике, теории чисел и функциональном анализе.

Факториал является чрезвычайно быстро растущей функцией. Он растёт быстрее, чем многочлен любой степени, и быстрее, чем экспоненциальная функция (но медленнее, чем двойная экспоненциальная функция ).

Поэтому возвращаемое значение должно иметь тип double. Это сделано, потому что факториал растёт очень быстро и уже 13! не умещается в рамки типа long.


2) Вторая функция:

//+------------------------------------------------------------------+
//|                 Сочетание (комбинация)                           |
//+------------------------------------------------------------------+
double combination(int N,int k);

Сочетания позволяют из какого-то множества, состоящего из N элементов, выбрать уникальные по составу наборы этих элементов. В каждом наборе будет k элементов.

Допустим, есть 10 торговых сигналов. А для торговой системы нужно использовать только 3. Тогда для дальнейшего анализа нужно перебрать все возможные наборы (3 сигнала) из множества 10 сигналов.

Отсюда число таких наборов и будет числом сочетаний:

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

Т.е. получится 120 уникальных комбинаций по 3 сигнала в каждой. 


3) Третья функция:

//+------------------------------------------------------------------+
//|            Сочетание (комбинация) с повторениями                 |
//+------------------------------------------------------------------+
double _combination(int N,int k);

Сочетания с повторениями допускают, что в самом наборе может присутствовать какой-то элемент более чем 1 раз. Пусть есть 5 фруктов. В одном наборе из 3-х элементов есть 2 апельсина и 1 яблоко. Такой набор и является сочетанием с повторениями. Апельсин повторился.

Что касается множества 10 сигналов и возможных наборов (3 сигнала), то получим такое число сочетаний с повторениями:

~C(k,N) = ~C(3,10) = 220.


4) Четвёртая функция:

//+------------------------------------------------------------------+
//|                        Размещение                                |
//+------------------------------------------------------------------+
double arrangement(int N,int k);

Размещения отличаются от сочетаний тем, что в нём важен не только состав набора, но и порядок элементов в самом наборе. Пусть есть следующие 2 набора по 3 элемента: апельсин-яблоко-банан, яблоко-банан-апельсин. С точки зрения сочетаний у нас есть только 1 комбинация (один состав участников). А вот с точки зрения размещений есть 2 комбинации (участники изменили порядок в составе).

Понятно, что размещений будет больше, чем сочетаний. Например, из множества сигналов (10 сигналов) и возможных наборов (3 сигнала), можем получить столько размещений:

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


5) Пятая функция:

//+------------------------------------------------------------------+
//|                   Размещение с повторениями                      |
//+------------------------------------------------------------------+
double _arrangement(int N,int k);

Т.е. как и в случае с сочетаниями допускаем, что элементы в наборе могут повторяться.

Тогда для множества 10 сигналов и возможных наборов (3 сигнала) получим такое число число размещений с повторениями:

~A(k,N) = ~A(3,10) = 1000.


6) Шестая функция:

//+------------------------------------------------------------------+
//|                       Перестановка                               |
//+------------------------------------------------------------------+
double permutation(int N);

Перестановка позволяет узнать сколькими способами можно изменить порядок во множестве элементов.

Так для множества сигналов (10 сигналов) можем получить столько перестановок:

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

А для набора из 3-х сигналов можем получить столько перестановок:

P(3) = 6.

 Число перестановок возвращает факториал. Поэтому такая разница между числом перестановок для 3 и 10 элементов.


7) Седьмая функция:

//+------------------------------------------------------------------+
//|                  Перестановка с повторениями                     |
//+------------------------------------------------------------------+
double _permutation(int &nM[]);

Т.е. как и в случае с сочетаниями и размещениями допускаем, что элементы в наборе могут повторяться.

Только в качестве параметра передаём массив, в котором для каждого элемента указываем, сколько он может раз повториться.

Например есть 3 сигнала, каждый повторяется 1 раз, тогда:

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

Т.е. ~P({1,1,1}) = P(3).

Допустим, что первый сигнал может повториться 2 раза, тогда:

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

Класс для построения Moving Average с использованием  кольцевого буфера Класс для построения Moving Average с использованием кольцевого буфера

Класс предназначен для расчета средних (Moving Average) с использованием алгоритма кольцевого буфера.

Класс для создания кольцевого буфера Класс для создания кольцевого буфера

Класс позволяет самостоятельно организовывать внутри советника или индикатора минитаймсерии, индикаторные минибуфера, короткие буфера для хранения промежуточных потоковых данных.

Exp_ColorTrend_CF Exp_ColorTrend_CF

Торговая система Exp_ColorTrend_CF построена на основе изменения направления тренда, отображаемого индикатором ColorTrend_CF

Класс для построения ATR с использованием  кольцевого буфера Класс для построения ATR с использованием кольцевого буфера

Класс предназначен для расчета индикатора Среднего Истинного Диапазона (Average True Range, ATR) с использованием алгоритма кольцевого буфера.