Примеры: Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
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. В чем может быть дело?
В чем может быть дело?
Доброго времени суток!
Ответ:
Вариант 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. Но если будет не в лом, выскажите свои соображения, пожалуйста.
С уважением Дмитрий.
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 работает. Ещё раз спасибо.
С уважением Дмитрий.