English Русский Español
preview
Desenvolvendo um agente de Aprendizado por Reforço em MQL5 com Integração RestAPI(Parte 1): Usando RestAPIs em MQL5

Desenvolvendo um agente de Aprendizado por Reforço em MQL5 com Integração RestAPI(Parte 1): Usando RestAPIs em MQL5

MetaTrader 5Integração | 7 novembro 2023, 11:17
370 0
Jonathan Pereira
Jonathan Pereira

Introdução

Em programação e desenvolvimento de sistemas, a comunicação entre diferentes aplicativos desempenha um papel crucial. As APIs (Interfaces de Programação de Aplicativos) desempenham um papel importante nesse contexto, permitindo que os sistemas se comuniquem e compartilhem dados de forma eficiente. Um destaque é a RestAPI, que mudou a forma como os sistemas interagem na internet.

Uma RestAPI, ou Representational State Transfer Application Programming Interface, é um conjunto de regras que define como os sistemas devem se comunicar na internet. Ela se baseia em princípios de arquitetura simples e escalável, usando conceitos como recursos e identificadores para lidar com dados. Basicamente, é um meio de comunicação que permite que aplicativos solicitem e enviem informações de forma organizada.

A arquitetura REST surgiu nos anos 2000 com um artigo de Roy Fielding, que estabeleceu princípios para construir sistemas web sólidos e escaláveis. Desde então, as RestAPIs têm ganhado popularidade. Isso se deve à sua simplicidade em comparação com protocolos anteriores, como o SOAP (Simple Object Access Protocol).

O SOAP, baseado em XML, costumava ser dominante, mas era conhecido por ser complexo e exigir muitos dados para transações simples. As RestAPIs trouxeram uma mudança significativa, tornando-se uma alternativa mais leve e versátil para a comunicação entre sistemas.

As RestAPIs são versáteis e são amplamente usadas em diversos sistemas e aplicações. Sua simplicidade e aderência aos princípios do REST tornam possível criar sistemas escaláveis, integráveis e fáceis de manter. Elas têm um amplo uso em diversos setores, incluindo o financeiro.

Comparando com o protocolo SOAP, fica claro por que as RestAPIs conquistaram sua posição de destaque. Enquanto o SOAP era inflexível e pesado, as RestAPIs são leves, fáceis de usar e ideais para sistemas modernos que precisam de comunicação eficiente. Além disso, podem ser implementadas em praticamente qualquer linguagem de programação, tornando-as uma escolha ideal para desenvolvedores em todo o mundo.


O que é uma API?

whats is an api


Em um mundo cada vez mais conectado digitalmente, o termo "API" é amplamente utilizado, mas o que exatamente significa? A sigla "API" se refere a "Interface de Programação de Aplicativos" (em inglês, "Application Programming Interface"). Trata-se de um conceito fundamental no desenvolvimento de software e na integração de sistemas.

Em essência, uma API é um conjunto de regras e protocolos que permite que diferentes softwares se comuniquem entre si. Ela atua como uma ponte que permite que um programa utilize as funcionalidades de outro, sem a necessidade de entender todos os detalhes internos desse programa. As APIs são essenciais para a criação de aplicativos, pois permitem que os desenvolvedores utilizem recursos de terceiros ou mesmo de sistemas internos de maneira eficaz.

Vamos explorar mais a fundo os principais aspectos de uma API:

1. Comunicação entre Aplicativos:

Uma das funções mais importantes de uma API é a facilitação da comunicação entre diferentes aplicativos ou sistemas. Imagine que você está desenvolvendo um aplicativo de previsão do tempo e deseja incluir informações de previsão meteorológica em tempo real. Em vez de construir todo o sistema de previsão do tempo do zero, você pode usar uma API de um serviço de meteorologia existente. A API fornece um conjunto de instruções e métodos que seu aplicativo pode usar para solicitar dados meteorológicos atualizados.

2. Abstração de Complexidade:

