Discussão do artigo "Dominando JSON: Crie Seu Próprio Leitor JSON do Zero em MQL5"

 

Novo artigo Dominando JSON: Crie Seu Próprio Leitor JSON do Zero em MQL5 foi publicado:

Experimente um guia passo a passo sobre como criar um parser JSON personalizado em MQL5, completo com manipulação de objetos e arrays, verificação de erros e serialização. Obtenha insights práticos para conectar sua lógica de trading e dados estruturados com esta solução flexível para lidar com JSON no MetaTrader 5.

Neste artigo, nosso objetivo é preencher essa lacuna demonstrando como criar seu próprio leitor JSON em MQL5. Ao longo do caminho, exploraremos os conceitos fundamentais da análise de JSON, passando pela criação de uma estrutura de classes flexível capaz de lidar com diferentes tipos de elementos JSON (como objetos, arrays, strings, números, booleanos e valores null). Nosso objetivo final é capacitá-lo a analisar confortavelmente strings JSON e acessar ou modificar os dados dentro delas, tudo a partir da conveniência do seu ambiente MetaTrader 5.

Seguiremos uma estrutura semelhante à que vimos em outros artigos relacionados ao MQL5, mas com foco específico na análise e uso de JSON. Este único artigo será dividido em cinco seções principais: uma introdução (a que você está lendo agora), um mergulho mais profundo nos fundamentos do JSON e como ele se encaixa no MQL5, um guia passo a passo para construir um parser JSON básico do zero, uma exploração de recursos avançados para manipulação de JSON e, por fim, uma listagem completa do código mais considerações finais.


Autor: Sahil Bagdi

 
Ah, há outro. Acho que é o quinto.
Bem, quando eu o tiver em mãos, farei um benchmark comparativo.
 

Comparei a velocidade de quatro bibliotecas, incluindo a ToyJson3 da MQL5Book. Como exemplo de json, peguei a resposta da Binance para "exchangeInfo" com o tamanho de 768 Kb. Quando a biblioteca a lê a partir de uma string, ela é analisada em sua totalidade, então seleciono um símbolo e leio todos os seus dados. Em um loop 100 vezes.

MetaTrader 5 x64 build 5370 started for MetaQuotes Ltd.
Windows 10 build 19045, 4 x AMD Ryzen 3 PRO 3200 GE w/ Radeon Vega, AVX2, 6 / 13 Gb memory, 241 / 427 Gb disk, UAC, GMT+3
cpu='AVX2 + FMA3'

Resultado (tempo de processamento da consulta):

99,5 ms - JAson 1.12(https://www.mql5.com/pt/code/13663)

85,5 ms - JAson 1.13

46,9 ms - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 ms - JSON(https://www.mql5.com/pt/code/53107)

1132 ms - JsonNode (esta biblioteca)

38 ms - minha implementação baseada em JSON

PS: Era uma vez uma outra biblioteca, muito simplificada, que parecia estar aparecendo aqui. Mas perdi o rastro dela.

PPS: Não publico o script para medição. O código está em uma forma completamente inestética.

 
Edgar Akhmadeev #:

Comparei a velocidade de quatro bibliotecas, incluindo a ToyJson3 da MQL5Book. Como exemplo de json, peguei a resposta da Binance para "exchangeInfo" com o tamanho de 768 Kb. Quando a biblioteca a lê a partir de uma string, ela é analisada em sua totalidade, então seleciono um símbolo e leio todos os seus dados. Em um loop de 100 vezes.

Resultado (tempo de processamento da consulta):

99,5 ms - JAson 1.12(https://www.mql5.com/pt/code/13663)

85,5 ms - JAson 1.13

46,9 ms - ToyJson3 (https://www.mql5.com/ru/forum/459079/page4#comment_57805801)

41 ms - JSON(https://www.mql5.com/pt/code/53107)

1132 ms - JsonNode (esta biblioteca)

38 ms - minha implementação baseada em JSON

PS: Era uma vez uma outra biblioteca, muito simplificada, que parecia estar aparecendo aqui. Mas eu a perdi de vista.

PPS: Não publico o script para medição. O código está em um formato completamente inestético.

Você poderia postar a string ou o arquivo json, por favor?
 
Alain Verleyen #:
Você poderia postar a cadeia de caracteres ou o arquivo json, por favor?

https://fapi.binance.com/fapi/v1/exchangeInfo

https://eapi.binance.com/eapi/v1/exchangeInfo

778 KB (796.729 bytes).

 
Alain Verleyen #:
Você poderia publicar a cadeia de caracteres ou o arquivo json, por favor?
Aqui está uma cópia da cadeia de caracteres obtida programaticamente da API.
Arquivos anexados:
 
Jonathan Pereira #:
h ttps:// www.mql5.com/ru/code/68596

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: MQL4/5-JsonLib

Alain Verleyen, 2025.12.20 22:49

2025.12.20 17:46:37.979 toyjson_bench (EURUSD,H1) ====== toyjson3 - Bench parsing ======
2025.12.20 17:46:39.187 toyjson_bench (EURUSD,H1) Deserialise 107652093 bytes JSON in 1101111 microseconds.
2025.12.20 17:46:39.187 toyjson_bench (EURUSD,H1) Check value = "Richard Sullivan"
2025.12.20 17:46:39.187 toyjson_bench (EURUSD,H1) Terminal memory used = 2738, MQL memory used = 2493 MB
Melhor.
 
test with Binance