Нужно ли сначала сделать ЕА на Matlab?

 

Всем приветов с тавы светов!

На эти выхи, мирно попивая красное полусладкое, я осознал, что до начала лета осталось менее 4-х месяцев. Внезапно так. И что для проверки всех своих идей-нетленок надо ускоряться. А так, как я ленив, надо забацать тестового робота на любимом Матлабчике в формате DLL. То есть сделать такой джентльменский наборчик:

1. Простейший мультиплатформенный советник для МТ4/5, к которому подключается Matlab-dll, в которой будут все расчеты. Можно даже попробовать прикрутить Simulink для беспартийных, но сочувствующих. Это я про визуальное программирование и не умеющих писать зловредный код.

2.  Matlab-dll  с расчетами. Почему Матлаб? Да потому, что там куча готовых мат. фунций, для использования которых достаточно почитать хелп и написать 1-2 строки. А на MQL это займет не менее дня.

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

Собственно, я сегодня выпроводил воскресную помеху творчеству и кое-что потестировал. Как всегда, в Матлабе куча ограничений, но жить можно.

Вопрос такой: будет ли вам интересно, если я буду тут кратко описывать свои эксперименты на Матлабе? Могу выкладывать матлабовский код или готовые варианты DLL. Но надо понимать, что матлабовские DLL не работают в гордом одиночестве, как, например, MS C++ DLL, им нужен Matlab Runtime. Раньше он занимал в дистрибутиве пол-гига и раздавался Matworks бесплатно. Однако, за время пути собачка могла подрасти ). Я про размер, фришность должна остаться.

----------------

А так все просто, я набросал впопыхах простенькую DLL с двумя функциями:

% файл SumDouble.m  

function resultSum = SumDouble(d1, d2) % эта видна, Матлаб ищет ее по имени файла SumDouble.m  
resultSum = d1 + d2 + MultDouble(d1, d2);

function resultMult = MultDouble(d1, d2) % эта функция из MQL5 не видна, только внутри матлаб-системы
resultMult = d1 * d2;

И как ее вызвать из MQL5:

#import "SumDouble.dll"
    void SumDouble_initialize(void);
    void SumDouble_terminate(void);
    double SumDouble(double d1, double d2);
#import

double d1 = 1, d2 = 2;

void OnStart()
{
    //SumDouble_initialize();
    double d = SumDouble::SumDouble(d1, d2);
    Print(d);   
    //SumDouble_terminate();
}

Так что жду отзывов. Можно ругаться, мне давно все фиолетово )). Но лично для себя я вижу:

1. Обкатка идей на Матлабе ускорит проверку идей.

1. Публикации на форуме помогут бороться с ленью.

 

Alexey Volchanskiy:

А так все просто, я набросал впопыхах простенькую DLL с двумя функциями:

% файл SumDouble.m  

И как ее вызвать из MQL5:

Так что жду отзывов. Можно ругаться, мне давно все фиолетово )). Но лично для себя я вижу:

1. Обкатка идей на Матлабе ускорит проверку идей.

1. Публикации на форуме помогут бороться с ленью.

Добрый день, Алексей!

Когда-то много писал на МатЛаб. Где-то на винчестере сохранилась старая версия 15-20 лет давности. Пойдет?

 
Konstantin Erin #:

Добрый день, Алексей!

Когда-то много писал на МатЛаб. Где-то на винчестере сохранилась старая версия 15-20 лет давности. Пойдет?

Приветствую! Последние 5-6 лет Матлаб выпускается только в 64-разрядном варианте, до этого дистрибутив включал 32 и 64-разрядные версии. А 15-20 лет назад он точно был только 32-разрядный. Я бы не поленился и скачал, сам знаешь откуда, последний дистрибутив Matlab R2023b. Для тех, кто живет на западе, можно скачать 30-дневный триал 

Кстати, я пока не знаю, как прикрутить 64-разрядную DLL к МТ4. Идеи есть, через 32-битный переходничок, но надо пробовать. Если не выйдет, есть в запасе еще 3-4 варианта. 

Trials
  • nl.mathworks.com
Get a Free 30-Day Trial Run MATLAB in your browser or download and install on your desktop.
 
Alexey Volchanskiy #:

