Библиотека (dll): Shared Nodes Library (Библиотека разделяемых узлов) Обмен данными между советниками, индикаторами, скриптами и внешними программами
Наверное, очень полезная вещь.
Но: Что скажут Метаквоты?
Промахнулся разделом. Хотел запостить в MQL4 и MetaTrader 4.
Можно ли перенести?
@Алексей Тарабанов а что они могут сказать? Я же не вирей толкаю, а собственную разработку.
А что "под капотом" ?
самодельное хранилище или какой-нить windows post box ??
Библиотека реализует простой механизм обмена данными как внутри терминала (между советниками, индикаторами и скриптами), так и с внешними программами. Содержимое zip-архива:
- Файл библиотеки - SNL.dll
- Файл с #import секцией для MQL4
- Заготовка заголовочного файла для C/C++
п.с. позже дополню тему скринами.
Внешние программы должны быть написаны на C/C++? Почему не сделали реализацию под MT5?
Внешние программы должны быть написаны на C/C++? Почему не сделали реализацию под MT5?
Внешние программы могут быть написаны на любом языке. Главное, чтобы они умели подгружать библиотеки (DLL).
Эта библиотека не привязана к конкретной версии терминала. Можно обмениваться как внутри терминала, так и между терминалами, в том числе и между MT4 и МТ5. Ну и между внешними программами тоже. Преград нет. И все это одновременно, если требуется.
Внешние программы могут быть написаны на любом языке. Главное, чтобы они умели подгружать библиотеки (DLL).
Эта библиотека не привязана к конкретной версии терминала. Можно обмениваться как внутри терминала, так и между терминалами, в том числе и между MT4 и МТ5. Ну и между внешними программами тоже. Преград нет. И все это одновременно, если требуется.
Интересно, но не просто для применения.
- Файл библиотеки - SNL.dll
- Файл с #import секцией для MQL4
- Заготовка заголовочного файла для C/C++
п.с. позже дополню тему скринами.
Никто не будет пользоваться библиотекой без исходного кода
Библиотека реализует простой механизм обмена данными как внутри терминала (между советниками, индикаторами и скриптами), так и с внешними программами. Библиотека полностью "пассивная", т.е. не создает потоков/процессов, не использует динамически выделяемую память, не использует callback-функций . Из последнего следует, что контроль наличия новых пакетов остается исключительно на вашей совести. :)
Библиотека состоит из:
- 1000 общедоступных узлов для обмена данными. Объем каждого узла равен 1024 байта.
- 100 слотов на программу для сборки/разборки пакетов.
- Набор функций для сериализации/десериализации данных.
При использовании сериализации/десиализации данных действует правило очереди: первым вошел - первым вышел. Автор заранее открещивается от любых секретных данных полученных при кривой сериализации/десериализации. :)
Библиотека не имеет механизмов "уведомления" программ, использующих SNL. Тем не менее, для контроля доступности новых данных в конкретном узле используется быстрая функция SNL_CheckNode(...), позволяющая установить факт записи новых данных в конкретный узел.
Очень важно: для корректной работы с библиотекой все советники, индикаторы, скрипты и внешние программы должны подгружать библиотеку из одной директории. Например: "C:\Program Files\MT4\MQL4\SNL.dll".
Содержимое zip-архива:
- Файл библиотеки - SNL.dll
- Файл с #import секцией для MQL4
- Заготовка заголовочного файла для C/C++
п.с. позже дополню тему скринами.
Тема скорее всего будет удалена. Здесь не приветствуются DLLки без исходников.
Хотите поделиться, выкладывайте в котобазу вместе с исходниками.
Ничего сверхсекретного в них нет.
Тема скорее всего будет удалена.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Библиотека реализует простой механизм обмена данными как внутри терминала (между советниками, индикаторами и скриптами), так и с внешними программами. Библиотека полностью "пассивная", т.е. не создает потоков/процессов, не использует динамически выделяемую память, не использует callback-функций . Из последнего следует, что контроль наличия новых пакетов остается исключительно на вашей совести. :)
Библиотека состоит из:
При использовании сериализации/десиализации данных действует правило очереди: первым вошел - первым вышел. Автор заранее открещивается от любых секретных данных полученных при кривой сериализации/десериализации. :)
Библиотека не имеет механизмов "уведомления" программ, использующих SNL. Тем не менее, для контроля доступности новых данных в конкретном узле используется быстрая функция SNL_CheckNode(...), позволяющая установить факт записи новых данных в конкретный узел.
Очень важно: для корректной работы с библиотекой все советники, индикаторы, скрипты и внешние программы должны подгружать библиотеку из одной директории. Например: "C:\Program Files\MT4\MQL4\SNL.dll".
Механика обмена данными.
Прежде чем начинать любую деятельность с библиотекой, необходимо вызвать функцию SNL_Start(). В противном случае прием и отправка пакетов будут недоступны. Программа, использующая библиотеку, получает в свое распоряжение 100 слотов доступных только ей. В слотах производится только сборка/разборка пакетов.
Прежде чем начать собирать пакет, нужно получить номер свободного слота вызвав функции SNL_OpenSlot(), которая подготовит слот для сборки/разборки пакета и не позволит его выбрать повторно, пока слот не будет освобожден. Сборка пакета осуществляется функциями-сборщиками типа SNL_Pack***(...). После завершения сборки пакет можно отправить в открытый доступ в один или несколько узлов вызовом функции SNL_SendPack(...), передав ей номер узла и номер слота, который содержит пакет для отправки. Пакет будет храниться в узле до момента отправки нового пакета в этот узел. Т.е. чтение узла не стирает содержимое этого узла.
Для получения данных из открытого доступа используется функция SNL_RecvPack(...). В функцию нужно передать номер узла из которого нужно произвести чтение пакета. Функция возвращает номер слота в который бал помещен для разборки прочитанный пакет. Разборка пакета (извлечение данных) осуществляется функциями-разборщиками SNL_Unpack***(...). После разборки пакета нужно освободить слот, номер которого был возвращен функцией SNL_RecvPack(...). Для освобождения слота используется функция SNL_CloseSlot(...).
Список функций:
Возвращает максимальный размер пакета.
Возвращает объем свободного места в пакете в байтах.
Принимает номер слота (_slotid).
Открывает новый слот.
Возвращает номер слота (_slotid) в случае успеха, либо нуль, если открыть слот не удалось.
Записывает в пакет значение типа char.
Принимает номер слота (_slotid) и значение типа char.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа unsigned char.
Принимает номер слота (_slotid) и значение типа unsigned char.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа short.
Принимает номер слота (_slotid) и значение типа short.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа unsigned short.
Принимает номер слота (_slotid) и значение типа unsigned short.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа int.
Принимает номер слота (_slotid) и значение типа int.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа unsigned int.
Принимает номер слота (_slotid) и значение типа unsigned int.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа float.
Принимает номер слота (_slotid) и значение типа float.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет значение типа double.
Принимает номер слота (_slotid) и значение типа double.
Возвращает true в случае успешной записи, либо false, если запись не удалась.
Записывает в пакет произвольные данные.
Принимает номер слота (_slotid), указатель на данные (_*data), размер данных (_datasize), ключ обрезания данных (_cutter = false по-умолчанию).
Возвращает количество записанных байтов в случае успеха, либо нуль, если запись не была произведена.
Параметр (_cutter) управляет записью данных, объем которых превышает размер одного пакета (1024 байт):
- true - в пакет записывается часть произвольных данных и возвращается количество записанных байтов, либо нуль, если запись не удалась,
- false - запись данных производится только если данные помещаются в пакет целиком. Возвращает количество записанных байтов,
либо нуль, если данные не помещаются.
Отправляет пакет в заданный узел.
Принимает номер узла (_nodeid), номер слота отправляемого пакета (_slotid) и ключ освобождения слота (_closeslot = true по-умолчанию).
Возвращает true в случае успешной отправки пакета, либо false, если отправка пакета не удалась.
Параметр (_closeslot) отвечает за освобождение номера слота:
- true - слот освобождается,
- false -слот остается занятым (полезно, если один пакет нужно отправить в несколько узлов).
Проверяет узел на обновление данных.
Принимает номер узла (_nodeid).
Возвращает true, если данные обновились, либо false, если с момента последнего получения пакета обновления данных в узле не произошло.
Читает пакет из заданного узла.
Принимает номер узла (_nodeid).
Возвращает номер слота (_slotid) в который был помещен принятый пакет.
Определяет достигнут ли конец пакета при извлечении данных.
Принимает номер слота (_slotid).
Возвращает true, если конец пакета достигнут, либо false, если пакет еще содержит данные.
Извлекает из пакета значение типа char.
Принимает номер слота (_slotid).
Возвращает значение типа char.
Извлекает из пакета значение типа unsigned char.
Принимает номер слота (_slotid).
Возвращает значение типа unsigned char.
Извлекает из пакета значение типа short.
Принимает номер слота (_slotid).
Возвращает значение типа short.
Извлекает из пакета значение типа unsigned short.
Принимает номер слота (_slotid).
Возвращает значение типа unsigned short.
Извлекает из пакета значение типа int.
Принимает номер слота (_slotid).
Возвращает значение типа int.
Извлекает из пакета значение типа unsigned int.
Принимает номер слота (_slotid).
Возвращает значение типа unsigned int.
Извлекает из пакета значение типа float.
Принимает номер слота (_slotid).
Возвращает значение типа float.
Извлекает из пакета значение типа double.
Принимает номер слота (_slotid).
Возвращает значение типа double.
Извлекает произвольные данные из пакета в заданный буфер.
Принимает номер слота (_slotid), указатель на буфер (_databuf), объем буфера (_databufsize) в байтах.
Возвращает количество прочитанных байтов, либо нуль, если пакет не содержит данных.
Возвращает каретку чтения в начало пакета.
Принимает номер слота (_slotid).
Возвращает true в случае успешного возврата, либо false, если возврат каретки чтения не произошел.
Возвращает каретку записи в начало пакета.
Принимает номер слота (_slotid).
Возвращает true в случае успешного возврата, либо false, если возврат каретки записи не произошел.
Освобождает слот. Содержимое пакета будет утеряно.
Принимает номер слота (_slotid).
Инициализация библиотеки SNL.
Инициализация происходит только при первом вызове функции. Повторные вызовы эффекта не имеют и на функционирование библиотеки не влияют.
Пример реализации простой функции для передачи unicode-строки:
Пример реализации простой функции для приема unicode-строки:
Содержимое zip-архива:
п.с. позже дополню тему скринами.