As APIs permitem abstrair a complexidade subjacente de um sistema. Isso significa que, ao usar uma API, você não precisa entender todos os detalhes técnicos do sistema ou serviço com o qual está interagindo. Você simplesmente precisa saber como usar a API. Isso torna o desenvolvimento mais eficiente e permite que os desenvolvedores se concentrem em suas próprias tarefas, em vez de reinventar a roda a cada vez.

3. Tipos de APIs:

Existem vários tipos de APIs, como mencionado anteriormente. As APIs Web são amplamente usadas na internet e se baseiam em protocolos da web, como HTTP. As APIs locais fornecem acesso a recursos do sistema operacional ou middleware. As APIs de Programa são usadas para acessar componentes de programas remotos, e existem diversas tecnologias e padrões para implementá-las, como gRPC e REST. As APIs RESTful seguem os princípios do REST, enquanto as APIs SOAP são baseadas em XML e mais complexas. A API GraphQL é conhecida por sua flexibilidade em permitir que os clientes solicitem dados específicos.

4. Exemplos do Mundo Real:

Vamos considerar alguns exemplos do mundo real para entender como as APIs são usadas. Redes sociais como o Facebook ou o Twitter fornecem APIs que permitem que desenvolvedores integrem funcionalidades de compartilhamento ou autenticação em seus próprios aplicativos. Serviços de pagamento, como o PayPal, oferecem APIs que permitem a realização de transações financeiras. Até mesmo serviços de mapas, como o Google Maps, têm APIs que permitem a inclusão de mapas interativos em aplicativos.

5. Segurança e Autenticação:

As APIs muitas vezes incluem mecanismos de segurança para garantir que apenas aplicativos autorizados possam acessar os recursos. Isso pode envolver a geração de chaves de API, autenticação por token ou outros métodos de proteção de dados sensíveis.


O que é uma RestAPI?

api diagram


Antes de entrarmos no mundo das RestAPIs, era comum que os sistemas de software se comunicassem por meio de protocolos mais rígidos e complicados. A comunicação entre sistemas não era tão fluida, o que tornava a troca de informações entre diferentes aplicativos uma tarefa desafiadora.
Então, veio a era do REST, que trouxe consigo uma abordagem revolucionária para a comunicação entre sistemas. O REST, que significa Representational State Transfer, foi apresentado pela primeira vez por Roy Fielding em 2000. Essa abordagem inovadora de arquitetura de software se tornou a espinha dorsal das RestAPIs. O REST define um conjunto de princípios que orientam como os sistemas devem se comunicar, o que inclui o uso de URLs (Uniform Resource Locators) para identificar recursos e os métodos HTTP para interagir com esses recursos.

As RestAPIs desempenham um papel fundamental na maneira como os aplicativos e sistemas se comunicam na era digital. Elas permitem que um sistema solicite informações ou ações de outro sistema, tornando a troca de dados e funcionalidades mais eficiente e flexível.
Vamos imaginar um exemplo simples para ilustrar sua função. Suponha que você use um aplicativo de previsão do tempo em seu smartphone. Esse aplicativo precisa mostrar a você as informações mais recentes sobre a temperatura e as condições climáticas de sua localização atual. No entanto, ele não gera essas informações sozinho; ele obtém esses dados de um servidor remoto que coleta informações climáticas de várias fontes.

Aqui entra a RestAPI. Quando você abre o aplicativo de previsão do tempo, ele envia uma solicitação para o servidor remoto por meio de uma RestAPI. Essa solicitação, normalmente um pedido GET, pede informações sobre as condições climáticas da sua localização. O servidor processa a solicitação e responde, geralmente em formato JSON ou XML, com os dados climáticos solicitados. O aplicativo, então, usa esses dados para exibi-los em sua interface. O que torna as RestAPIs tão poderosas é a padronização da comunicação. Os sistemas podem se comunicar de forma confiável, sabendo que, se seguirem os princípios REST, as informações serão transmitidas de maneira consistente.

