Еще раз о связке MQL5 <-> Matlab

 

Получил письмо в личку от форумчанина. Я считаю, если вопрос не про баб, а про программирование, то надо писать его на форум, зачем впадать в грех переписки?

Цитирую переписку:

как в матлаб 2020а прочитать переменную из МТ5 и наоборот, можно при подключенном виртуальном диске (или без него). Может глобальная переменная МТ5 поможет но как? 
2020.08.16 20:04

Прочитать напрямую никак, можно:
1. Записывать ее в файл через mql5, в матлабе читать
2. Использовать memory mapping
2020.08.18 15:17


1) у меня через RAM диск совмещенный с windows10 через mklink - по вашему совету (и еще кто-то забыл ко стыду).

Видимо это и есть memory mapping в матлаб - в справке матлаба именно так.
Все ок, но из-за частого открытия -закрытия файла процы грузятся до 13% вместо 3% - там же нет арифметических операций. Ерунда получается. Просил брокера дать прямую ссылку для слива котировок мимо МТ5 - пока не ответили.
2) если есть другая версия memory mapping можно ли подробнее?
3) Знаете я тоже в матлаб давно - с 2000г до этого фортраны и проч. А вы еще и системщик что симпатично. Если не отфуболите, будете в курсе если интересно.

2020.08.18 20:57

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

Спецом прочитал справку, там ни слова про RAM диск. Это вообще отдельная программа стороннего производителя.

Забыл сказать еще способ - можно загружать программу MQL5 Matlab DLL, делается она очень просто средствами Matlab. Но если юзать на другом компе, надо ставить туда Matlab RTL, она есть в поставке, в справке все описано.

Накидал примерчик, как в Matlab r2020a SP4 работать с memory mapping. В нем надо сначала создать файл на диске, а потом замэпить его в память. На Win API такие извраты не требуются. Сам MMF придется создавать в Matlab, а в MQL5 использовать функции WinAPI, об этом в конце.

clear all;
clc;
myData = double(1:1024)';
myData(3:8) %печатаем массив myData в диапазоне 3:8 
fileID = fopen('records.dat','w');
fwrite(fileID,myData,'double');
fclose(fileID);

%Создаем MMF с View формата double с окном на файл 0...63
m_1_64 = memmapfile('records.dat',...
               'Offset',0,...
               'Format','double',...
               'Writable',true,...
               'Repeat', 64   );

%Создаем еще MMF с View формата double с окном на файл 64...128
m_65_128 = memmapfile('records.dat',...
               'Offset',64,...
               'Format','double',...
               'Writable',true,...
               'Repeat', 64);

%меняем значения, как в массиве
m_1_64.Data(1) = 123;
m_65_128.Data(8)= 643.219;

%проверяем, что записалось
fprintf('\n m_1_64.Data(1)=%f  m_65_128.Data(8)=%f', m_1_64.Data(1), m_65_128.Data(8))

окно вывода:
ans =

     3
     4
     5
     6
     7
     8

m_1_64.Data(1)=1.000000  m_65_128.Data(8)=10.000000
m_1_64.Data(1)=-123.321000  m_65_128.Data(8)=643.219000
 
Не, непонятные и бесполезные ответы лучше отдавать назад в личку.
 

А теперь, как использовать созданную в Matlab область памяти MMF из MQL5. Есть файл \MQL5\Include\WinAPI\memoryapi.mqh, в котором разработчики сделали для нас прямой доступ к памяти через Win API.

Я так полагаю, надо сначала запустить программу на Matlab, чтобы она создала в памяти блок, а потом через функцию открыть его через
HANDLE  OpenFileMappingW(uint dwDesiredAccess,int bInheritHandle,const string lpName);

Далее создать одну или несколько окон просмотра View через
PVOID   MapViewOfFile(HANDLE hFileMappingObject,uint dwDesiredAccess,uint dwFileOffsetHigh,uint dwFileOffsetLow,ulong dwNumberOfBytesToMap);
PVOID   MapViewOfFileEx(HANDLE hFileMappingObject,uint dwDesiredAccess,uint dwFileOffsetHigh,uint dwFileOffsetLow,ulong dwNumberOfBytesToMap,PVOID lpBaseAddress);

