English Русский 中文 Deutsch 日本語 Português
preview
Cómo desarrollar un agente de aprendizaje por refuerzo en MQL5 con Integración RestAPI (Parte 1): Como usar RestAPIs en MQL5

Cómo desarrollar un agente de aprendizaje por refuerzo en MQL5 con Integración RestAPI (Parte 1): Como usar RestAPIs en MQL5

MetaTrader 5Integración | 3 abril 2024, 09:29
290 0
Jonathan Pereira
Jonathan Pereira

Introducción

En programación y desarrollo de sistemas, la comunicación entre diferentes aplicaciones juega un papel importante. Las APIs (application programming interface) desempeñan un papel importante en este contexto, ya que permiten que los sistemas se comuniquen y compartan datos de forma eficiente. Una de las más destacadas es RestAPI, que ha cambiado la forma en que los sistemas interactúan en Internet.

Una RestAPI (representational state transfer application programming interface) es un conjunto de reglas que define cómo los sistemas deben comunicarse en internet. Se basa en principios de arquitectura simple y escalable, además usa conceptos como recursos e identificadores para manejar datos. Básicamente, es un medio de comunicación que les permite a las aplicaciones solicitar y enviar información de forma organizada.

La arquitectura REST surgió en los años 2000 con un artículo de Roy Fielding, que estableció los principios para construir sistemas web sólidos y escalables. Desde entonces, las RestAPIs han ganado popularidad. Esto se debe a su simplicidad en comparación con protocolos anteriores, como SOAP (Simple Object Access Protocol).

SOAP, basado en XML, solía ser dominante, pero era conocido por ser complejo y requerir muchos datos para transacciones simples. Las RestAPI han supuesto un cambio significativo, ya que se han convertido en una alternativa más ligera y versátil para la comunicación entre sistemas.

Las RestAPIs son versátiles y son ampliamente usadas en diversos sistemas y aplicaciones. Su sencillez y su adhesión a los principios REST permiten crear sistemas escalables, integrables y fáciles de mantener. Tienen un amplio uso en diversos sectores, incluyendo el financiero.

Si las comparamos con el protocolo SOAP, queda claro por qué las RestAPIs han conquistado su posición de destaque. Mientras que el SOAP era inflexible y engorroso, las RestAPIs son ligeras, fáciles de usar e ideales para sistemas modernos que necesitan de comunicación eficiente. Además, pueden ser implementadas en prácticamente cualquier lenguaje de programación, lo que las convierte en la opción ideal para desarrolladores de todo el mundo.


¿Qué es una API?

whats is an api


En un mundo cada vez más conectado digitalmente, el término "API" está muy extendido, pero ¿qué significa exactamente? La sigla "API" se refiere a "interfaz de programación de aplicaciones" (en inglés, "application programming interface"). Es un concepto fundamental en el desarrollo de software y en la integración de sistemas.

En esencia, una API es un conjunto de reglas y protocolos que permite que diferentes softwares se comuniquen entre sí. Actúa como un puente que permite que un programa utilice las funcionalidades de otro, sin la necesidad de entender todos los detalles internos de ese programa. Las APIs son esenciales para la creación de aplicaciones, ya que permiten que los desarrolladores utilicen recursos de terceros o incluso de sistemas internos de manera eficaz.

Vamos explorar más a fondo los principales aspectos de una API:

1. Comunicación entre aplicaciones:

Una de las funciones más importantes de una API es facilitar la comunicación entre distintas aplicaciones o sistemas. Imagina que estás desarrollando una aplicación de pronóstico del tiempo y deseas incluir información meteorológica en tiempo real. En lugar de construir todo el sistema de pronóstico meteorológico desde cero, puedes utilizar una API de un servicio meteorológico existente. La API proporciona un conjunto de instrucciones y métodos que tu aplicación puede usar para solicitar datos meteorológicos actualizados.

2. Abstracción de la complejidad:

Las APIs permiten abstraer la complejidad subyacente de un sistema. Esto significa que, al usar una API, no necesitas entender todos los detalles técnicos del sistema o servicio con el cual estás interactuando. Simplemente necesitas saber cómo usar la API. Esto hace que el desarrollo sea más eficiente y permite que los desarrolladores se concentren en sus propias tareas, en vez de reinventar la rueda cada vez.

3. Tipos de APIs:

Existen varios tipos de APIs, como se mencionó anteriormente. Las APIs Web son ampliamente usadas en internet y se basan en protocolos web, como HTTP. Las APIs locales proporcionan acceso a recursos del sistema operativo o middleware. Las APIs de programa se usan para acceder a componentes de programas remotos, además, existen diversas tecnologías y estándares para implementarlas, como gRPC y REST. Las APIs RESTful siguen los principios de REST, mientras que las APIs SOAP se basan en XML y son más complejas. La API GraphQL, por ejemplom, es conocida por su flexibilidad en permitir que los clientes soliciten datos específicos.

4. Ejemplos del mundo real:

Veamos algunos ejemplos reales para entender cómo se utilizan las API. Las redes sociales como Facebook o Twitter ofrecen APIs que permiten a los desarrolladores integrar funcionalidades para compartir contenido o autenticarse en sus propios aplicativos. Los servicios de pago, como PayPal, ofrecen APIs que permiten realizar transacciones financieras. Incluso algunos servicios de mapas, como Google Maps, tienen APIs que permiten incluir mapas interactivos en aplicaciones.

5. Seguridad y autenticación:

Las APIs a menudo incluyen mecanismos de seguridad para asegurar que solo las aplicaciones autorizadas puedan acceder a los recursos. Esto puede involucrar la generación de claves de API, autenticación por token u otros métodos de protección de datos sensibles.


¿Qué es una RestAPI?

api diagram


Antes de entrar en el mundo de las RestAPIs, era común que los sistemas de software se comunicaran mediante protocolos más rígidos y complicados. La comunicación entre sistemas no era tan fluida, lo que hacía que el intercambio de información entre diferentes aplicaciones fuera una tarea desafiante.
Entonces, llegó la era de REST, que trajo consigo un enfoque revolucionario para la comunicación entre sistemas. REST, que son las siglas de representational state transfer, fue presentado por primera vez por Roy Fielding en 2000. Este enfoque innovador de arquitectura de software se ha convertido en la columna vertebral de las RestAPIs. El REST define un conjunto de principios que orientan cómo los sistemas deben comunicarse, lo que incluye el uso de URLs (uniform resource locators) para identificar recursos y los métodos HTTP para interactuar con los mismos.

Las RestAPIs desempeñan un papel fundamental en la manera cómo las aplicaciones y sistemas se comunican en la era digital. Ellas permiten que un sistema solicite información o acciones de otro sistema, lo que hace al intercambio de datos y funcionalidades más eficiente y flexible.
Vamos a imaginar un ejemplo simple para ilustrar su función. Supongamos que usas una aplicación de pronóstico del tiempo en tu smartphone. Esta aplicación tiene que mostrarte la información más reciente sobre la temperatura y las condiciones meteorológicas de tu ubicación actual. Sin embargo, ella no genera esa información por sí sola; obtiene esos datos de un servidor remoto que recopila informaciones climáticas de varias fuentes.

Aquí es donde entra la RestAPI. Cuando abres la aplicación de pronóstico del tiempo, ella envía una solicitud al servidor remoto por medio de una RestAPI. Esta solicitud, normalmente de tipo GET, pide información sobre las condiciones meteorológicas de tu ubicación. El servidor procesa la solicitud y responde, generalmente en formato JSON o XML, con los datos meteorológicos solicitados. La aplicación, entonces, usa estos datos para mostrarlos en su interfaz. Lo que hace que las RestAPIs sean tan poderosas es la estandarización de la comunicación. Los sistemas pueden comunicarse de forma confiable, en otras palabras, saben que, si siguen los principios REST, la información será transmitida de manera consistente.

Ejemplos de uso:

En aplicaciones de redes sociales. Cuando subes una foto a tu plataforma social favorita, una RestAPI se encarga de la transferencia de datos al servidor y, luego, hace que esa foto esté accesible para que otros usuarios la vean. Esta interacción se basa en solicitudes y respuestas a través de RestAPIs.



Principales diferencias entre API y API REST

La interfaz de programación de aplicaciones (API) simplifica el proceso de integración de muchas aplicaciones, por eso proporciona códigos listos y canales de información para asistir a los desarrolladores en crear soluciones digitales robustas. La API actúa como mediadora entre las aplicaciones para simplificar la interacción entre ellas. Sin embargo, debido a las diversas arquitecturas de aplicaciones, las APIs pueden ser de diferentes tipos, como de programa, local, web o API REST.

