Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нахрена?! Четко же ясны цели мат. библы
Я чего-то не понимаю
Что является результатом обращения к указанной функции в MQL? Скаляр? вектор?Вот что имеем на R
n <- 2000
>
> k <- seq(0, n, by = 20)
>
> dbinom(k, n, pi/10, log = TRUE)
[1] -754.219687 -660.247472 -592.126636 -534.532344 -483.881605
[6] -438.460449 -397.256529 -359.600217 -325.015561 -293.146935
[11] -263.718651 -236.510862 -211.344286 -188.070044 -166.562645
[16] -146.714976 -128.434635 -111.641185 -96.264050 -82.240889
[21] -69.516303 -58.040813 -47.770020 -38.663934 -30.686405
[26] -23.804662 -17.988917 -13.212041 -9.449276 -6.678001
[31] -4.877524 -4.028903 -4.114796 -5.119322 -7.027950
> a<-dbinom(k, n, pi/10, log = TRUE)> str(a)
num [1:101] -754 -660 -592 -535 -484 ...
Т.е. обращение к функции в Rдает результат вектор, который можно нарисовать с помощью универсального метода plot
> plot(a)
Положите обновленный файл в /Include/Math/Stat, пожалуйста.
В нем добавлена перегруженная функция для вектора + дополнительный параметр log_mode.
Вот аналог ваших расчетов, полностью совпадающий по результатам с R:
Вывод:
Сейчас ведем работу по добавлению векторных операций, чтобы максимально близко быть по синтаксису с R.
Конечно же, добавим массу новых юниттестов в поставку.
Кстати, заявления про полную оптимизированность на скорость математических библиотек в R сильно преувеличены.
Сказывается обычное написание кода в лоб и дикий системный оверхед из-за работы с динамическими объектами/сущностями. В отличие от R, MQL5 оперирует четкими типизированными массивами и компилирует код в натив x64. Это дает огромное преимущество и позволяет выигрывать даже у DLL реализаций функций в R.
Вот тест на основе примера выше: R 3.3.1 x64
тройной прогон показал минимум времени 20 микросекунд.
Аналогичный тест в MQL5:
В MQL5 считается в два раза быстрее: 10 микросекунд против 20 микросекунд в R.
Расчет на i7-4930k, Windows 10 x64, MetaTrader 5 x64, без виртуалок и без посторонней нагрузки.
Кстати, заявления про полную оптимизированность на скорость математических библиотек в R сильно преувеличены.
Сказывается обычное написание кода в лоб и дикий системный оверхед из-за работы с динамическими объектами/сущностями. В отличие от R, MQL5 оперирует четкими типизированными массивами и компилирует код в натив x64. Это дает огромное преимущество и позволяет выигрывать даже у DLL реализаций функций в R.
Вот тест на основе примера выше: R 3.3.1 x64
тройной прогон показал минимум времени 20 микросекунд.
Аналогичный тест в MQL5:
В MQL5 считается в два раза быстрее: 10 микросекунд против 20 микросекунд в R.
Расчет на i7-4930k, Windows 10 x64, MetaTrader 5 x64, без виртуалок и без посторонней нагрузки.
Кстати, заявления про полную оптимизированность на скорость математических библиотек в R сильно преувеличены.
Сказывается обычное написание кода в лоб и дикий системный оверхед из-за работы с динамическими объектами/сущностями. В отличие от R, MQL5 оперирует четкими типизированными массивами и компилирует код в натив x64. Это дает огромное преимущество и позволяет выигрывать даже у DLL реализаций функций в R.
Вот тест на основе примера выше: R 3.3.1 x64
тройной прогон показал минимум времени 20 микросекунд.
Аналогичный тест в MQL5:
В MQL5 считается в два раза быстрее: 10 микросекунд против 20 микросекунд в R.
Расчет на i7-4930k, Windows 10 x64, MetaTrader 5 x64, без виртуалок и без посторонней нагрузки.
а у меня ошибка((
'vars' - parameter conversion not allowed
а у меня ошибка((
'vars' - parameter conversion not allowed
Нужно взять обновленный файл из https://www.mql5.com/ru/forum/97153/page4#comment_2882502
Там добавлена переопределенная функция для векторов.
Нужно взять обновленный файл из https://www.mql5.com/ru/forum/97153/page4#comment_2882502
Там добавлена переопределенная функция для векторов.
да,спасибо. так работает. у меня вот так получилось. сразу оговорюсь, МТ у меня из-под вайн работает, 32бит. потому какой будет ответ,я догадываюсь- 64бит быстрее)) чтобы не было путаницы - R тоже на 32 бит
да,спасибо. так работает. у меня вот так получилось. сразу оговорюсь, МТ у меня из-под вайн работает, 32бит. потому какой будет ответ,я догадываюсь- 64бит быстрее))
Это не серьезно.
Под вайном, да еще 32 бита. Для 32 битов МТ5 используется старый компилятор, аналогичный MT4. Он в пару десятков раз медленнее 64 битного кода, который создает новый компилер специально для 64 битной версии МТ5. Отчет по сравнению скорости 32 и 64 битных MQL5 программ мы публиковали.
Каждая MQL5 программа на самом деле содержит две копии скомпилированного кода: 32 битная для старых систем ради совместимости и 64 битная для новых.
Мы полностью отказались от развития 32 битных компиляторов, так как это не имеет никакого смысла и будущего.
Поэтому надо использовать только 64 битные версии MetaTrader 5, если хотите получить максимум производительности.
Кстати, информация для тех, кто сидит на MT4 - там тоже скорость исполнения MQL4 кода в пару десятков раз медленнее, чем в 64 битном Метатрейдер 5.
Поздравляю! Чистая победа, на обе лопатки.
расчёт вдвое быстрее чем аналогичный расчёт R с компиляцией (первый проход R - байт/или jit компиляция, поэтому у него max>1.5 avg а min~=avg) ?
что-ж, достижение.. :-)
расчёт вдвое быстрее чем аналогичный расчёт R с компиляцией (первый проход R - байт/или jit компиляция, поэтому у него max>1.5 avg а min~=avg) ?
что-ж, достижение.. :-)
В R бралось минимальное время за множество запусков, а не первый запуск и максимальное время.
Так что нет, "холодный старт" тут не объясняет. Да еще в условиях, когда весь код библиотек в DLL. Разогревать практически нечего.
А вот что объясняет:
Вот где компилятору раздолье по сравнению с фактически неоптимизированными реализациями в DLL, которые не имеют шанса узнать окружение и подстроиться под него.