Exemplos de Uso:

Em aplicativos de redes sociais. Quando você carrega uma foto em sua plataforma social favorita, uma RestAPI cuida da transferência de dados para o servidor e, em seguida, torna essa foto acessível para que outros usuários a vejam. Essa interação é baseada em solicitações e respostas por meio de RestAPIs.



Principais Diferenças entre API e API REST

API vs API REST A Interface de Programação de Aplicativos (API) simplifica o processo de integração de várias aplicações, fornecendo códigos prontamente disponíveis e canais de informação para auxiliar os desenvolvedores na construção de soluções digitais robustas. A API age como mediadora entre as aplicações para simplificar a interação entre elas. No entanto, devido às diversas arquiteturas de aplicativos, as APIs podem ser de diferentes tipos, como Programa, Local, Web ou API REST.

API possibilita a conexão entre computadores ou programas de computador. Basicamente é uma Interface de Software que oferece serviços a outros softwares para aprimorar as funcionalidades necessárias. Nos últimos anos, as APIs ganharam popularidade no mercado para quase todas as aplicações web usam. Por exemplo, sempre que você verifica o clima ou reserva uma passagem de viagem no seu smartphone, uma API é chamada nos bastidores.

Como as APIs permitem que as empresas abram os dados e funcionalidades de suas aplicações para desenvolvedores externos de terceiros, isso eventualmente gera parcerias de negócios, aumentando a receita.


Tipos de API:

API Web:

  1. Arquitetura baseada na web, geralmente seguindo o estilo REST (Representational State Transfer).
  2. Comunicação através do protocolo HTTP.
  3. Pode ser usada para expor recursos e serviços pela internet.


API Local:

  1. Arquitetura específica para acesso a serviços locais ou recursos do sistema.
  2. Pode fornecer acesso a recursos do sistema operacional ou middleware.
  3. Pode estar disponível em sistemas operacionais diferentes, não se limitando a uma plataforma específica.
API de Programa:
  1. Baseada na tecnologia de Chamada de Procedimento Remoto (RPC), e inclui variações como gRPC, JSON-RPC, entre outras.
  2. Permite acessar componentes de programas remotos como se fossem locais, facilitando a comunicação entre sistemas distribuídos.
  3. Existem diferentes tecnologias e padrões para implementar APIs de Programa.
API RESTful:
  1. Arquitetura RESTful baseada nos princípios do REST, incluindo recursos, métodos HTTP e representação dos dados.
  2. Utiliza métodos HTTP padrão (GET, POST, PUT, DELETE) para realizar operações em recursos.
  3. Geralmente retorna dados em formato JSON ou XML.
API SOAP:
  1. Baseada em XML e segue o protocolo Simple Object Access Protocol (SOAP).
  2. Fornecem serviços altamente interoperáveis, com recursos avançados, como segurança e transações.
  3. Mais complexas do que as APIs RESTful.

API GraphQL:

  1. Utiliza uma linguagem de consulta flexível que permite que os clientes solicitem apenas os dados de que precisam.
  2. Permite que os clientes especifiquem a estrutura das respostas desejadas, tornando-o popular em aplicativos modernos.
  3. Não segue necessariamente uma arquitetura RESTful ou SOAP e é mais flexível em termos de consulta.


