Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 13

 

На текущий момент в статистической библиотеке MQL5 (без учета Alglib, Fuzzy) уже больше 461 функции: https://www.mql5.com/ru/forum/86386/page222#comment_3867386

Это уже хорошо покрывает базовые статистические функции.


Кто читал статью раньше, рекомендую ее снова прочесть - вчера выпустили новую редакцию статьи с массой новых функций.
Машинное обучение: теория и практика (торговля и не только)
Машинное обучение: теория и практика (торговля и не только)
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
Renat Fatkhullin:

На текущий момент в статистической библиотеке MQL5 (без учета Alglib, Fuzzy) уже больше 461 функции: https://www.mql5.com/ru/forum/86386/page222#comment_3867386

Это уже хорошо покрывает базовые статистические функции.


Кто читал статью раньше, рекомендую ее снова прочесть - вчера выпустили новую редакцию статьи с массой новых функций.

Так и не понял, как пуш-сообщение послать Quantum. Добавьте, пожалуйста, вещь, которой, возможно, даже нет в R.

Это быстрый расчет Mean интервала при сдвиге его на единицу вправо. Аналогично - расчет коэффициента корреляции Пирсона.

Пирсон довольно тяжело считается, если в лоб. Но существуют итерационные методы расчета: K[i]  через K[i-1].

 

ЗЫ Прикольно, первый раз столкнулся с предложением на русском языке, где после каждого слова идет запятая:

Добавьте, пожалуйста, вещь, которой, возможно, нет.

 

А почему сами не напишите себе нужную функцию?

Посмотрите на полные исходники функций в /include/math/stat и напишите недостающие.

 
Renat Fatkhullin:

Нет никакой векторизации и никаких современных возможностей в R. Там код просто в лоб написан обычными джуниорами от программирования. Да, математики они приличные, но вот программисты посредственные.

Вы просто не знаете ни R, ни MQL5. 

Вы не смотрели исходники R, не знаете исходников MQL5. Не строили компиляторов последние 15 лет. Но пытаетесь спорить с теми, кто это все сделал.

У меня очень скромные познания в программировании, но не до такой степени, как Вы описали.

Во всяком случае я прекрасно понимаю, что внутренняя реализация R на С++, на которую Вы ссылаетесь, вообще не имеет отношения к поднятой мною  проблеме измерения скорости выполнения. Я пишу о технике написания кода собственно на R, а что внутри, то и меряем.

 

Итак, по поводу векторизации. 

В R нормально выглядит строка

с <- a+b

Это всегда, как минимум, векторные вычисления. Зависит от контекста - что такое а и b.

Более того,

c <- sqrt(a)

даст вектор с, каждый элемент которого является корнем квадратным из соответствующего элемента вектора а 

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

В МQL это всегда циклы.  

Более того векторизация в R подразумевает не только сами объекты, но:

  • процедурный аппарат в виде специфических операторов apply и его разновидностей
  • использование стандартной библиотеки MKL для совершения  всех этих векторизированных операций.

 

И возвращаясь к смыслу написанного мною в предыдущем посте.

Я вообще ничего не пишу о качестве реализации функций на C++. Я как и Вы предлагаю их мерить такими как они есть. Но с использованием средств языка R, которые специально предназначены для векторных операций. 

 

Например.

Для всех Ваших тестов образуем матрицу M со 100 (как у Вас) , где каждый столбец моделирует котировку

 

Тогда на R минимум по всем столбцам выглядит как

apply(M,  2, min)

Результат будет вектор, который будет содержать минимум по каждому столбцу 

 

 

По этому образцу надо мерить скорость всех функций распределения, обернутых в соответствующую apply. Их много и они разные. Аналогов в МКЛ нет.

При этом надо проследить чтобы вместе с R была установлена библиотека MKL

Intel® Math Kernel Library (Intel® MKL) | Intel® Software
  • software.intel.com
Intel® Math Kernel Library (Intel® MKL) accelerates math processing routines that increase application performance and reduce development time.
 
Renat Fatkhullin:

А почему сами не напишите себе нужную функцию?

Посмотрите на полные исходники функций в /include/math/stat и напишите недостающие.

Интересная мысль.

Может быть найдется исполнитель по портированию  пакетов. Например, splines. Получили высшего качества машки, настоящие. 

 
СанСаныч Фоменко:

У меня очень скромные познания в программировании, но не до такой степени, как Вы описали.

Во всяком случае я прекрасно понимаю, что внутренняя реализация R на С++, на которую Вы ссылаетесь, вообще не имеет отношения к поднятой мною  проблеме измерения скорости выполнения. Я пишу о технике написания кода собственно на R, а что внутри, то и меряем.

К сожалению, вы даже понятия не имели, что внутри R все на C/C++. Вы однозначно думали, что это интерпретатор даже в системных функциях.


