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

JSON Serialization and Deserialization (native MQL) - библиотека для MetaTrader 5

Просмотров:
7752
Рейтинг:
(86)
Опубликован:
2015.08.18 12:07
Обновлен:
2018.01.08 15:27
\MQL5\Include\ \MQL5\Scripts\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++.

string in, out;
CJAVal js(NULL, jtUNDEF); bool b;

//---
Print("JASon Example Deserialization:");

in="{\"a\":[1,2]}"; out=""; // пример входных данных
b=js.Deserialize(in); // десериализовали
js.Serialize(out); // сериализовали назад
Print(in+" -> "+out); // вывели для сравнения

//---
Print("JASon Example Serialization:");

js["Test"]=1.4; // пример выходных данных
out=""; js.Serialize(out); // сериализовали
Print(out); // вывели посмотреть


Практичный пример: авторизация на сайте и парсинг ответа

CJAVal jv;
jv["login"]="Login"; // логин
jv["password"]="Pass"; // пароль

//--- сериализуем в строку  {"login":"Login","password":"Pass"}
char data[]; 
ArrayResize(data, StringToCharArray(jv.Serialize(), data, 0, WHOLE_ARRAY)-1);

//--- отправляем данные
char res_data[];
string res_headers=NULL;
int r=WebRequest("POST", "http://my.site.com/Authorize", "Content-Type: text/plain\r\n", 5000, data, res_data, res_headers);

//--- допустим в ответе {"accessToken":"ABRAKADABRA","session_id":124521}
//--- забираем AccessToken
jv.Deserialize(res_data);
string AccessToken=jv["accessToken"].ToStr();

Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL.

----

v1.02

  • В протокол добавлены функции Escape / Unescape экранирования при сериализации и деэкранирования при десериализации спецсимволов \\, \", \/, \b, \r, \n, \t, \f

v1.03

  • Добавлены функции "Add" для добавления элементов массива.

v1.04

  • Добавлено указание кодовой страницы строк при десериализации.

    ::Deserialize(res_data, CP_UTF8);

v1.05

  • Добавлено преобразование \uXXXX последовательности в символ.

v1.06

  • Добавлены оператор[] прямого доступа к элементам.
  • Добавлена функция копирования элемента.

v1.07

  • Исправлена ошибка компиляции в 1492 билде.

v1.08

  • Исправлен парсинг массива массивов (например { "a":[[1],[2]] } ).

v1.09

  • Добавлена возможность сериализовать double-числа с указанной точностью (по умолчанию было 8 знаков). Для этого добавлен параметр точности m_prec, который можно задавать как вручную так и при вызове конструктора или функции Add.
  • Исправлен баг в МТ4 из-за отличного от МТ5 поведения функции ArrayCopy (константа WHOLE_ARRAY различная).

v1.10

  • Добавлена функция int Size() для возврата количества элементов

v1.11

  • Исправлено дефолтное значение параметра m_prec (на =8) с учетом поведения функции DoubleToString :
    • Если значение m_prec лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой.
    • Если значение m_prec лежит в диапазоне от -1 до -16, то будет получено строковое представление числа в научном формате с указанным количеством знаков после запятой.
    • Во всех остальных случаях строковое представление числа будет содержать 8 знаков после запятой.

v1.12

  • Добавлен шаг резервированных элементов = 100 в ArrayResize.
  • В функцию Clear добавлены два параметра - дефолтный тип и сохранение имени ключа. Используется при заполнении массивов/объектов в функциях, чтобы не выполнять сброс типа или имени ключа объекта.
FX5_SelfAdjustingRSI_HTF FX5_SelfAdjustingRSI_HTF

Индикатор FX5_SelfAdjustingRSI с возможностью изменения таймфрейма индикатора во входных параметрах.

FX5_SelfAdjustingMomentum FX5_SelfAdjustingMomentum

Осциллятор Momentum с границами перекупленности/перепроданности в виде полос Боллинджера.

FX5_SelfAdjustingRVI FX5_SelfAdjustingRVI

Осциллятор RVI с границами перекупленности/перепроданности в виде полос Боллинджера.

FX5_SelfAdjustingMomentum_HTF FX5_SelfAdjustingMomentum_HTF

Индикатор FX5_SelfAdjustingMomentum с возможностью изменения таймфрейма индикатора во входных параметрах.