Protocolos e Arquitetura de API:

  1. XML-RPC: O protocolo XML-RPC foi criado para a troca de informações entre duas ou mais redes. O cliente realiza RPC usando XML para codificar suas chamadas e solicitações HTTP para transferência de dados.

  1. JSON-RPC: O JSON-RPC é um RPC leve codificado em JSON, semelhante ao XML-RPC, que permite notificações e chamadas múltiplas ao servidor, que podem ser respondidas de forma assíncrona.

  2. SOAP: O SOAP é um protocolo Web API estabelecido para a troca de informações estruturadas. Ele usa XML para autenticar, autorizar e comunicar processos em execução em sistemas operacionais. Uma vez que protocolos web como HTTP funcionam na maioria dos sistemas operacionais, o SOAP permite que os clientes invoquem serviços web e recebam respostas independentemente do idioma e da plataforma.

  3. REST: O Representational State Transfer (REST) é um estilo arquitetural para fornecer padrões entre sistemas na web. O REST não é um protocolo, nem uma biblioteca, nem uma ferramenta, tornando a comunicação entre sistemas fácil. A arquitetura REST torna a implementação do Cliente e do Servidor independentes, sem afetar o funcionamento do outro.


Compreensão da Necessidade de uma API:


  1. Automação A automação acelera os testes de API, aumentando assim a eficiência. A API não apenas une o mundo digital com sua natureza dinâmica, mas também permite que as empresas se tornem mais ágeis automatizando fluxos de trabalho.

  2. Integração A integração de plataformas e aplicativos pode ser feita usando APIs para aproveitar a comunicação contínua. Sem APIs, as empresas careciam de conectividade, o que reduzia proporcionalmente a produtividade e o desempenho. A integração de sistemas permite a movimentação de dados, facilitando a automação de fluxos de trabalho e melhorando a colaboração no local de trabalho.

  3. Eficiência A eficiência aumenta com a diminuição da intervenção humana. Fornecer acesso à API evita a duplicação de conteúdo, oferecendo maior flexibilidade às empresas para gastar tempo em inovação de qualidade.

  4. Segurança A segurança é um benefício adicional, pois a API adiciona uma camada extra de proteção entre seus dados e o servidor. No entanto, os desenvolvedores podem reforçar sua segurança usando tokens, assinaturas e criptografia de camada de transporte (TLS).


Introdução à API REST:


A API REST, abreviação para Interface de Programação de Aplicativos Representacional do Estado Transferido, é um modelo de arquitetura de software que estabelece diretrizes e padrões para a comunicação entre aplicativos e serviços na internet. Quando uma API segue estritamente os princípios da arquitetura REST, ela é frequentemente denominada API RESTful.

Uma das principais vantagens das APIs RESTful é a sua abordagem flexível para acessar serviços da web. Isso ocorre porque elas se baseiam em protocolos e métodos HTTP padrão, como GET, POST, PUT e DELETE, para realizar operações em recursos representados por URLs. Essa simplicidade na estrutura das solicitações torna mais acessível a interação com os serviços web, mesmo em dispositivos ou ambientes com recursos de processamento limitados.


Arquitetura REST :

  1. Ausência de Estado Os sistemas que seguem o paradigma REST estão obrigados a serem sem estado. Para a comunicação entre cliente e servidor, a restrição de ausência de estado faz com que os servidores permaneçam alheios ao estado do cliente e vice-versa. Uma restrição é aplicada usando recursos em vez de comandos, e eles são substantivos da web que descrevem qualquer objeto, documento ou coisa para armazenar/enviar para outros recursos.

  2. Compatível com Cache O cache ajuda os servidores a mitigar algumas restrições da ausência de estado. É um fator crítico que melhorou o desempenho das aplicações web modernas. O cache não apenas melhora o desempenho no lado do cliente, mas também oferece resultados significativos no lado do servidor. Um mecanismo de cache bem estabelecido reduzirá drasticamente o tempo médio de resposta do seu servidor.

  3. Desacoplado O REST é uma abordagem distribuída, na qual aplicativos cliente e servidor são desacoplados um do outro. Independentemente de onde as solicitações sejam iniciadas, a única informação que o aplicativo cliente conhece é o Identificador de Recurso Uniforme (URI) do recurso solicitado. Um aplicativo servidor deve passar os dados solicitados via HTTP, mas não deve tentar modificar o aplicativo cliente.

  4. Estratificado Um sistema estratificado torna a arquitetura REST escalável. Com a arquitetura RESTful, aplicativos cliente e servidor são desacoplados, de modo que as chamadas e respostas das APIs REST passam por camadas diferentes. Como a API REST é estratificada, ela deve ser projetada de forma que nem o cliente nem o servidor identifiquem sua comunicação com aplicativos finais ou intermediários.


