Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Memory Mapping - библиотека для MetaTrader 5

Просмотров:
5107
Рейтинг:
(36)
Опубликован:
2012.01.13 07:34
Обновлен:
2016.11.22 07:33
memmap32.zip (754.96 KB)
memmapdll.zip (29.22 KB)
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

В проекте Visual C++ 2010 два класса - CMemMapApi и CMemMapFile.

Они выполняют одну и ту же функцию – работа с виртуальной памятью (Memory Mapping) в стиле обычной работы с файлами.

  • Cоздавать файл в памяти;
  • Записывать и читать из него данные;
  • Возможность обмениваться данными между приложениями. В том числе между МetaТrader 4 и МetaТrader 5.
При работе с памятью вы получаете большой выигрыш в скорости обмена информацией.

В качестве основного применения – это конечно обмен информацией:
  • В копировщиках сделок между терминалами одного компьютера
  • Обмен котировками для создание арбитражных экспертов и т.д.

Но вы можете использовать ее и для временного хранения данных экспертов.

Отличие классов CMemMapFile от CMemMapApi в том, что CMemMapApi является просто оберткой WinApi функций.

Удобство CMemMapFile в том, что он хранит имя файла, хендл и текущую позицию чтения/записи и он сам выполняет все требуемые проверки по размеру файла.
Но объект CMemMapApi может обрабатывать сразу несколько файлов памяти, а объект CMemMapFile работает только с одним файлом.

В текущем проекте DLL все экспортируемые функции берутся именно из CMemMapApi, для организации работы с несколькими файлами памяти.
Класс CMemMapFile сделан для работы с памятью в других C++ проектах.

Экспортируемые функции из DLL:
int MemOpen(string path,int size,int mode,int &err[]);                // открывает/создает файл в памяти, возвращает хендл
void MemClose(int hmem);                                              // закрывает файл в памяти
int MemGrows(int hmem,string path,int newsize,int &err[]);            // увеличивает размер файла в памяти
int MemGetSize(int hmem, int &err[]);                                    // возвращает размер файла в памяти
int MemSetSize(int hmem, int size, int &err[]);                      // устанавливает размер файла в памяти
int MemWrite(int hmem,int &v[], int pos, int size, int &err[]);       // запись вектора v в память с указанной позиции pos, размером size
int MemRead(int hmem, int &v[], int pos, int size, int &err[]);       // чтение вектора v с указанной позиции pos размером size
int MemWriteStr(int hmem, string buf, int pos, int size, int &err[]); // запись данных в память с указаной позиции на указанное число байт
int MemReadStr(int hmem, string buf, int pos, int &size, int &err[]); // чтение данных из памяти с указаной позиции на указанное число байт

Примеры использования DLL в МetaТrader 5 - Мониторинг котировок (пример для маппинга)

Исправлена работа функции MemWriteStr


StopOutPrice StopOutPrice

Скрипт рассчитывает цену, по которой может произойти Stop Out (принудительное закрытие позиции) и цену, после которой значение Free Margin станет отрицательным.

MPC MPC

Индикатор MPC строит простейший канал по экстремумам за период. Предназначен для дополнительного визуального контроля торговой системы (пробой канала), основанной на индикаторе HighestLowestRange (HLR).

Мониторинг котировок (пример для маппинга) Мониторинг котировок (пример для маппинга)

Пример использования DLL для работы с функциями File Mapping. В данном примере запущенный эксперт создает виртуальный файл в памяти и начинает обновлять в нем котировку символа. При запуске экспертов в других терминалах, эти эксперты открывают созданный файл и аналогично начинают обновлять свои котировки в нем. Таким образом, эксперты через один общий файл обмениваются своими котировками.

File Mapping  без DLL File Mapping без DLL

Класс MQL5, который работает напрямую с маппингом, без использования самописной DLL.