Приветствую! Последние 5-6 лет Матлаб выпускается только в 64-разрядном варианте, до этого дистрибутив включал 32 и 64-разрядные версии. А 15-20 лет назад он точно был только 32-разрядный. Я бы не поленился и скачал, сам знаешь откуда, последний дистрибутив Matlab R2023b. Для тех, кто живет на западе, можно скачать 30-дневный триал 

Кстати, я пока не знаю, как прикрутить 64-разрядную DLL к МТ4. Идеи есть, через 32-битный переходничок, но надо пробовать. Если не выйдет, есть в запасе еще 3-4 варианта. 

можно на scilab (https://www.scilab.org/) портировать, они близки с MatLab 

и его уже невозбранно дёргать. У него довольно простой, разумный DLL API 

 
Maxim Kuznetsov #:

можно на scilab (https://www.scilab.org/) портировать, они близки с MatLab 

и его уже невозбранно дёргать. У него довольно простой, разумный DLL API 

У меня стоит древняя версия 6.02 аж с 2019 г., так я на нее и не перешел, слабовата, как и все опенсорсное. Как и пресловутый R, тоже давно пытался освоить. Но спасибо за напоминание, сейчас поставлю версию  Scilab 2024.0.0, поковыряюсь в свободное время.

У меня простая и конкретная задача, н вижу смысла уходить с хорошо известной мне платформы. Что касается «невозбранно дёргать», то у нас и до санкций с этим было спокойно. А Д.Медведев еще год-два назад высказался, что раз нам закрыли доступ к западному ПО, то он одобряет пиратство. Эти слова легко найти в инете. По любому, не вижу смысла ради постов на любом форуме менять привычную платформу.

И так проблем хватает. Мне хочется прикрутить Матлаб робота и к МТ4, так как есть реальные счета для тестирования. Но МТ4 32-разрядный, значит надо изучать Thunking SDK от Microsoft или его аналоги. Посмотрим... пока делаю для МТ5. Надеюсь на неделе что-то выложить.

 

Дела по EA на Matlab медленно, но двигаются. Я планировал выложить хоть какие-то результаты на этой неделе, так как ветку открыл во вторник, 2024.02.06, а сегодня вечер субботы. Надеюсь успеть.

А пока, может кому-то будет интересно про векторные и матричные операции. Тем более, на форуме есть интересная ветка про векторные и матричные операции в mql5: Сравнение скорости Resize матриц и динамических массивов структур с динамическим массивом

Как всегда, спрашиваем ChatGPT? меня интересовало, использует ли Матлаб расширенные инструкции CPU. Он может использовать и GPU, но только с CUDA, а у меня такой карты нет.

--------------

Я:

Расскажи мне про векторизацию операций в matlab. Используют ли при этом matlab расширенные инструкции avx, avx2 и другие?

ChatGPT: 

Векторизация в MATLAB относится к практике использования векторных и матричных операций вместо циклов **for**, **while** или других циклических конструкций. Это один из ключевых способов улучшения производительности кода в MATLAB, так как MATLAB оптимизирован для работы с массивами и матрицами.


Пример векторизации:


```matlab

% Невекторизованный код

n = 10000;

a = zeros(1, n);

for i = 1:n

    a(i) = i^2;

end


% Векторизованный код

a = (1:n).^2;

```


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


Что касается использования расширенных инструкций, таких как AVX, AVX2 и других наборов SIMD (Single Instruction, Multiple Data) инструкций, MATLAB, как правило, оптимизируется при компиляции для использования наилучших доступных инструкций, поддерживаемых на целевой платформе. MATLAB использует библиотеку Intel Math Kernel Library (MKL), которая включает оптимизированные математические функции для процессоров с поддержкой инструкций AVX, AVX2 и других.


При этом, когда вы пишете код в MATLAB, вы в основном не должны беспокоиться о том, используются ли эти расширения напрямую — MATLAB и его функции обычно берут на себя задачу оптимизации на низком уровне. Однако MATLAB позволяет настраивать некоторые аспекты внутренней обработки через функции, такие как `feature` или `maxNumCompThreads`, которые позволяют пользователю влиять на использование многопоточности и, возможно, некоторые аспекты использования SIMD инструкций.


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


   

Сравнение скорости Resize матриц и динамических массивов структур с динамическим массивом
Сравнение скорости Resize матриц и динамических массивов структур с динамическим массивом
  • 2024.02.08
  • www.mql5.com
До появления матриц создание их аналог делался через динамический массив структур с динамическим массивом: И обоим измерениям можно в процессе рабо...
 
Что мешает освоить R?  Та же вектортзация,  опенсорс,  развиваеться как дурной,  прекрасное комюнити,  все есть, все из коробки,  за частую задача решаеться в три строчки кода уже с визуализацией) 
 
mytarmailS #:
Что мешает освоить R?  Та же вектортзация,  опенсорс,  развиваеться как дурной,  прекрасное комюнити,  все есть, все из коробки,  за частую задача решаеться в три строчки кода уже с визуализацией) 