Principais Benefícios da API REST:

  1. Flexibilidade A API REST é flexível com vários tipos de chamadas, como retornar diferentes formatos de dados e alterar estruturalmente com a implementação correta de hipermedia. Isso permite que os usuários se comuniquem de forma bidirecional com clientes e servidores, mesmo que eles estejam hospedados em servidores diferentes.

  2. Adaptável A API REST é adaptável a qualquer modificação feita nos dados que residem no banco de dados, mesmo quando hospedados em diferentes servidores de back-end e front-end. Como depende até certo ponto de códigos, ajuda a sincronizar dados em sites sem problemas.

  3. Facilidade de Compreensão Fluxo de Dados usando como utiliza métodos HTTP (GET, POST, PUT ou DELETE) para comunicação, esses métodos são autoexplicativos. Além disso, a arquitetura REST ajuda a aumentar a produtividade dos desenvolvedores, permitindo que eles exibam informações no lado do cliente e armazenem ou manipulem os dados no lado do servidor.


API vs API REST:

  1. Estrutura Enquanto estruturalmente a maioria das APIs segue o formato aplicativo-aplicativo, a API REST opera estritamente no conceito web de Cliente e Servidor. O Cliente e o Servidor estão separados um do outro, proporcionando mais flexibilidade.

  2. Design Geralmente, as APIs são arquiteturas leves projetadas para dispositivos limitados a dispositivos como smartphones. Em contraste, as APIs REST se comunicam por sistemas, tornando-se uma arquitetura mais complexa.

  3. Protocolo O principal objetivo da API é padronizar a troca de dados entre serviços web. Dependendo do tipo de API, a escolha do protocolo muda. Por outro lado, a API REST é um estilo arquitetural para a construção de serviços web que interagem por meio de um protocolo HTTP. Embora a API REST tenha sido formulada em 2000 pelo cientista da computação Roy Fielding, ela continua sendo o padrão ouro para APIs públicas.

  4. Suporte A maioria das APIs é fácil de implementar, pois não enfrenta a ausência de estado. Em contrapartida, a API REST é executada mesmo que os usuários não conheçam os nomes das funções e os parâmetros em uma ordem específica.

  5. Interface Uniforme Não muitas APIs desacoplam o cliente do servidor ou um aplicativo de outro. A API REST adere aos princípios de uma interface uniforme e proíbe o uso de interfaces múltiplas ou individuais dentro de uma API. Conexões de hipermídia devem ser usadas idealmente para distribuir uma única interface. Isso também deve garantir que uma parte de dados semelhante (por exemplo, o nome ou o endereço de e-mail de um usuário) pertença a apenas um identificador de recurso uniforme (URI). Como resultado, independentemente da solicitação inicial, todas as solicitações da API para os mesmos recursos devem parecer iguais.

  6. Escalabilidade Enquanto a escalabilidade é um problema para APIs gerais, a API REST tem uma estrutura estratificada, tornando-a modular e mais flexível para alcançar a escalabilidade.


Exemplos: Utilizando a função WebRequest em MQL5

Agora que já entramos no mundo das APIs e REST APIs, você deve estar curioso: "E onde o MQL5 entra nessa história?" Vamos lá, é hora de rolar as mangas e colocar as mãos na massa com exemplos práticos usando MQL5. Afinal, nada supera um bom exemplo prático, não é mesmo?

Para tornar os exemplos mais completos e interessantes, vamos trabalhar com o jsonplaceholder.typicode.com, e também trazer alguns endpoints da Coinbase.