по завершении работы убрать за собой:

int     UnmapViewOfFile(const PVOID lpBaseAddress);
int     UnmapViewOfFileEx(PVOID BaseAddress,uint UnmapFlags);

На сайте есть статьи, поищите по memory mapping. Помню, есть статья, как использовать MMF без DLL. Тогда еще Матаквоты не сделали доступ к WinAPI и автор мучился с трудностями перевода сам. Но будет полезно. Еще для поднятия кармы Рихтера на ночь почитать "Windows для профессионалов".



OpenFileMappingW function (memoryapi.h) - Win32 apps
OpenFileMappingW function (memoryapi.h) - Win32 apps
  • 2018.12.05
  • karl-bridge-microsoft
  • docs.microsoft.com
Opens a named file mapping object.
 
Dmitry Fedoseev:
Не, непонятные и бесполезные ответы лучше отдавать назад в личку.

На эту бесполезную тему на сайте минимум три статьи. Но конечно, интереснее читать ветки "Если ли Грааль" и "Как брать гигантскую прибыль..." :))).  

 
Dmitry Fedoseev:
Не, непонятные и бесполезные ответы лучше отдавать назад в личку.

А вы оказались правы, ни одного вопроса или ответа по техническим вопросам. Зато во флеймовых темах все полный мяу - народ грызется насмерть. И тема по R абсолютно заглохола, никому это не надо. Позавчера написал в телегу один чел, не программист. Порезал личные данные, орфография сохранена. Читаю такое и мне становиться грустно, чел собирается купить индикатор за $250 на основе картинок, все в стиле Герчика - торговля на истории.

------

Пишет ***

я у *** все совы скупил толку нет

а щас этот рекламит

?)

т е вопрос возможно ли этот индикатор сделает ложный селл или бай по картинкам смотрю вроде ошибиться возможно

веть индикатор он быстрее работает чем цена

вообщем не знаю даже стоит ли вкладываться в этот индикатор который написан на пяти индикаторов

а он вот новый индикатор придумал

уже не советник которые ломаються

Alexey Volchanskiy, [17.08.20 09:37]

требуй тест на неделю

 

Был тут спор на Хабре про убогость синтаксиса Питона. Питонисты люто минусуют тех, кто допускает хоть малейшую критику языка. Но луч света еще пробивается в темном царстве закисших мозгов ))).

Зачем я это все пищу? У меня есть четкое ощущение, что сообщество программистов стремительно расслаивается. Вверх уходят молодые и умные, это пенка, 0.3%. Внизу бродит мелкими пузырьками основная масса. И где-то в стороне своим путем бредут олдскульщики типа меня.

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

 
Мне лично это нужно, но я ничего в этом не понимаю. Мне кажется эта тема сверх-сложной, и при этом, принесёт ли это значительную выгоду, это вопрос. Пока на обычных советниках, в будущем планирую перейти на нейросети. В инете находил инфу, что якобы нейро торгует в среднем на 7% лучше обычных трейдеров, непонятно, откуда это взято. Искал примеры конкретные и не нашел, ну кроме несерьёзных, типа без статистики там. Наверно сидят тихо те, кто сделали. Ну при беглом взгляде, похоже, что всё не так безоблачно, переобученность есть у сетей. Может есть какой то вариант для тугодумов быстро вкатиться? Пытался разобраться в математических выкладках, не разобрался и временно забросил. Я вообще не очень понял зачем там нужно кодирование. По моему можно без кодирования открытый алгоритм сделать, того же самого. Я даже пытался сформулировать алгоритм, но понял что там всё непросто,и тоже отложил. Хочу наладить что-то попроще пока.
 

" ... У меня есть четкое ощущение, что сообщество программистов стремительно расслаивается"

так всегда было и так всегда будет (ну или пока не нагрянет https://republic.ru/special/books-21/books/51 ) . Не помню точно в каком из подкастов на youtube канале Lex Fridman один из его гостей рассказывал про битвы между сторонниками первых высокоуровневых языков программирования и приверженцами ассембера. Не менее жаркие споры были при сражении за архитектуру процессоров RISC vs CISC 


Хорошая новость в том, что с такими мыслями приходит мудрость, плохая - за ней ковыляет старость )

