Как Matlab может быть полезен программисту

 

Как Matlab может быть полезен программисту на mql4 и mql5 ?

Для тех, кто с нуля, краткая сводочка. Matlab — это монструозный пакет математических программ и функций, плюс он имеет собственный простой язык программирования. Язык очень простой и позволяет связываться с mql4/5 через DLL и многими другими способами, например, через memory mapping. А для совсем олдскул программистов есть отличная развитая работа с файлами.

Что мы как программисты получаем взамен? Доступ к богатейшей библиотеке математики, а также искусственную интеллекту и нейронным сетям. Конечно, потребуется некоторое время на обучение, но оно того стоит. Если вам это интересно, я продолжу эту тему.

 

Шикарная тема! Правда без баб будет скучновата, наверное ))

Шутю...

Кстати, в MQL5 уже есть матрицы и векторы. Алексей,  а раз Matlab - это аббревиатура  от «Matrix Laboratory», то давай для затравки сравним скорости работы с матрицами Матлаба и MQL5.

 
Denis Kirichenko #:


давай для затравки сравним скорости работы с матрицами Матлаба и MQL5.


А заодно и наглядность записи матричных операций сравните.
 
Alexey Volchanskiy:

Как Matlab может быть полезен программисту на mql4 и mql5 ?

Для тех, кто с нуля, краткая сводочка. Matlab — это монструозный пакет математических программ и функций, плюс он имеет собственный простой язык программирования. Язык очень простой и позволяет связываться с mql4/5 через DLL и многими другими способами, например, через memory mapping. А для совсем олдскул программистов есть отличная развитая работа с файлами.

Что мы как программисты получаем взамен? Доступ к богатейшей библиотеке математики, а также искусственную интеллекту и нейронным сетям. Конечно, потребуется некоторое время на обучение, но оно того стоит. Если вам это интересно, я продолжу эту тему.

Да тема интересная.
Я реализовывал интеграцию через dll, как на си api, так и на c++ api, и чуть не свихнулся от c++ api на шаблонах.
Очень тяжёлая реализация интерфейса взаимодействия, в частности с передачей массивов.
Если пробовал c++ api понимаешь о чём я. Там есть момент при передаче массивов, который надо хитров*****но преобразовывать в формат матлаба.
Где то на stackoverflow только нашёл решение, но там такой костыль с преобразованием, что аж жесть. Да и повторюсь  c++ api на шаблонах очень муторное.
На си api намного проще, и по ощущением быстрее работало взаимодействие с ядром матлаба.

Но вот взаимодействие через memory mapping с блокировкой критических секций куда интереснее для раскрытия темы.
Если жечь, так жечь. Давай сразу с memory mapping ))

 
Sergey Gridnev #:

А заодно и наглядность записи матричных операций сравните.

Отличное предложение. В последний год и ранее MQ резко стартанули в части работы с векторами и матицами. Набросайте примеры на пятерке, если не трудно. 

 
Denis Kirichenko #:

Шикарная тема! Правда без баб будет скучновата, наверное ))

Шутю...

Кстати, в MQL5 уже есть матрицы и векторы. Алексей,  а раз Matlab - это аббревиатура  от «Matrix Laboratory», то давай для затравки сравним скорости работы с матрицами Матлаба и MQL5.

Матлаб по умолчанию параллелит вычисления на все доступные ядра.
В mql5 это надо делать через OpenCL.
Поэтому не корректно будет сравнивать, если вычисления mql5 будут не через OpenCL.
Насчет CPU инструкций AVX, AVX2+FMA3 не знаю как онии выполняются в mql5, но сомневаюсь что параллелятся по умолчанию.
Просто за один такт процессорного времени, выполняется несколько математических операций, что не соответствует много ядерности.

 
Roman #:

Да тема интересная.
Я реализовывал интеграцию через dll, как на си api, так и на c++ api, и чуть не свихнулся от c++ api на шаблонах.
Очень тяжёлая реализация интерфейса взаимодействия, в частности с передачей массивов.
Если пробовал c++ api понимаешь о чём я. Там есть момент при передаче массивов, который надо хитров*****но преобразовывать в формат матлаба.
Где то на stackoverflow только нашёл решение, но там такой костыль с преобразованием, что аж жесть. Да и повторюсь  c++ api на шаблонах очень муторное.
На си api намного проще, и по ощущением быстрее работало взаимодействие с ядром матлаба.

Но вот взаимодействие через memory mapping с блокировкой критических секций куда интереснее для раскрытия темы.
Если жечь, так жечь. Давай сразу с memory mapping ))

Я на этом форуме давно, в 201* годах писал про мэппинг, лень искать. В двух словах, мемору мэппинг это создание виртуального адресного пространства, которое доступно для всех прог в пределах твоего компа.

Это четко описано в MSDN 

Memory-Mapped Files - .NET
Memory-Mapped Files - .NET
  • 2022.12.14
  • adegeo
  • learn.microsoft.com
Explore memory-mapped files in .NET, which contain file contents in virtual memory, and allow applications to modify the file by writing directly to the memory.
 
Alexey Volchanskiy #:

Я на этом форуме давно, в 201* годах писал про мэппинг, лень искать. В двух словах, мемору мэппинг это создание виртуального адресного пространства, которое доступно для всех прог в пределах твоего компа.

Это четко описано в MSDN 

Теорию мэппинга я знаю )) и даже реализовывал средствами cи
Непонятно как это делать в matlab, банальный синтаксис взаимодействия плюс критические секции.

 
Roman #:

Матлаб по умолчанию параллелит вычисления на все доступные ядра.
В mql5 это надо делать через OpenCL.
Поэтому не корректно будет сравнивать, если вычисления mql5 будут не через OpenCL.
Насчет CPU инструкций AVX, AVX2+FMA3 не знаю как онии выполняются в mql5, но сомневаюсь что параллелятся по умолчанию.
Просто за один такт процессорного времени, выполняется несколько математических операций, что не соответствует много ядерности.

По умолчанию нет, но задается в опциях, также можно параллелить на GPU, но только на CUDA, то есть Nvidia. В Mql5 при компиляции можно указывать опции. Например, для магазина никакие оптимизации не допускаются.

 
Roman #:

Теорию мэппинга я знаю )) и даже реализовывал средствами cи
Непонятно как это делать в matlab, банальный синтаксис взаимодействия плюс критические секции.

Так матлаб вполне неплохо юзает Win Api. Я покопаюсь в коде.

 
Roman #:

Матлаб по умолчанию параллелит вычисления на все доступные ядра...

Стесняюсь спросить, а откуда такая инфа? Может чего сам не знаю... да, в составе Матлаба есть parallel pool, но насколько помню, чтобы он стартанул, нужно специально его вызывать...

By default, a parallel pool starts automatically when needed by parallel language features such as  parfor .