A ideia é simples: vamos começar com as operações básicas de CRUD usando o jsonplaceholder – excelente para entender os básicos e fazer uns testes. Mas aí, subimos de nível e aplicamos esses conhecimentos no cenário mais movimentado e desafiador da API da Coinbase. Lá, temos tudo: cotações, dados históricos e até a possibilidade de entrar no mundo das operações de trading, tudo dependendo dos endpoints que acessarmos.

Vamos começar pelas operações de CRUD.

New Post - POST

int CreateNewPost(string title, string body, int userId)
  {
   uchar result[];
   string result_headers;
   string url = "https://jsonplaceholder.typicode.com/posts";

   char post_data[];
   StringToCharArray(StringFormat("{\"title\": \"%s\", \"body\": \"%s\", \"userId\": %d}", title, body, userId), post_data);

   string headers = "Content-Type: application/json\r\n";
   int timeout = 5000;

   int res = WebRequest("POST", url, headers, timeout, post_data, result, result_headers);

   if(res > 0)
     {
      Print("Post created successfully.");
     }
   else
     {
      Print("Error: Failed to create post.");
     }

   return -1;
  }

Update Post - PUT

bool UpdatePost(int postId, string newTitle, string newBody)
  {
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);

   char put_data[]; // Declare post_data as char[]
   StringToCharArray(StringFormat("{\"title\": \"%s\", \"body\": \"%s\"}", newTitle, newBody), put_data);

   string headers = "Content-Type: application/json\r\n"; // Declare headers as char[]
   int timeout = 5000;

   int res = WebRequest("PUT", url, headers, timeout, put_data, result, result_headers);

   if(res > 0)
     {
      Print("Post updated successfully.");
      return true;
     }
   else
     {
      Print("Error: Failed to update post.");
      return false;
     }
  }

Delete Post - DELETE

bool DeletePost(int postId)
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);
   int timeout = 5000;

   int res = WebRequest("DELETE", url, NULL, timeout, data, result, result_headers);

   if(res > 0)
     {
      Print("Post deleted successfully.");
      return true;
     }
   else
     {
      Print("Error: Failed to delete post.");
      return false;
     }
  }

Get Post - GET

string GetPostById(int postId)
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);
   int timeout = 5000;

   int res = WebRequest("GET", url, NULL, timeout, data, result, result_headers);

   if(res > 0)
     {
      CJAVal jv;
      if(jv.Deserialize(result))
        {
         string postTitle = jv["title"].ToStr();
         Print("Post title: ", postTitle);
         return postTitle;
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: Failed to fetch post.");
     }

   return "";
  }

 

Agora, imagine que você deseja verificar a cotação atual do Bitcoin (afinal, quem não gostaria, não é mesmo?). Além da cotação geral, talvez você esteja interessado no preço de compra, no preço de venda e no preço à vista (spot) do BTC. Vamos empregar a função WebRequest em MQL5 para obter essas informações de uma API:

string GetBitcoinPrice(string priceType)
  {
   char data[];
   uchar result[];
   string result_headers;

   string baseURL = "https://api.coinbase.com/v2/prices/";
   if(priceType == "buy")
      baseURL += "buy";
   else
      if(priceType == "sell")
         baseURL += "sell";
      else
         baseURL += "spot";

   string url = baseURL + "?currency=USD";
   char headers[];
   int timeout = 5000;
   int res;

   Print("Fetching Bitcoin price for type: ", priceType);
   res = WebRequest("GET", url, NULL, NULL, timeout, data, 0, result, result_headers);

   string price = "";
   if(res > 0)
     {
      Print("Response received from Coinbase API"); 

      CJAVal jv;
      if(jv.Deserialize(result))
        {
         price = jv["data"]["amount"].ToStr();
         Print("Price fetched: ", price);
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: No response from Coinbase API or an error occurred.");
     }

   return price;
  }


Ou deseja listar todas as moedas 

string GetAvailableCurrencies()
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = "https://api.coinbase.com/v2/currencies";
   char headers[];
   int timeout = 5000;
   int res;

   Print("Fetching list of available currencies from Coinbase API");
   res = WebRequest("GET", url, NULL, NULL, timeout, data, 0, result, result_headers);

   string currencies = "";
   if(res > 0)
     {
      Print("Response received from Coinbase API");

      CJAVal jv;
      if(jv.Deserialize(result))
        {
         // Considerando que a resposta é uma lista de moedas
         for(int i = 0; i < jv["data"].Size(); i++)
           {
            currencies += "Currency: " + jv["data"][i]["id"].ToStr();
            currencies += ", Name: " + jv["data"][i]["name"].ToStr();
            currencies += ", Min Size: " + jv["data"][i]["min_size"].ToStr();
            currencies += "\n";
           }
         Print(currencies);
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: No response from Coinbase API or an error occurred.");
     }

   return currencies;
  }


Agora que vimos a criação de todas as funções vamos roda-las para ver o resultado

#include "libraries/RESTFunctions.mqh"

int OnStart()
  {
//--- CRUD Operations on Posts ---//

// 1. Create a new post
   int userId = 1; // exemplo de userID, você pode ajustar conforme necessário
   string title = "Exemplo de Título";
   string body = "Este é o conteúdo do post para demonstração.";
   int newPostId = CreateNewPost(title, body, userId);
   if(newPostId != -1)
      Print("New Post ID: ", newPostId);

// 2. Update the created post
   string updatedTitle = "Título Atualizado";
   string updatedBody = "Conteúdo do post atualizado.";
   if(UpdatePost(newPostId, updatedTitle, updatedBody))
      Print("Post atualizado com sucesso.");

// 3. Get the updated post
   string fetchedTitle = GetPostById(newPostId);
   if(StringLen(fetchedTitle) > 0)
      Print("Título do Post Obtido: ", fetchedTitle);

// 4. Delete the post
   if(DeletePost(newPostId))
      Print("Post excluído com sucesso.");

//--- Coinbase Operations ---//

   const string buyPrice = GetBitcoinPrice("buy");
   const string sellPrice = GetBitcoinPrice("sell");
   const string spotPrice = GetBitcoinPrice("spot");

   Print("Buy Price: ", buyPrice);
   Print("Sell Price: ", sellPrice);
   Print("Spot Price: ", spotPrice);

   const string currencies = GetAvailableCurrencies();
   Print("Available Currencies: ", currencies);

//---
   return(INIT_SUCCEEDED);
  }

e como resultado vemos a seguinte saída:




Conclusão:

Em resumo, as APIs desempenham um papel fundamental no mundo da programação e desenvolvimento de sistemas, permitindo que diferentes aplicativos e sistemas se comuniquem de forma eficiente e flexível. As RestAPIs, baseadas na arquitetura REST, tornaram-se uma escolha popular devido à sua simplicidade e versatilidade em comparação com protocolos mais antigos, como o SOAP. Elas são amplamente utilizadas em uma variedade de setores, incluindo o financeiro, devido à sua capacidade de criar sistemas escaláveis, integráveis e fáceis de manter.

Uma API, ou Interface de Programação de Aplicativos, é essencial para facilitar a comunicação entre diferentes aplicativos, abstraindo a complexidade subjacente e permitindo que os desenvolvedores utilizem recursos de terceiros de maneira eficaz. Existem vários tipos de APIs, incluindo APIs Web, locais, de Programa, RESTful, SOAP e GraphQL, cada uma com suas próprias características e usos.

A API REST, por sua vez, segue um conjunto de princípios arquiteturais que a tornam flexível, adaptável e de fácil compreensão. Ela é especialmente adequada para a comunicação na web e utiliza o protocolo HTTP para realizar operações em recursos, retornando frequentemente dados em formato JSON ou XML.

Comparando APIs com APIs REST, podemos destacar que as APIs REST seguem uma estrutura mais estrita, desacoplam o cliente do servidor e operam principalmente no contexto web. Elas aderem a uma interface uniforme e promovem a escalabilidade por meio de sua estrutura estratificada.

Finalmente, ao aplicarmos esses conceitos em exemplos práticos usando MQL5, podemos entender como as APIs são usadas no mundo real, desde operações básicas de CRUD até a obtenção de dados financeiros usando a API da Coinbase.

Bem, pessoal, chegamos ao final deste papo todo sobre APIs, REST, MQL5 e tudo mais. Quero deixar bem claro que tudo o que foi dito até aqui é fruto da minha visão profissional, mas sempre com um olho atento aos detalhes, afinal, nunca se sabe quando um "bug" pode aparecer do nada! 

É importante lembrar que, no mundo da tecnologia, as coisas podem mudar rapidamente, então é sempre bom ficar de olho nas últimas tendências e atualizações. E claro, não custa nada dar aquela conferida para ter certeza de que tudo está funcionando como deveria.

Espero que este bate-papo tenha sido útil e esclarecedor para vocês. Lembre-se de que, mesmo com toda a tecnologia, uma boa dose de curiosidade sempre fazem a diferença no mundo da programação.

Agora, vá em frente e explore as possibilidades das APIs, crie suas próprias integrações e desenvolva sistemas incríveis. E lembre-se, se algo sair dos trilhos, não se preocupe, é assim que ganhamos experiência, não é mesmo? 

Fiquem à vontade para entrar em contato se tiverem mais dúvidas ou precisarem de ajuda. Estou aqui para ajudar no que for preciso.

Até a próxima, pessoal!

Arquivos anexados |
Parte_01.zip (431.78 KB)
Desenvolvimento de um Cliente MQTT para o MetaTrader 5: Metodologia TDD Desenvolvimento de um Cliente MQTT para o MetaTrader 5: Metodologia TDD
Este artigo apresenta a primeira tentativa de desenvolver um cliente MQTT nativo para o MQL5. MQTT é um protocolo de troca de dados no formato "publicador - assinante". Ele é leve, aberto, simples e projetado para ser facilmente implementado. Isso o torna aplicável em muitas situações.
Desenvolvendo um sistema de Replay (Parte 34): Sistema de Ordens (III) Desenvolvendo um sistema de Replay (Parte 34): Sistema de Ordens (III)
Vamos neste artigo concluir a primeira fase da construção. Será algo relativamente rápido, mas explicarei detalhes que podem não ter sido comentados no passado. Mas ainda assim aqui explicarei algumas coisas que muitos não entender por que são como são. Um destes casos é o Mouse. Você sabe o motivo de ter que pressionar a tecla Shift ou Ctrl no teclado ?!?!
Melhore seus gráficos de negociação com uma GUI interativa baseada em MQL5 (Parte I): GUI móvel (II) Melhore seus gráficos de negociação com uma GUI interativa baseada em MQL5 (Parte I): GUI móvel (II)
Libere todo o poder da representação de dados dinâmicos em suas estratégias de negociação ou utilitários com o nosso guia detalhado para desenvolver uma GUI móvel em MQL5. Mergulhe nos princípios fundamentais da programação orientada a objetos e aprenda a desenvolver e usar de forma fácil e eficiente uma ou mais GUIs móveis em um único gráfico.
Redes neurais de maneira fácil (Parte 48): métodos para reduzir a superestimação dos valores da função Q Redes neurais de maneira fácil (Parte 48): métodos para reduzir a superestimação dos valores da função Q
No artigo anterior, nós exploramos o método DDPG, projetado para treinar modelos em espaços de ação contínua. No entanto, como outros métodos de aprendizado Q, ele está sujeito ao problema da sobreavaliação dos valores da função Q. Esse problema geralmente leva eventualmente ao treinamento de um agente com uma estratégia não otimizada. Neste artigo, examinaremos algumas abordagens para superar o problema mencionado.