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

 
nav_soft:
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. Просторы интернета.


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

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

Сделал всё по инструкции, файлы поместил в указанные директории, но в результате вот такая картинка

При этом самая верхняя цифра меняется вслед за изменением котировок, однако ни чего не рисуется. Использую MATLAB 2009a, операционка - Vista. В чем может быть дело?

 
1Q2W3E4R5T:

В чем может быть дело?

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


Ответ:

Вариант 1(наилучший для Вас): Забыли поставить галочку в параметрах MT 4 "разрешить запуск Dll библиотек". Как устранить, смотри картинку:


Вариант 2(наихудший для Вас): Как я помню ОС Windows Vista имеет "на борту" улучшенный брандмауэр'c с системой контроля происхождения файлов... т.е. данная программа отслеживает от куда на жестком диске появилось ПО: *.exe; *.dll; *.bin . Данная система была введена для борьбы с основными типами flash, e-mail вирусов. Но к сожалению данная система построенна абсолютно без граммотно и поэтому "мочит" полезное ПО от "непрофессиональных" разработчиков, которые к своему обыкновению не получают сертификаты безопасности ПО от фирмы Micro$oft. Как устранить: см. инструкцию пользователя ОС Vista, раздел настройка брандмауэр, я лично не использую данную ось и ответить не могу.

 

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

Похоже, все таки на Вариант 2, так как галочка стоит, и я уже не первый раз замечаю подобную "заботу" со стороны Vist'ы, пришлось даже вырубить в ней UAK (проверка учетных записей). Буду разбираться. Спасибо за ответ. Если найду решение то здесь напишу.

 

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

Вобщем нашел я в чем дело. Vista тут не при чем, т.к. откомпиллированные примеры из самого MATLAB'а нормально запускаются причем из любой директории. А дело в том что MATLAB 2009a больше не поддерживает компиляторы Borland'а, о чем прямым текстом написано в справке самого MATLAB. И те *.lib файлы которые включены в проект больше не существуют в директории MATLAB'а. Пришлось перенести проект в VS 2008. И после небольшой адаптации под студию получился, на мой взгляд, странный результат. Вот сама картинка, но странность не в ней

Странность же заключается в том, что не появляется свернутое окно MATLAB Command Window, что, как я понимаю, должно происходить обязательно при запуске MATLAB Engine, но тогда как происходит обработка поступивших в dll данных? И если не происходит запуска MATLAB Engine, то почему не появляется сообщение об ошибке? Это я задаю вопросы скорее себе. Вы уже и так очень много сделали указав в каком направлении двигаться при организации связи MATLAB - MetaTrader. Но если будет не в лом, выскажите свои соображения, пожалуйста.

С уважением Дмитрий.

 
1Q2W3E4R5T:

1). То что вы видите на экране, это не фильтрованное значение осциллятора, которого я называю MARCI, правильное название осциллятор Геда (см. "THE ENCYCLOPEDIA OF TRADING STRATEGIES" JEFFREY OWEN KATZ), он основан на регрессивном канале. Если поковыряться в mql файле и отключить функцию фильтрации, то результат будет тот же. Без фильтрации рекомендуемый диапозон периода 350-650 баров и степень не выше 3. Сигналы как на MACD при уровне выше 0.5 - но много ложных срабатываний, если не фильтровать.

2). Обычно MT 4 не достает пользователя ненужными сообщениями типа: "Я не могу найти библиотеку..." и т.п. А по своему "молчаливому"(слава создателям!) обыкновению пишет это в журнале, но иногда этого не происходит...

3). Если не запустился MATLAB Command Window - это значит неверная *.lib взята для сборки, но это не большая беда... её можно устранить вручную(пишу примерные пути):

\\VS2008\bin\links32.exe - прога делает *.lib, понадобиться FAR manager или на крайний случай консоль win, делаем библиотеки на файлы(см. links32.exe /?):

\\ MATLAB\2009a\bin\win32\libeng.dll

\\ MATLAB\2009a\bin\win32\libmx.dll

\\ MATLAB\2009a\bin\win32\libmex.dll

4). Собираем проект. С помощью FAR manager смотрим на нашу Dll(нажми F3, а затем F4), приблизительно к конце файла(предпоследняя секция) распологается таблица экспортных имен, вот как она выглядит в моем файле:


Указанную секцию легко найти по названию Dll. Думаю, VS2008 сделал все возможное, чтобы искаверкать до неузнаваемости имена функций... перепиши их названия, далее как в статье.

P/S:

1). В статье забыл написать одно предостережение при использовании такой связки, в тестере стратегий при невизульном способе тестирования появиться "экран смерти" терминала. Использовать только ВИЗУАЛЬНОЕ тестирование!

2). В прикрепленном файле улучшенный НС-фильтр(файл MatLab, см. комментарий в файле), думаю Dll для него Вы сможете написать.

Удачи!

 

Спасибо за подробный ответ, теперь понятно в какую сторону двигаться. И правда, VS искажает имена экспортных функций, но *.def файл решает эту проблему. Я имена экспортных функций проверял с помощью Dependency Walker и имена в точности соответствую названиям функций в коде. Скорее всего проблема в пункте №3, т.е. в lib файлах. В эту сторону и буду рыть. Если решу проблему сообщу здесь. Спасибо за GRNNFilter, я сам часто использую GRNN сеть в своих m-файлах.

С уважением Дмитрий

 

Удалось запустить таки MATLAB Command Window, но тут же перестал рисоваться индикатор в MetaTradere. При этом, если вызвать из mql файла функцию ViewAnsFilter() то средствами ML отображается вот такя линия

Может быть проблема в mql файле? Должна ли вызываться в нем функция MakeBuffFilter() (просто она ни разу не вызывается)?

С уважением Дмитрий.

 
 

Всё, разобрался! Проект на VS2008 работает. Ещё раз спасибо.

С уважением Дмитрий.

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