La API permite conectar computadoras o programas de computador. Básicamente es una Interfaz de software que ofrece servicios a otros softwares para mejorar las funcionalidades requeridas. En los últimos años, las APIs han ganado popularidad en el mercado pues casi todas las aplicaciones web las usan. Por ejemplo, siempre que consultas el clima o reservas un boleto de viaje en tu smartphone, una API es llamada en los bastidores.

Como las APIs permiten que las empresas abran los datos y funcionalidades de sus aplicaciones a desarrolladores externos de terceros, esto eventualmente genera asociaciones empresariales, lo cual genera una renta creciente.


Tipos de API

API Web

  1. Arquitectura basada en la web, generalmente siguiendo el estilo REST (representational state transfer).
  2. Comunicación a través del protocolo HTTP.
  3. Puede ser usada para exponer recursos y servicios por internet.


API Local

  1. Arquitectura específica para acceso a servicios locales o recursos del sistema.
  2. Puede proporcionar acceso a recursos del sistema operativo o middleware.
  3. Puede estar disponible en diferentes sistemas operativos y no se limita a una plataforma específica.
API de Programa
  1. Basada en la tecnología de llamada a procedimiento remoto (RPC), e incluye variaciones como gRPC, JSON-RPC, entre otras.
  2. Permite acceder a componentes de programas remotos como si fueran locales, con lo cual facilita la comunicación entre sistemas distribuidos.
  3. Existen diferentes tecnologías y estándares para implementar APIs de Programa.
API RESTful
  1. Arquitectura RESTful basada en los principios del REST, incluyendo recursos, métodos HTTP y representación de los datos.
  2. Utiliza métodos HTTP estándar (GET, POST, PUT, DELETE) para realizar operaciones sobre los recursos.
  3. Generalmente retorna datos en formato JSON o XML.
API SOAP
  1. Se basa en XML y sigue el protocolo SOAP (simple object access protocol).
  2. Proporcionan servicios altamente interoperables, con características avanzadas como seguridad y transacciones.
  3. Más complejas que las APIs RESTful.

API GraphQL

  1. Utiliza un lenguaje de consulta flexible que permite a los clientes solicitar solo los datos que necesitan.
  2. Permite a los clientes especificar la estructura de las respuestas deseadas, lo que la hace popular en las aplicaciones modernas.
  3. No sigue necesariamente una arquitectura RESTful o SOAP y es más flexible en términos de consulta.


Protocolos y arquitectura API

  1. XML-RPC: este protocolo fue creado para el intercambio de información entre dos o más redes. El cliente realiza RPC usando XML para codificar sus llamadas y solicitudes HTTP para la transferencia de datos.

  1. JSON-RPC: se trata de un RPC ligero codificado en JSON, similar a XML-RPC, que permite notificaciones y llamadas múltiples al servidor, que pueden ser respondidas de forma asíncrona.

  2. SOAP: es un protocolo Web API establecido para el intercambio de información estructurada. Utiliza XML para autenticar, autorizar y comunicar procesos que se ejecutan en sistemas operativos. Dado que protocolos web como HTTP funcionan en la mayoría de los sistemas operativos, SOAP permite que los clientes invoquen servicios web y reciban respuestas independientemente del lenguaje y la plataforma.

  3. REST: es un estilo arquitectónico para proporcionar estándares entre sistemas en la web. Como no es ni un protocolo, ni una biblioteca, ni una herramienta, facilita la comunicación entre sistemas. La arquitectura REST hace que la implementación del Cliente y del Servidor sean independientes, sin afectar el funcionamiento del otro.


Comprender la necesidad de una API


  1. Automatización.— La automatización acelera las pruebas de API y, así, aumenta la eficiencia. La API no solo une el mundo digital con su naturaleza dinámica, sino que también permite que las empresas se vuelvan más ágiles gracias a la automatización de flujos de trabajo.

  2. Integración.— La integración de plataformas y aplicaciones puede hacerse mediante APIs para aprovechar la comunicación continua. Sin APIs, las empresas carecían de conectividad, lo que reducía proporcionalmente la productividad y el rendimiento. La integración de sistemas permite el movimiento de datos, para facilitar la automatización de flujos de trabajo y mejorar la colaboración en el lugar de trabajo.

  3. Eficiencia.— La eficiencia aumenta con la disminución de la intervención humana. Proporcionar acceso a la API evita la duplicación de contenido, lo que da a las empresas mayor flexibilidad para dedicar tiempo en innovación de calidad.

  4. Seguridad.— La seguridad es un beneficio adicional, ya que la API añade una capa extra de protección entre tus datos y el servidor. Sin embargo, los desarrolladores pueden reforzar tu seguridad mediante tokens, firmas y cifrado de capa de transporte (TLS).


Introducción a la API REST:


La API REST, o interfaz de programación de aplicaciones representacional del estado transferido, es un modelo de arquitectura de software que establece directrices y estándares para la comunicación entre aplicaciones y servicios en internet. Cuando una API sigue estrictamente los principios de la arquitectura REST, se denomina a menudo API RESTful.

Una de las principales ventajas de las APIs RESTful es su enfoque flexible para acceder a servicios web. Esto se debe a que se basan en protocolos y métodos HTTP estándar, como GET, POST, PUT y DELETE, para realizar operaciones en recursos representados por URLs. Esta simplicidad en la estructura de las solicitudes hace más accesible la interacción con los servicios web, incluso en dispositivos o entornos con recursos de procesamiento limitados.


Arquitectura REST

  1. Ausencia de Estado.— Los sistemas que siguen el paradigma REST están obligados a ser sin estado. Para la comunicación entre cliente y servidor, la restricción de ausencia de estado hace que los servidores permanezcan ajenos al estado del cliente y viceversa. Una restricción se aplica mediante recursos en lugar de comandos, y son sustantivos de la web que describen cualquier objeto, documento o cosa para almacenar/enviar a otros recursos.

  2. Compatible con Caché.— El almacenamiento en caché ayuda a los servidores a mitigar algunas restricciones de la ausencia de estado. Es un factor crítico que ha mejorado el rendimiento de las aplicaciones web modernas. El caché no solo mejora el rendimiento en el lado del cliente, sino que también ofrece resultados significativos en el lado del servidor. Un mecanismo de caché bien establecido reducirá drásticamente el tiempo medio de respuesta de tu servidor.

  3. Desacoplado.— El REST es un enfoque distribuido, donde las aplicaciones cliente y servidor están desacopladas una de la otra. Independientemente de dónde se inicien las solicitudes, la única información que la aplicación cliente conoce es el identificador de recurso uniforme (URI) del recurso solicitado. Una aplicación servidor debe pasar los datos solicitados vía HTTP, pero no debe intentar modificar la aplicación cliente.

  4. Estratificado.— Un sistema estratificado hace la arquitectura REST escalable. Con la arquitectura RESTful, las aplicaciones cliente y servidor están desacopladas, de modo que las llamadas y respuestas de las APIs REST pasan por diferentes capas. Dado que la API REST es estratificada, debe diseñarse de tal manera que ni el cliente ni el servidor identifiquen su comunicación con aplicaciones finales o intermedias.


Principales ventajas de la API REST

  1. Flexibilidad.— La API REST es flexible con varios tipos de llamadas, como retornar diferentes formatos de datos y cambiar estructuralmente con la implementación correcta de hipermedia. Esto permite que los usuarios se comuniquen de forma bidireccional con clientes y servidores, incluso si están alojados en servidores diferentes.

  2. Adaptable.— La API REST es adaptable a cualquier modificación hecha en los datos que residen en la base de datos, incluso cuando están alojados en diferentes servidores de back-end y front-end. Como depende hasta cierto punto de códigos, ayuda a sincronizar datos en sitios sin problemas.

  3. Facilidad de comprensión.— El flujo de datos utiliza métodos HTTP (GET, POST, PUT o DELETE) para la comunicación, estos métodos se explican por sí mismos. Además, la arquitectura REST ayuda a aumentar la productividad de los desarrolladores, al permitirles mostrar información en el lado del cliente y almacenar o manipular los datos en el lado del servidor.


API vs API REST

  1. Estructura.— Mientras estructuralmente la mayoría de las APIs siguen el formato aplicación-a-aplicación, la API REST opera estrictamente sobre el concepto web de Cliente y Servidor. El Cliente y el Servidor están separados uno del otro, lo que proporciona más flexibilidad.

  2. Diseño.— Generalmente, las APIs son arquitecturas ligeras diseñadas para dispositivos limitados a dispositivos como smartphones. En contraste, las APIs REST se comunican por sistemas, lo que las convierte en una arquitectura más compleja.

  3. Protocolo.— El principal objetivo de la API es estandarizar el intercambio de datos entre servicios web. Dependiendo del tipo de API, la elección del protocolo cambia. Por otro lado, la API REST es un estilo arquitectónico para la construcción de servicios web que interactúan mediante un protocolo HTTP. Aunque la API REST fue formulada en 2000 por el científico de la computación Roy Fielding, sigue siendo el estándar de oro para APIs públicas.

  4. Soporte.— La mayoría de las APIs son fáciles de implementar, pues no enfrentan la ausencia de estado. En contraposición, la API REST se ejecuta incluso si los usuarios no conocen los nombres de las funciones y los parámetros en un orden específico.

  5. Interfaz uniforme.— No muchas APIs desacoplan el cliente del servidor o una aplicación de otra. La API REST adhiere a los principios de una interfaz uniforme y prohíbe el uso de interfaces múltiples o individuales dentro de una API. Las conexiones de hipervínculo deben usarse idealmente para distribuir una única interfaz. Esto también debe asegurar que una parte de datos similar (por ejemplo, el nombre o la dirección de correo electrónico de un usuario) pertenezca a solo un identificador de recurso uniforme (URI). Como resultado, independientemente de la solicitud inicial, todas las solicitudes de la API para los mismos recursos deben parecer iguales.

  6. Escalabilidad.— Mientras que la escalabilidad es un problema para las APIs generales, la API REST tiene una estructura estratificada, haciéndola modular y más flexible para alcanzar la escalabilidad.


Ejemplos: Cómo utilizar la función WebRequest en MQL5

Ahora que ya hemos entrado en el mundo de las APIs y las REST APIs, debes estar curioso: "¿Y dónde entra MQL5 en esta historia?" Vamos allá, es hora de remangarse y poner manos a la obra con ejemplos prácticos que usan MQL5. Después de todo, nada supera a un buen ejemplo práctico, ¿verdad?

Para hacer los ejemplos más completos e interesantes, vamos a trabajar con jsonplaceholder.typicode.com, y también traer algunos endpoints de Coinbase.

La idea es simple: vamos a empezar con las operaciones básicas de CRUD mediante el jsonplaceholder, porque es excelente para entender lo básico y hacer unas pruebas. Pero luego, subimos de nivel y aplicamos esos conocimientos en el escenario más movido y desafiante de la API de Coinbase. Allí, tenemos de todo: cotizaciones, datos históricos e incluso la posibilidad de entrar en el mundo de las operaciones de trading, todo dependiendo de los endpoints a que accedamos.

Vamos a empezar por las operaciones 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 "";
  }

 

Ahora, imagina que deseas verificar la cotización actual del Bitcoin (después de todo, ¿quién no querría, verdad?). Además de la cotización general, tal vez estés interesado en el precio de compra, el precio de venta y el precio al contado (spot) del BTC. Vamos a emplear la función WebRequest en MQL5 para obtener esta información mediante una 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;
  }


O deseas listar todas las divisas 

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;
  }


Ahora que hemos visto la creación de todas las funciones vamos a ejecutarlas para ver el 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);
  }

y como resultado vemos la siguiente salida:




Conclusión:

En resumen, las APIs desempeñan un papel fundamental en el mundo de la programación y el desarrollo de sistemas, ya que permiten que diferentes aplicaciones y sistemas se comuniquen de manera eficiente y flexible. Las RestAPIs, basadas en la arquitectura REST, se han convertido en una opción popular debido a su simplicidad y versatilidad en comparación con protocolos más antiguos, como SOAP. Son ampliamente utilizadas en diversos sectores, incluido el financiero, debido a su capacidad para crear sistemas escalables, integrables y fáciles de mantener.

Una API, o interfaz de programación de aplicaciones, es esencial para facilitar la comunicación entre diferentes aplicaciones, abstraer la complejidad subyacente y permitir que los desarrolladores utilicen recursos de terceros de manera efectiva. Existen varios tipos, como las web, locales, de programa, RESTful, SOAP y GraphQL, cada una con sus propias características y usos.

La API REST, a su vez, sigue un conjunto de principios arquitectónicos que la hacen flexible, adaptable y de fácil comprensión. Es especialmente adecuada para la comunicación en la web, utiliza el protocolo HTTP para realizar operaciones sobre recursos, además, retorna frecuentemente datos en formato JSON o XML.

Al comparar APIs con APIs REST, podemos destacar que las APIs REST siguen una estructura más estricta, desacoplan el cliente del servidor y operan principalmente en el contexto web. Adhieren a una interfaz uniforme y promueven la escalabilidad a través de su estructura estratificada.

Finalmente, al aplicar estos conceptos en ejemplos prácticos que usan MQL5, podemos entender cómo se usan las APIs en el mundo real, desde operaciones básicas de CRUD hasta la obtención de datos financieros mediante la API de Coinbase.

Bueno, amigos, hemos llegado al final de esta charla completa sobre APIs, REST, MQL5 y todo lo demás. Quiero dejar muy claro que todo lo que se ha dicho hasta aquí es fruto de mi visión profesional, pero siempre con un ojo atento a los detalles, al fin y al cabo, ¡nunca se sabe cuándo un "bug" puede aparecer de la nada! 

Es importante recordar que, en el mundo de la tecnología, las cosas pueden cambiar rápidamente, así que siempre es bueno estar al tanto de las últimas tendencias y actualizaciones. Y, por supuesto, nunca está de más comprobar que todo funciona como se espera.

Espero que esta "charla" haya sido útil y instructiva para ustedes. Recuerden que, incluso con toda la tecnología, una buena dosis de curiosidad siempre hace la diferencia en el mundo de la programación.

Ahora adelante, explora las posibilidades de las API, crea tus propias integraciones y desarrolla sistemas increíbles. Y recuerden, si algo de descarrila, no se preocupen, así es como ganamos experiencia, ¿no? 

No duden en contactarme si tienen más inquietudes o necesitan ayuda. Estoy aquí para ayudar en lo que sea necesario.

¡Hasta la próxima, amigos!

Traducción del portugués realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/pt/articles/13661

Archivos adjuntos |
Parte_01.zip (431.78 KB)
Desarrollo de un sistema de repetición (Parte 34): Sistema de órdenes (III) Desarrollo de un sistema de repetición (Parte 34): Sistema de órdenes (III)
En este artículo concluiremos la primera fase de la construcción. Aunque será algo relativamente rápido, explicaré detalles que quizás no se comentaron anteriormente. Pero aquí explicaré algunas cosas que mucha gente no entiende por qué son como son. Uno de estos casos es el del ratón. ¡¡¡¿Sabes por qué tienes que pulsar la tecla Shift o Ctrl en tu teclado?!!!
Creamos un asesor multidivisa sencillo utilizando MQL5 (Parte 3): Prefijos/sufijos de símbolos y sesión comercial Creamos un asesor multidivisa sencillo utilizando MQL5 (Parte 3): Prefijos/sufijos de símbolos y sesión comercial
Últimamente, he recibido comentarios de varios compañeros tráders sobre cómo usar el asesor multidivisa que estamos analizando con brókeres que utilizan prefijos y/o sufijos con nombres de símbolos, así como sobre la forma de implementar zonas horarias comerciales o sesiones comerciales en el asesor.
Desarrollo de un sistema de repetición (Parte 35): Haciendo retoques (I) Desarrollo de un sistema de repetición (Parte 35): Haciendo retoques (I)
Tenemos que arreglar algunas cosas antes de poder continuar de verdad. Pero no es necesariamente una corrección, sino una mejora en la forma de gestionar y utilizar la clase. La razón es que hay fallos debidos a algún tipo de interacción dentro del sistema. A pesar de los intentos de comprender la razón de algunos de los fallos, para ponerles fin, todos ellos se vieron frustrados, ya que algunos no tenían sentido. Cuando usamos punteros o recursión en C / C++, y el programa empieza a fallar.
Desarrollo de un sistema de repetición (Parte 33): Sistema de órdenes (II) Desarrollo de un sistema de repetición (Parte 33): Sistema de órdenes (II)
Vamos a continuar el desarrollo del sistema de órdenes, pero verás que haremos una reutilización masiva de cosas ya vistas en otros artículos. Aun así, tendremos una pequeña recompensa en este artículo. Desarrollaremos, en primer lugar, un sistema que pueda ser operado junto al servidor de negociación real, ya sea usando una cuenta demo o una cuenta real. Haremos uso masivo y extensivo de la plataforma MetaTrader 5 para proporcionarnos todo el soporte que necesitaremos en este inicio de viaje.