DLL экспортирует такие функции:
#import "myNeuralNetworkFunction.dll" void myNeuralNetworkFunction( int nargout, mwArray& Y, mwArray& Xf, mwArray& Af, const mwArray& X, const mwArray& _U4b, const mwArray& _U4c ); bool mlxMyNeuralNetworkFunction( int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[] ); bool myNeuralNetworkFunctionInitialize(); bool myNeuralNetworkFunctionInitializeWithHandlers( mclOutputHandlerFcn error_handler, mclOutputHandlerFcn print_handler ); void myNeuralNetworkFunctionPrintStackTrace(); void myNeuralNetworkFunctionTerminate(); #import
Перед этим должен быть определён класс mwArray.
В функцию mlxMyNeuralNetworkFunction передаётся массив указателей на класс. Вы не сможете это сделать из MQL.
В функцию myNeuralNetworkFunctionInitializeWithHandlers передаются указатели на функцию. Это также не сделать из MQL.
Хотя вполне возможно, они Вам и не нужны.
DLL экспортирует такие функции:
Перед этим должен быть определён класс mwArray.
В функцию mlxMyNeuralNetworkFunction передаётся массив указателей на класс. Вы не сможете это сделать из MQL.
В функцию myNeuralNetworkFunctionInitializeWithHandlers передаются указатели на функцию. Это также не сделать из MQL.
Хотя вполне возможно, они Вам и не нужны.
я так понимаю, без промежуточной dll тут не обойтись? Т.е. нужно что-то, что соединит mql4 и матлабовскую dll.
Вы можете с этим помочь? А точнее можете помочь с шаблоном для VS2012, редактируя и компилируя который, можно получить необходимый коннектор?
P.S. Представление о программировании на С есть, но в данном случае его не достаточно.
Подозреваю, что необходима какая-то "обёртка".
Так и есть.
Может быть по этому пути лучше двигаться https://www.mql5.com/ru/articles/1567
?

- 2009.03.30
- Andrey Emelyanov
- www.mql5.com
Если вы сюда попали, значит у вас похожая проблема. Решить мне её не удалось, но нашёлся немного другой вариант. Немного криво и ректально, но работает. Можно всё организовать обменом через диск.
Пишем вот такую простую функцию в матлабе, не забывая менять пути на нужные вам.
a=0 while a==0 if exist ('E:\Program Files\Alpari Limited MT4\MQL4\Files\EURUSD.csv') ==2 n=load ('E:\Program Files\Alpari Limited MT4\MQL4\Files\EURUSD.csv') delete ('E:\Program Files\Alpari Limited MT4\MQL4\Files\EURUSD.csv') n=transpose(n) myNeuralNetworkFunction(n) save ('E:\Program Files\Alpari Limited MT4\MQL4\Files\ans.csv','ans','-ascii') end pause(1) end
Через while организуем бесконечный цикл.
exist - проверяет наличие файла на диске. ==2 - тип обнаруженной переменной "файл". Если файл не найден, то переходит к ближайшему end
load - загружает содержимое файла в переменную.
delete - удаляет файл, чтобы советник в МТ4 понял, что данные матлабом получены.
transpose - разворачивает матрицу. Т.к. МТ сохраняет данные в строчку, а матлаб из матрицы берёт данные в столбик.
myNeuralNetworkFunction - натренированная нейронная сеть сохраняется с таким названием по-умолчанию (необходимо после обучения нажать нужную кнопку).
save - сохраняет переменную в файл. Вызов нейронной сети сохраняет ответ по-умолчанию в переменную ans.
pause - задержка типа Sleep в mql4, измеряется в секундах. Ставится, чтобы не спамить диск обращениями.
Ещё нюанс - при работе в реалтайме эксперты сохраняют файлы в папку \MQL4\Files\, при запуске в тестере - \tester\files\
Чтобы не убить диск, лучше создать виртуальный диск в памяти и МТ поставить туда и обмен организовывать через него.
Чтобы прервать бесконечный цикл достаточно в Command Window нажать CTRL+BREAK

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я так понимаю, это задача типовая, но почему-то подробного описания нигде нет.
В Matlab создаётся функция (в данном случае нейронная сеть). С помощью Compiler создаётся dll, которую можно использовать только при установленном Matlab runtime (установлено). Дальше по идее эту dll можно подключить в эксперте и использовать. Вот тут и проблема. Подключить удалось, но не получается определить необходимую функцию и правильно передать/получить данные. При выводе ответа dll из эксперта на печать получается только "-nan(ind)".
Может кто-то помочь интегрировать какую-то из этих dll в эксперт? Они отличаются только компиляцией под разные платформы.
Исходные данные.
Есть Matlab 2014a, Visual Studio 2012 x32.
Подозреваю, что необходима какая-то "обёртка".
В dll лежит нейросеть, на входе данные типа double 100 шт, на выходе 1 переменная типа double.
Если нужны ещё какие-то данные - пишите.