Использование Dll В Meta Trader 4

Пост посвящен технике использования .

dll-ресурсов в MetaTrader4, а точнее в mql4. Данная методика позволяет оснастить аналитику и функционал МТ4 практически неограниченными возможностями, начиная от импорта результатов сложных расчетов (IMSL, MatLab) и заканчивая написанием собственной инфраструктуры, использующей МТ4 в качестве адаптера к брокеру.



Написание .

dll с использованием VS

Ресурсы в Интернете говорят, что необходимо создать .

dll MFC, что, во-первых, имеется не во всех версиях VS, а во-вторых, усложняет код ненужных инициализаций MFC. Для обучения напишем две функции: 1. Функция возвращает максимум из двойного массива.

2. Процедура сортирует массив.



Создание проекта
В MVS: Файл -> Новый проект -> Приложение Win32. В открывшемся окне: Далее -> Тип приложения: DLL -> Готово.

Далее укажем название проекта FxDll .

Мы сразу добавляем FxDll .

def-файл для нашего проекта и прописываем туда имена двух будущих функций:

LIBRARY @FxDll VERSION 0.1 EXPROTS __getMax __doSort

Советую перед названием добавить двойное подчеркивание, чтобы потом в МТ4 не путать внешние функции с внутренними.



Объявление функций
Добавьте в проект: FxDll .

h и объявим две наши функции:

__declspec(dllexport) double __stdcall __getMax(double* arr, const int size); __declspec(dllexport) void __stdcall __doSort(double* arr, const int size );

То, что стоит перед функцией, выглядит устрашающе, не будем это трогать, это не тема данной статьи — но это необходимость экспорта функции из dll. Добавление файла FxDll .

cpp и напишите функции:

double __stdcall _getMax(double* arr, const int size) { return *std::max_element(arr, arr + size) ; } void __stdcall __doSort(double* arr, const int size ) { std::sort(arr, arr + size); }

Понятно, что так дела не делаются, и нужно проверять на null, оборачивать исключения, и предоставить механизм переноса этого в МТ4, но, тем не менее, он будет работать с действительными данными.

Итак, наша C++-часть готова.

Надо сбить и положить FxDll .

dll файл в каталоге с программой.

/эксперты/библиотеки

Подготовка стороны MT4

И поэтому у нас есть FxDll .

dll, который находится в библиотеках.

Создаём файл .

mqh — он будет подтягивать нужные функции из dll.

//@FxDll.mqh #import "@FxDll.dll" double __getMax(double arr[], int); void __doSort(double &arr[], int); #import

В первой функции массив передается по значению и МТ4 не знает, что с ним происходит снаружи.

Во второй ссылке.

Не знаю, как это делается в МТ4, но, возможно, это имеет тот же смысл, что и в С++.

На этом описание задачи закончено.

У нас в МТ4 есть две функции, которые отправляют информацию на внешние ресурсы и получают результат. Включаем воображение и думаем, что можно сделать дальше.

Теги: #forex #metatrader #c plus plus #DLL-инъекция #C++

Вместе с данным постом часто просматривают: