Нашли робастую мат. модель в R. Нашли - значит исследовали ее в R. А дальше уже готовое ИССЛЕДОВАННОЕ решение (торговый алгоритм фактически) с легкостью портируете с R на MQL за счет библы и этой статьи. Всякое Г.. машинного обучения - подгонка всегда для фин. рынков.
Писать замотаешься на MQl.)) Проще (и надежней)) вызвать нужный функционал непосредственно из R (и пр. )). Эти методы и Ренат озвучивал - не самые простые и современные, но есть. Скажем, как присоединить COM- объекты к MT? Частично можно (не всё) - (пардон) через прокладки)).
Кстати, заявления про полную оптимизированность на скорость математических библиотек в R сильно преувеличены.
Сказывается обычное написание кода в лоб и дикий системный оверхед из-за работы с динамическими объектами/сущностями. В отличие от R, MQL5 оперирует четкими типизированными массивами и компилирует код в натив x64. Это дает огромное преимущество и позволяет выигрывать даже у DLL реализаций функций в R.
Вот тест на основе примера выше: R 3.3.1 x64
install.packages("microbenchmark")
library(microbenchmark)
n <- 2000
k <- seq(0,n,by=20)
res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
Unit: microseconds
expr min lq mean median uq max neval
a <- dbinom(k, n, pi/10, log = TRUE) 20.16720.16820.8872620.46920.7735.819100
тройной прогон показал минимум времени 20 микросекунд.
Кстати, заявления про полную оптимизированность на скорость математических библиотек в 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, без виртуалок и без посторонней нагрузки.
Там добавлена переопределенная функция для векторов.
да,спасибо. так работает. у меня вот так получилось. сразу оговорюсь, МТ у меня из-под вайн работает, 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 бралось минимальное время за множество запусков, а не первый запуск и максимальное время.
Так что нет, "холодный старт" тут не объясняет. Да еще в условиях, когда весь код библиотек в DLL. Разогревать практически нечего.
А вот что объясняет:
Отсутствие оверхеда на динамических объектах как в R за счет работы с чисто типизированными данными double
Жутко эффективный компилятор в MQL5. Реально страшно смотреть на результирующий asm код.
Наличие MQL5 библиотек в исходном коде, что позволяет нативно инлайнить их код прямо в место вызова и максимально использовать const окружение вызываемого места.
Вот где компилятору раздолье по сравнению с фактически неоптимизированными реализациями в DLL, которые не имеют шанса узнать окружение и подстроиться под него.
Нахрена?! Четко же ясны цели мат. библы
Я чего-то не понимаю
Что является результатом обращения к указанной функции в 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, которые не имеют шанса узнать окружение и подстроиться под него.