Я в курсе R. Вопрос один — а зачем? На матлабе я бацаю больше 20 лет. Хотя пишу немного, в основном прототипы стратегий, но более-менее язык и пакеты по DSP изучил, сейчас за ИИ берусь. Зачем изучать еще и R?

Вопрос в вам по R: я недавно поискал посты по нему, в 2019 г. Метаквоты писали, что скоро выпустят API для коннекта с R. В папке include ничего по теме не нашел. Да и ветка по R тут совсем заглохла. Даже Сан Саныч, котрый яро за него агитировал, опустил руки.

Какая сейчас ситуация с API для MQL5, вы в курсе?  

 
Alexey Volchanskiy #:

Я в курсе R. Вопрос один — а зачем? На матлабе я бацаю больше 20 лет. Хотя пишу немного, в основном прототипы стратегий, но более-менее язык и пакеты по DSP изучил, сейчас за ИИ берусь. Зачем изучать еще и R?

Вопрос в вам по R: я недавно поискал посты по нему, в 2019 г. Метаквоты писали, что скоро выпустят API для коннекта с R. В папке include ничего по теме не нашел. Да и ветка по R тут совсем заглохла. Даже Сан Саныч, котрый яро за него агитировал, опустил руки.

Какая сейчас ситуация с API для MQL5, вы в курсе?  

Так вы же сами тему начали что проблемы с версиями какие то, то есть, того нету, то платное, то крякнутое итп.. 
Зачем этот головняк

Потому и сказал берите R и не парьтесь 
 
Alexey Volchanskiy #:

Я в курсе R. Вопрос один — а зачем? На матлабе я бацаю больше 20 лет. Хотя пишу немного, в основном прототипы стратегий, но более-менее язык и пакеты по DSP изучил, сейчас за ИИ берусь. Зачем изучать еще и R?

Вопрос в вам по R: я недавно поискал посты по нему, в 2019 г. Метаквоты писали, что скоро выпустят API для коннекта с R. В папке include ничего по теме не нашел. Да и ветка по R тут совсем заглохла. Даже Сан Саныч, котрый яро за него агитировал, опустил руки.

Какая сейчас ситуация с API для MQL5, вы в курсе?  

https://www.mql5.com/ru/code/17468 

Мной опубликован: 2017.02.03 12:20

А это для МТ4

https://www.mql5.com/ru/code/10684

Мной опубликован: 2012.04.09 07:36 

Выложено мною, причем не я автор, а другой человек, который сделал это API за несколько лет до 2012 года.

Это не единственная связка МТ4 с R


Никаких проблем с R нет при использовании из терминалов МТ4/5 , есть проблемы с желанием. 

mt-R
mt-R
  • www.mql5.com
Библиотеки связи терминалов МТ4/5 с R
 
СанСаныч Фоменко #:

https://www.mql5.com/ru/code/17468 

Мной опубликован: 2017.02.03 12:20

А это для МТ4

https://www.mql5.com/ru/code/10684

Мной опубликован: 2012.04.09 07:36 

Выложено мною, причем не я автор, а другой человек, который сделал это API за несколько лет до 2012 года.

Это не единственная связка МТ4 с R


Никаких проблем с R нет при использовании из терминалов МТ4/5 , есть проблемы с желанием. 

на 4рку ссылка живая, а на 5рку - битая

dll-ка с закрытым кодом,

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