Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 13
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На текущий момент в статистической библиотеке MQL5 (без учета Alglib, Fuzzy) уже больше 461 функции: https://www.mql5.com/ru/forum/86386/page222#comment_3867386
Это уже хорошо покрывает базовые статистические функции.
Кто читал статью раньше, рекомендую ее снова прочесть - вчера выпустили новую редакцию статьи с массой новых функций.
На текущий момент в статистической библиотеке 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 и напишите недостающие.
Нет никакой векторизации и никаких современных возможностей в R. Там код просто в лоб написан обычными джуниорами от программирования. Да, математики они приличные, но вот программисты посредственные.
Вы просто не знаете ни R, ни MQL5.
Вы не смотрели исходники R, не знаете исходников MQL5. Не строили компиляторов последние 15 лет. Но пытаетесь спорить с теми, кто это все сделал.
У меня очень скромные познания в программировании, но не до такой степени, как Вы описали.
Во всяком случае я прекрасно понимаю, что внутренняя реализация R на С++, на которую Вы ссылаетесь, вообще не имеет отношения к поднятой мною проблеме измерения скорости выполнения. Я пишу о технике написания кода собственно на R, а что внутри, то и меряем.
Итак, по поводу векторизации.
В R нормально выглядит строка
Это всегда, как минимум, векторные вычисления. Зависит от контекста - что такое а и b.
Более того,
даст вектор с, каждый элемент которого является корнем квадратным из соответствующего элемента вектора а
При этом а совсем не обязательно должен быть вектором, может быть и более сложным объектом, например матрица.
В МQL это всегда циклы.
Более того векторизация в R подразумевает не только сами объекты, но:
И возвращаясь к смыслу написанного мною в предыдущем посте.
Я вообще ничего не пишу о качестве реализации функций на C++. Я как и Вы предлагаю их мерить такими как они есть. Но с использованием средств языка R, которые специально предназначены для векторных операций.
Например.
Для всех Ваших тестов образуем матрицу M со 100 (как у Вас) , где каждый столбец моделирует котировку
Тогда на R минимум по всем столбцам выглядит как
Результат будет вектор, который будет содержать минимум по каждому столбцу
По этому образцу надо мерить скорость всех функций распределения, обернутых в соответствующую apply. Их много и они разные. Аналогов в МКЛ нет.
При этом надо проследить чтобы вместе с R была установлена библиотека MKL.
А почему сами не напишите себе нужную функцию?
Посмотрите на полные исходники функций в /include/math/stat и напишите недостающие.
Интересная мысль.
Может быть найдется исполнитель по портированию пакетов. Например, splines. Получили высшего качества машки, настоящие.
У меня очень скромные познания в программировании, но не до такой степени, как Вы описали.
Во всяком случае я прекрасно понимаю, что внутренняя реализация R на С++, на которую Вы ссылаетесь, вообще не имеет отношения к поднятой мною проблеме измерения скорости выполнения. Я пишу о технике написания кода собственно на R, а что внутри, то и меряем.
Итак, по поводу векторизации.
В R нормально выглядит строка
Это всегда, как минимум, векторные вычисления. Зависит от контекста - что такое а и b.
Более того,
даст вектор с, каждый элемент которого является корнем квадратным из соответствующего элемента вектора а
При этом а совсем не обязательно должен быть вектором, может быть и более сложным объектом, например матрица.
В МQL это всегда циклы.
Мы показали, как быстрей работаем в циклах. Причем в чистых исходниках на MQL5 без применения С++.
И простейший векторный sqrt мы тоже победим. Вот из библиотеки две штатные функции с полным аналогом R:
bool MathSqrt(const double &array[],double &result[]) // результат в отдельный вектор
Вы еще не совсем поняли, что в этих 461 функциях стандартной математической библиотеке MQ5 огромное покрытие базовых математических операций.
Более того векторизация в R подразумевает не только сами объекты, но:
Да, да. Теоретически.
А 99% всех операций вы делаете исключительно в простейших функциях без шанса на ускорение.
В MQL5 OpenCL вообще штатный и можете без сторонних библиотек все ускорить. Причем в обычном MQL5 вы можете получать результат на уровне С++.
А в R единственный вариант - искать пакет под ускорение каждого цикла. Да, именно каждого, если он хоть что-то из себя представляет по количеству итераций.
И возвращаясь к смыслу написанного мною в предыдущем посте.
Мало кто понимает, но скорее всего при использовании MKL будет сказочный оверхед на перекладывании входных данных R в обычные массивы, на которых отработает MKL, а потом результат снова надо будет переложить во внутренний формат представления данных R.
Я не копал это, но логически это выглядит именно так. Что означает серьезные расходы на обеспечение поддержки MKL.
В MQL5 таких потерь нет вообще, конечно. Только в OpenCL нужно копировать данные, но там простой и плоский memcopy.
А почему сами не напишите себе нужную функцию?
Написал когда-то, только не оформлял, как мат. функцию.
Посмотрите на полные исходники функций в /include/math/stat и напишите недостающие.
Вопрос в помещении в стандартную библиотеку с научным и программистким причесыванием, как это делает Quantum.
Скорее всего, надо будет сделать сравнение по производительности c вашим решением. Тогда, думаю, получится убедить поместить велосипед в мат. библу. Сам такого в мат. пакетах не видел (за R не возьмусь утверждать).
Еще небольшой секрет - почему MQL5 такой быстрый, особенно когда библиотеки полностью в исходниках.
Наш компилятор занимается настолько глубокой оптимизацией и имеет возможность столько проверок и условий отсекать, что функции пропадают начисто, а циклы упрощаются донельзя. Конечно, только для x64 версии.
В отличии от использования библиотек/пакетов(где нельзя даже вызов оптимизировать) другими системами, компилятор MQL5 почти всегда работает с полным исходным кодом и всегда проводит глобальную оптимизацию на максимальную глубину. Это дает потрясающие результаты.
Поэтому для нас важно предоставлять все стандартные библиотеки в исходниках. Мы знаем, что в финале все будет заоптимизировано так, что по скорости можно победить почти всех. И даже оверхед на managed язык уже не так сильно влияет.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Помогите с корреляцией
Quantum, 2016.12.01 12:53
Файл Math.mqh нужно положить в папку terminal_data_folder\MQL5\Include\Math\Stat\.Не компилируется под MT4. #property strict не помогает
'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