Пост посвящен технике использования .
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++
-
Дизайн, Продукт И Рок-Н-Ролл
19 Oct, 24 -
Запуск Игры На Android Tv
19 Oct, 24 -
Принципы Юзабилити Cms
19 Oct, 24 -
Experian Купила Hitwise За $240 Млн
19 Oct, 24 -
Fallout 3: Не Проходите Мимо!
19 Oct, 24