Примеры: Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - страница 2

 
nav_soft:
assol_7:

Уважаемый Андрей, Ваша статья очень своевременная, нужная. Однако хотелось бы если Вы уже начали эту тему и хорошо подготовлены в этой области что бы Вы продолжили тему и написали такой же подробный алгоритм как правильно совместить генерируемые МАТЛАБ библиотеки на С++ с МТ 4. Думаю что это помоголо бы многим.

Сергей.

Доброго времени суток Сергей!
Думаю это не такая уж тяжелая проблема. Принцип один, пишем свою Dll библиотеку переходник как в статье, только используем не MATLAB Engine, а собранную MATLAB'ом Dll, вот алгоритм:
Загрузка:

  1. MateTrader 4 вызывает в свое адресное пространство "Dll переходник".
  2. "Dll переходник" загружает в свое адресное пространство "MATLAB Dll".

Работа:

  1. MateTrader 4 вызывает функцию "Dll переходника" передает переменные.
  2. Функция "Dll переходника" создает переменную совместимую с типом MATLAB и копирует в неё переданные переменные из MetaTrader 4. Вызывает функцию "MATLAB Dll" и передает созданные переменные.
  3. Функция "Dll переходника" получает переменные от "MATLAB Dll" и получив указатели копирует в переменные MetaTrader 4, - "подмена".

Сборка проекта:

  1. Сначала генерируем MATLAB библиотеку.
  2. Создаем lib файл: в любом С++ компиляторе есть implib.exe - это программа создает библиотеку импорта, в данном случае для MATLAB Dll.
  3. Пишем заголовочный файл для библиотеки импорта
  4. Все подключаем к проекту "Dll переходника"

P/s: посмотри файлы проекта "Dll переходника", он хорошо комментирован и поэтому думаю понятен, по его образу можно переписать под твою задачу. К сожалению, без написания собственного "переходника" совместить MATLAB и MetaTrader не возможно.


Здравствуйте Андрей!

В принципе этот алгоритм мне понятен, но некоторые мои попытки его реализовать от недостатка зананий в нюансах не привели к положительному результату. Вот если бы Вас не затруднило опубликовать короткий примерчик с простой функцией МАТЛАБ это было бы здорово! Заранее благодарен, с уважением Сергей!

 
assol_7:


Здравствуйте Андрей!

В принципе этот алгоритм мне понятен, но некоторые мои попытки его реализовать от недостатка зананий в нюансах не привели к положительному результату. Вот если бы Вас не затруднило опубликовать короткий примерчик с простой функцией МАТЛАБ это было бы здорово! Заранее благодарен, с уважением Сергей!

Доброго времени суток! Как я Вас правильно понял Вы генерируете Dll библиотеку в среде MatLab, а затем пытаетесь С++ код адаптировать под условия MetaTrader 4? Хотелось бы уточнить, что Вы имеет под словами "не привели" и "нюансы", т.е. мне интересно узнать, что именно Вы хоте увидеть кроме рабочего кода. Просто, чтоб Вы сразу понимали меня правильно: нюансы это может быть и методика отлаки Dll, и выбор привильного алгоритма Dll, или что ещё... дело ведь в том, что это очень "пограничная" тема, и более связана с С++ и с MatLab, чем с MetaTrader 4, из-за этого думаю администрация этого сайта врят ли разместит данную статью, но это не значит, что на Ваш вопрос я не отвечу. Просто уточните... сразу скажу отвечу где-то в конце недели.

 

Андрей, спасибо за статью, очень интересная. Разложил файлы из вашего примера по указанным папкам: *.dll и *.m - файлы библиотеки и m-функции в каталог \Program Files\MetaTrader\experts\libraries и т.д. Но при запуске скрипта, который написал сам, появляется окошко. Приаттачил скрин-шот. Ещё не могли бы вы привести конкретный пример какого-ниубдь кода для Mql 4 с использованием dll?


 

Андрей, спасибо идею. Давно хотел связать МТ4 и Матлаб, но делал это через одно место (через БД, а не то, что вы подумали). Получилось, но на честном слове это всё работало.

А не могли бы вы приложить пример в .mq4, дабы посмотреть фильтр в действии?

 
denkir:

Андрей, спасибо за статью, очень интересная. Разложил файлы из вашего примера по указанным папкам: *.dll и *.m - файлы библиотеки и m-функции в каталог \Program Files\MetaTrader\experts\libraries и т.д. Но при запуске скрипта, который написал сам, появляется окошко. Приаттачил скрин-шот. Ещё не могли бы вы привести конкретный пример какого-ниубдь кода для Mql 4 с использованием dll?


Доброго времени суток! Вы видимо не используете Borland C++, это стандартная библиотека, я лично не знаю как избавить от подобных "довесков" при сборке проекта, поэтому качайте вложенный файл, извлекайте из архива и копируйте в папку Windows.
 
Daniil:

Андрей, спасибо идею. Давно хотел связать МТ4 и Матлаб, но делал это через одно место (через БД, а не то, что вы подумали). Получилось, но на честном слове это всё работало.

А не могли бы вы приложить пример в .mq4, дабы посмотреть фильтр в действии?

Дорого времени суток! Во первых спасибо, что нашли ошибку в статье, я просто забыл про mql файл, каюсь мая вина. Исправлю. Вот весь проекта, правда не MACD...
 
nav_soft:
Дорого времени суток! Во первых спасибо, что нашли ошибку в статье, я просто забыл про mql файл, каюсь мая вина. Исправлю. Вот весь проекта, правда не MACD...
Прицепил данных архив в формате ZIP к статье.
 

Андрей, большое спасибо за уточнения. Я действительно не пользуюсь Borland. Видимо поэтому не было библиотеки cc3260.dll. Её засунул в папку C:\WINDOWS\system32, и всё заработало. :-))

Буду дальше изучать связку MT < -- > Matlab.

 
nav_soft:
assol_7:


Здравствуйте Андрей!

В принципе этот алгоритм мне понятен, но некоторые мои попытки его реализовать от недостатка зананий в нюансах не привели к положительному результату. Вот если бы Вас не затруднило опубликовать короткий примерчик с простой функцией МАТЛАБ это было бы здорово! Заранее благодарен, с уважением Сергей!

Доброго времени суток! Как я Вас правильно понял Вы генерируете Dll библиотеку в среде MatLab, а затем пытаетесь С++ код адаптировать под условия MetaTrader 4? Хотелось бы уточнить, что Вы имеет под словами "не привели" и "нюансы", т.е. мне интересно узнать, что именно Вы хоте увидеть кроме рабочего кода. Просто, чтоб Вы сразу понимали меня правильно: нюансы это может быть и методика отлаки Dll, и выбор привильного алгоритма Dll, или что ещё... дело ведь в том, что это очень "пограничная" тема, и более связана с С++ и с MatLab, чем с MetaTrader 4, из-за этого думаю администрация этого сайта врят ли разместит данную статью, но это не значит, что на Ваш вопрос я не отвечу. Просто уточните... сразу скажу отвечу где-то в конце недели.

Здравствуйте Анрей!

Сначала в среде МАТЛАБ я генерирую библиотеку код на С++ файлами ".cpp",".h" и собственно саму DLL библиотеку. Полученная библиотека не может быть вызванна из МТ 4 так как представление функциий сгенерированной библиотеки не соответствует стандарту обеспечивающему соглашение о связях, принятое для функций Windows API с ключевым словом __stdcall. Почему-то внешний компилятор Microsoft Visual C++ .NET как в впрочем и имеющийся встроенный используемый в МАТЛАБ не генерирует функций с указанным ключевым словом. На форумах по этому вопросу все сходятся что нужно писать переходную библиотеку от библиотеки полученой из МАТЛАБ для МТ 4. Поэтому возникает два вопроса по направлению решения этой проблемы.

1. Как написать правильно переходную библиотеку, эту проблему Вы уже описали для Borland C++ Builder 6 и MATLAB Engine. Дополнительно рассмотреть вопрос вызова какой-то простой функции из сгенерированной в МАТЛАБ библиотеки через переходную библиотеку в МТ 4, на подробном примере!

2. Возможно ли внесение изменений в представление функций под стандарт МТ 4 в сгенерированых МАТЛАБ файлах ".cpp",''.h" для компиляции в дальнейшем единой библиотеки которая могла бы вызываться из МТ 4 и ели это возможно то рассмотреть на примере. Например для того же Borland C++ Builder 6.
С уважением Сергей.

 
assol_7:


1. Как написать правильно переходную библиотеку, эту проблему Вы уже описали для Borland C++ Builder 6 и MATLAB Engine. Дополнительно рассмотреть вопрос вызова какой-то простой функции из сгенерированной в МАТЛАБ библиотеки через переходную библиотеку в МТ 4, на подробном примере!

2. Возможно ли внесение изменений в представление функций под стандарт МТ 4 в сгенерированых МАТЛАБ файлах ".cpp",''.h" для компиляции в дальнейшем единой библиотеки которая могла бы вызываться из МТ 4 и ели это возможно то рассмотреть на примере. Например для того же Borland C++ Builder 6.
С уважением Сергей.

Доброго времени суток!

В моем распоряжении имеется MATLAB версии 7.4.0 (R2007a), который в отличии MATLAB версии 6.х.х (R2006a) не создает готовых исходников Dll библиотек, а создает свою переходную библиотеку и некий файл с псевдо-кодами. Все мои попытки запустить генерируемую MATLAB библиотеку окончились неудачно, возможно из-за MT 4, а может из-за моих "кривых рук"... все попытки окончились экранами краха терминала. Понять причину не удалось.

Возможно поможет литература по MATLAB :

1. М.Л. Подкур, П.Н. Подкур, Н.К. Смоленцев "Программирование в среде С++ Builder с математическими библиотеками MATLAB C/C++", ISBN 5-94074-310-2

2. Просторы интернета.

Причина обращения: