Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 3212
- Рейтинг:
- Опубликован:
- 2009.11.19 14:16
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Описание:
Рассматривается двумерный массив значений типа double в терминах БД. Массив состоит из С колонок и R строк. Подразумевается, что значения в колонке нормализованы одинаково.
Основные реализованные функции:
1. Array.Sort(double &a[], int order[], int sort.mode=MODE_QUICK3)
- сортировка массива в произвольном порядке колонок, в произвольном направлении каждой колонки. Реализован алгоритм сортировки quicksort-3way (http://www.sorting-algorithms.com/quick-sort-3-way). Краткое описание: время сортировки стремится к O(R·lg(R)) (быстрый, для сравнения: пузырьковый метод сортировки имеет время порядка O(R^2)), взаимный порядок строк с одинаковыми значениями ключа сортировки не сохраняется (нестабильный), сортировка "почти упорядоченных" данных занимает меньшее время в сравнении с random-последовательностью (адаптивный). Здесь a - упорядочиваемый массив, order - перечень колонок упорядочивания, с указанием направления сортировки. Направление указывается знаком. С этой целью нумерация колонок по абсолютному значению начинается с 1 (!). Например, задать упорядочивание массива по a[0] ASC, a[3] DESC, a[2] ASC, a[5] DESC
int order[] = { 1, -4, 3, -6}; Array.Sort(a, order);
2. Array.Group(double &a[][], int groups[], int sums[], double &dest[][])
- группировка строк массива с совпадающими ключами, опционно - с вычислением сумм в указываемых дополнительно колонках. Здесь a и groups - см. выше по аналогии, sums - перечень суммируемых колонок (нумерация также с 1; хотя насущной необходимости в этом не было, ввел по аналогии с массивами групп и сортировки во избежание дополнительной путаницы), dest - выходной массив. Перед суммированием массив сортируется автоматически (дополнительной сортировки перед вызовом процедуры не требуется).
double a[10000][9]; ...... // work with array double d[][5]; int g[] = { -1, 2, 5}, s[] = { 6, 7}; Array.Group(a, g, s, d);
3. Array.Select(double &a[][], double & filter[][], double & dest[][])
- выборка из массива подмножества, удовлетворяющего заданным критериям. Здесь a и dest - см. выше по аналогии, filter - массив состоящий из трех колонок и произвольного количества строк, описывающий набор условий. Условия простейшие - нахождение значения колонки в диапазоне минимального и максимального значений. filter[1..C][0] - номер колонки; filter[][1] - min, filter[][2] - max. Требование к dest - количество колонок равное С. Строки добавятся автоматически. Исходный массив не сортируется (простой перебор).
При необходимости можно воспользоваться служебными функциями Array.Swap(a, i1, i2) (меняет местами строки массива a с номерами i1 и i2) и Array.Compare(a, i1, i2, order) (сравниваются строки i1 и i2 массива а в разрезе указанного набора (по ключам) order, возвращаемые значения - {-1| 0| 1}).
Прилагается скрипт, иллюстрирующий возможности библиотеки.
Установка:
experts\libraries\ArrayEx.mq4
experts\scripts\Sort_Array.mq4

Очень удобный индикатор ytg_DveMashki_ind автора Yuriy Tokman, дополнен двумя сигнальными линиями. Полезная примочка для любителей EWA

Эксперт может делать 10000 USD в месяц, иногда меньше, но он всегда прибыльный

Советник пытается работать на откате движения цены за торговые сутки. Если цена прошла достаточное движение за сессию (оптимизируемая величина), то есть надежда отработать тени дневной свечи. Внутри кода все пояснения.

Скрипт удаляет графические значки от ордеров.