RISC vs CISC Computer Architectures (David Patterson) | AI Podcast Clips with Lex Fridman
RISC vs CISC Computer Architectures (David Patterson) | AI Podcast Clips with Lex Fridman
  • 2020.06.29
  • www.youtube.com
Full episode with David Patterson (Jun 2020): https://www.youtube.com/watch?v=naed4C4hfAg Clips channel (Lex Clips): https://www.youtube.com/lexclips Main ch...
 
Ivan_Invanov:
Мне лично это нужно, но я ничего в этом не понимаю. Мне кажется эта тема сверх-сложной, и при этом, принесёт ли это значительную выгоду, это вопрос. Пока на обычных советниках, в будущем планирую перейти на нейросети. В инете находил инфу, что якобы нейро торгует в среднем на 7% лучше обычных трейдеров, непонятно, откуда это взято. Искал примеры конкретные и не нашел, ну кроме несерьёзных, типа без статистики там. Наверно сидят тихо те, кто сделали. Ну при беглом взгляде, похоже, что всё не так безоблачно, переобученность есть у сетей. Может есть какой то вариант для тугодумов быстро вкатиться? Пытался разобраться в математических выкладках, не разобрался и временно забросил. Я вообще не очень понял зачем там нужно кодирование. По моему можно без кодирования открытый алгоритм сделать, того же самого. Я даже пытался сформулировать алгоритм, но понял что там всё непросто,и тоже отложил. Хочу наладить что-то попроще пока.

Я Matlab использую на Форекс только для моделирования на основе скачанных тиковых данных. Можно бы и на R, в MT5 даже есть какая-то его поддержка, но я давно работаю с Matlab, а R знаю плохо. Вдобавок, если перевести программу Matlab в MEX или EXE файлы, скорость увеличивается в десятки раз. А эти два пакета хороши тем, что содержат кучу модулей по обработке данных, не надо ничего писать руками. Matlab можно легко подключить к советнику на MQL5, сделав из него 64-бит DLL. Единственный минус — отпадает Маркет, там DLL нельзя.

Насчет математики, не обязательно ее хорошо знать, главное, понимать суть, а что и как считается внутри пакета Matlab, все равно в большинстве случаев закрыто.

 

Я взаимодействие с матлабом решил на простой основе ;)

Написал сервис для MT5, который работает как сервер, а для матлаба на мехфайлах  врапперы вокруг этого, которые просто шлет сетевые запросы к этому сервису в MT5 со своим протоколом, который их и исполняет и возвращает результаты. Причем, сервис внутри MT5 еще и многопоточный. То есть может отрабатывать несколько запросов от нескольких матлабов одновременно. В смысле, учитывая многопоточность MT5, он одновремено именно несколько MT5 функций может вызывать из разных потоков.

Ну и обратное тоже реализовал в какой-то степени, когда внутри матлаба висит фоном сервис, и принимает всякое от MT5, когда  MT5 инициатор коммуникации: нотификации, команды на построение графиков и тд.

Вышла целая экосистема, этакий MT5-Matlab connector :)

 
antst:

Я взаимодействие с матлабом решил на простой основе ;)

Написал сервис для MT5, который работает как сервер, а для матлаба на мехфайлах  врапперы вокруг этого, которые просто шлет сетевые запросы к этому сервису в MT5 со своим протоколом, который их и исполняет и возвращает результаты. Причем, сервис внутри MT5 еще и многопоточный. То есть может отрабатывать несколько запросов от нескольких матлабов одновременно. В смысле, учитывая многопоточность MT5, он одновремено именно несколько MT5 функций может вызывать из разных потоков.

Ну и обратное тоже реализовал в какой-то степени, когда внутри матлаба висит фоном сервис, и принимает всякое от MT5, когда  MT5 инициатор коммуникации: нотификации, команды на построение графиков и тд.

Вышла целая экосистема, этакий MT5-Matlab connector :)

тестер стратегий не работает ?

если не работает, то не экосистема (((