Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 15869
- Рейтинг:
- Опубликован:
- 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) с использованием алгоритма кольцевого буфера.

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

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

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