Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Memory Mapping - библиотека для MetaTrader 5
- Просмотров:
- 5200
- Рейтинг:
- Опубликован:
- 2012.01.13 07:34
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В проекте 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
Скрипт рассчитывает цену, по которой может произойти Stop Out (принудительное закрытие позиции) и цену, после которой значение Free Margin станет отрицательным.
MPCИндикатор MPC строит простейший канал по экстремумам за период. Предназначен для дополнительного визуального контроля торговой системы (пробой канала), основанной на индикаторе HighestLowestRange (HLR).
Пример использования DLL для работы с функциями File Mapping. В данном примере запущенный эксперт создает виртуальный файл в памяти и начинает обновлять в нем котировку символа. При запуске экспертов в других терминалах, эти эксперты открывают созданный файл и аналогично начинают обновлять свои котировки в нем. Таким образом, эксперты через один общий файл обмениваются своими котировками.
File Mapping без DLLКласс MQL5, который работает напрямую с маппингом, без использования самописной DLL.