Итак, по поводу векторизации. 

В R нормально выглядит строка

с <- a+b

Это всегда, как минимум, векторные вычисления. Зависит от контекста - что такое а и b.

Более того,

c <- sqrt(a)

даст вектор с, каждый элемент которого является корнем квадратным из соответствующего элемента вектора а 

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

В МQL это всегда циклы.  

Мы показали, как быстрей работаем в циклах. Причем в чистых исходниках на MQL5 без применения С++.

И простейший векторный sqrt мы тоже победим. Вот из библиотеки две штатные функции с полным аналогом R:

bool MathSqrt(double &array[])                           // результат в тот же вектор кладется
bool MathSqrt(const double &array[],double &result[])    // результат в отдельный вектор
Сравнивайте.

Вы еще не совсем поняли, что в этих 461 функциях стандартной математической библиотеке MQ5 огромное покрытие базовых математических операций.


Более того векторизация в R подразумевает не только сами объекты, но:

  • процедурный аппарат в виде специфических операторов apply и его разновидностей
  • использование стандартной библиотеки MKL для совершения  всех этих векторизированных операций.

Да, да. Теоретически.

А 99% всех операций вы делаете исключительно в простейших функциях без шанса на ускорение.

В MQL5 OpenCL вообще штатный и можете без сторонних библиотек все ускорить. Причем в обычном MQL5 вы можете получать результат на уровне С++.

А в R единственный вариант - искать пакет под ускорение каждого цикла. Да, именно каждого, если он хоть что-то из себя представляет по количеству итераций.


И возвращаясь к смыслу написанного мною в предыдущем посте.

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

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

Я не копал это, но логически это выглядит именно так. Что означает серьезные расходы на обеспечение поддержки MKL.

В MQL5 таких потерь нет вообще, конечно. Только в OpenCL нужно копировать данные, но там простой и плоский memcopy.

 
Renat Fatkhullin:

А почему сами не напишите себе нужную функцию?

Написал когда-то, только не оформлял, как мат. функцию.

Посмотрите на полные исходники функций в /include/math/stat и напишите недостающие.

Вопрос в помещении в стандартную библиотеку с научным и программистким причесыванием, как это делает Quantum. 

Скорее всего, надо будет сделать сравнение по производительности c вашим решением. Тогда, думаю, получится убедить поместить велосипед в мат. библу. Сам такого в мат. пакетах не видел (за R не возьмусь утверждать).

 

Еще небольшой секрет - почему MQL5 такой быстрый, особенно когда библиотеки полностью в исходниках.

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

В отличии от использования библиотек/пакетов(где нельзя даже вызов оптимизировать) другими системами, компилятор MQL5 почти всегда работает с полным исходным кодом и всегда проводит глобальную оптимизацию на максимальную глубину. Это дает потрясающие результаты.

Поэтому для нас важно предоставлять все стандартные библиотеки в исходниках. Мы знаем, что в финале все будет заоптимизировано так, что по скорости можно победить почти всех. И даже оверхед на managed язык уже не так сильно влияет.

 

Не компилируется под MT4. #property strict не помогает

'Math.mqh'      Math.mqh        1       1
'MathLog1p' - no one of the overloads can be applied to the function call       Math.mqh        4655    17
'MathLog1p' - no one of the overloads can be applied to the function call       Math.mqh        4676    16
'MathExpm1' - no one of the overloads can be applied to the function call       Math.mqh        4702    17
'MathExpm1' - no one of the overloads can be applied to the function call       Math.mqh        4723    16
'MathSinh' - no one of the overloads can be applied to the function call        Math.mqh        4750    17
'MathSinh' - no one of the overloads can be applied to the function call        Math.mqh        4772    16
'MathCosh' - no one of the overloads can be applied to the function call        Math.mqh        4799    17
'MathCosh' - no one of the overloads can be applied to the function call        Math.mqh        4821    16
'MathTanh' - no one of the overloads can be applied to the function call        Math.mqh        4848    17
'MathTanh' - no one of the overloads can be applied to the function call        Math.mqh        4870    16
'MathArcsinh' - no one of the overloads can be applied to the function call     Math.mqh        4897    17
'MathArcsinh' - no one of the overloads can be applied to the function call     Math.mqh        4919    16
'MathArccosh' - no one of the overloads can be applied to the function call     Math.mqh        4946    17
'MathArccosh' - no one of the overloads can be applied to the function call     Math.mqh        4968    16
'MathArctanh' - no one of the overloads can be applied to the function call     Math.mqh        4995    17
'MathArctanh' - no one of the overloads can be applied to the function call     Math.mqh        5017    16
16 error(s), 0 warning(s)               17      1
Баг MQL4?