English Deutsch 日本語
preview
Cómo usar la API de datos JSON en sus proyectos MQL

Cómo usar la API de datos JSON en sus proyectos MQL

MetaTrader 5Sistemas comerciales | 18 noviembre 2024, 09:58
150 0
Sara Sabaghi
Sara Sabaghi

Introducción y antecedentes

La combinación de datos externos podría mejorar la toma de decisiones en el trading algorítmico. Las API permiten la transferencia de datos entre diferentes sistemas y ayudan a los operadores a acceder a diferentes fuentes de datos, como datos de mercado en tiempo real de otros corredores y bancos, acceder a indicadores económicos (no solo calendarios económicos), acceder a canales de noticias o análisis de sentimientos sociales, herramientas de inteligencia artificial en línea, sistemas de pronóstico en línea o cualquier cosa que pueda imaginar que esté disponible en los servicios API. En este artículo, le mostraremos cómo utilizar esta herramienta de la mejor manera.

El uso de datos API en Asesores Expertos (EA) puede brindarle información nueva y más detallada sobre el mercado comercial que lo ayudará a tomar decisiones informadas, crear estrategias comerciales más dinámicas y administrar mejor los riesgos. Al utilizar los datos de la API, los traders pueden mejorar la precisión de las señales comerciales utilizando indicadores técnicos avanzados y herramientas de gráficos sofisticadas. Esta integración amplía las capacidades de plataformas como MetaTrader y proporciona acceso a valiosa inteligencia de mercado, como el procesamiento del lenguaje natural (Natural Language Processing, NLP) para el análisis del sentimiento del mercado y acceso a datos y noticias fundamentales.


Introducción a la API de Ziwox

Ziwox es un sistema de análisis de datos en Forex que contiene servicios API gratuitos. Esta API proporciona a los comerciantes datos completos del mercado, incluidos precios, indicadores técnicos, análisis de sentimiento y datos fundamentales. Admite pares de divisas principales y secundarios y proporciona métricas importantes como sesgo cambiario fundamental, pronósticos basados en IA, estadísticas de operadores minoristas, informes COT, soporte y resistencia técnicos, sentimiento del mercado (riesgo activado y riesgo desactivado), rendimientos de bonos e índice VIX. Este rico conjunto de datos permite un análisis de mercado multifacético, combinando información técnica, fundamental y de sentimiento para crear herramientas innovadoras.

Lo interesante de estos datos es que más allá de precios y datos técnicos, tendremos acceso a datos generados por inteligencia artificial o analistas reales. Algunos de esos datos incluían: análisis fundamental de pares de divisas realizado por un equipo de analistas, salidas del sistema NLP (procesamiento del lenguaje natural) como sentimiento de noticias de divisas y pronóstico de precios generado por IA.

La API es fácil de usar y requiere un simple registro para generar una clave API y acceder a los datos en formato JSON o de texto. Esta accesibilidad, junto con su amplia cobertura de datos, lo convierte en una herramienta invaluable para mejorar las estrategias comerciales y desarrollar indicadores personalizados o sistemas comerciales automatizados.

¿Qué es una API?


Vamos a familiarizarnos un poco más: ¿Qué es una API?

Las APIs son mecanismos que permiten que dos componentes de software se comuniquen entre sí utilizando un conjunto de definiciones y protocolos. Por ejemplo, el sistema de software de la oficina meteorológica contiene datos meteorológicos diarios. La aplicación meteorológica de tu teléfono “habla” con este sistema a través de una API y te muestra la actualización meteorológica diaria en tu teléfono.

API significa Interfaz de programación de aplicaciones. Una interfaz puede considerarse como un contrato de servicio entre dos aplicaciones. Este contrato define cómo ambos se comunican entre sí mediante solicitudes y respuestas. Su documentación de API contiene información sobre cómo los desarrolladores estructuran estas solicitudes y respuestas.

La arquitectura de API generalmente se describe en términos de cliente y servidor. El programa que envía la solicitud se llama cliente y el programa que envía la respuesta se llama servidor. Entonces, en el ejemplo del clima, la base de datos meteorológica de la oficina es el servidor y la aplicación móvil es el cliente.


Formatos de respuestas API:

Existen varios formatos para las respuestas o el intercambio de datos de una API. Dependiendo del propósito para el que esté hecha la API, con qué otras Aplicaciones esté conectada, el formato puede cambiar.

Estas respuestas podrían estar en formato estándar JSON, HTML, TEXT, XML o CSV.

Para una breve introducción a este modelo estándar:

1. JSON: JSON es un formato de intercambio de datos ligero y legible por humanos que se utiliza en las respuestas API debido a su simplicidad y flexibilidad. Representa datos como pares clave-valor, lo que facilita su análisis y manipulación en varios lenguajes de programación.

Un ejemplo de respuesta JSON:

{
  "id": 5687,
  "source": "oanda",
  "symbol": "EURUSD",
  "price": "1.08562",
  "high": "1.09211",
  "low": "1.08154"
}


2. XML: XML o «eXtensible Markup Language» es otro formato ampliamente aceptado para representar datos estructurados en respuestas API. A diferencia de JSON, XML utiliza etiquetas para definir estructuras de datos jerárquicas, proporcionando una representación más precisa pero estructurada. Es como las etiquetas HTML en el diseño y las estructuras web. Si bien se prefiere JSON por su simplicidad y legibilidad, XML sigue siendo relevante en ciertas áreas, como sistemas empresariales e integraciones heredadas.

Ejemplo de XML en Forex Factory News API:

<event>
<title>German Trade Balance</title>
<country>EUR</country>
<date>
<![CDATA[ 07-07-2024 ]]>     </date>
<time>
<![CDATA[ 8:30am ]]>
</time>
<impact><![CDATA[ Low ]]></impact>

<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>

</event>


3. Otros formatos: Además de JSON y XML, las API pueden utilizar otros formatos de respuesta, como texto sin formato, HTML, búferes de protocolo o archivo CSV, en función de los requisitos y convenciones específicos del dominio. Cada formato tiene sus propias ventajas y usos, desde la eficiencia y el rendimiento hasta la legibilidad y adaptabilidad humana.

El formato JSON se ha convertido en una opción popular en el desarrollo web debido a su simplicidad, legibilidad y facilidad de uso. Afortunadamente, el servicio en cuestión también utiliza este modelo para el intercambio de datos.



Configuración de su entorno y desarrollo

Para configurar un entorno en MQL5 para usar API JSON, deberá seguir algunos pasos.

MQL5 es un lenguaje de programación para crear robots comerciales, indicadores técnicos, scripts y bibliotecas de funciones para la plataforma comercial MetaTrader 5.

A continuación se muestra una guía general sobre cómo configurar un entorno para trabajar con API JSON en MQL5:

  1. Comprenda los conceptos básicos de MQL5: Asegúrese de tener una buena comprensión de los conceptos básicos del lenguaje de programación MQL5, así como de los conceptos básicos relacionados con el comercio y los mercados financieros. Familiarícese con la Documentación MQL4 y la Referencia MQL5 para comprender la sintaxis y las funciones del lenguaje.
  2. Elija una biblioteca JSON: MQL5 no tiene soporte nativo para el análisis JSON, por lo que tendrá que utilizar una biblioteca de terceros. Puedes encontrar estas librerías en foros como la comunidad MQL5 o GitHub. JSON Serialization y JSON Parser.
  3. Descarga e instala la biblioteca JSON: Descarga la biblioteca JSON elegida y sigue las instrucciones de instalación que proporciona la biblioteca. Esto normalmente implica colocar el archivo de biblioteca (mqh o mq5) en la carpeta Include de su instalación de MetaTrader.
  4. Incluya la librería en su código: Al principio de tu script MQL o EA (Expert Advisor), incluye la librería JSON usando la directiva #include:
  5. //Use this type of file include if the file is in MQL include follder
    #include <JAson.mqh>
    
    // Use this type of file include If this file is next to your EA file/follder
    #include "JAson.mqh" 
  6. Hacer peticiones HTTP: Para interactuar con las APIs JSON, necesitarás hacer peticiones HTTP. Las opciones más populares son WinHTTP o WebRequest. Si necesitas otro tipo de uso de HTTP, descarga e incluye una librería HTTP que se ajuste a tus necesidades.
  7. Guardar la respuesta HTTP en un archivo: Debido a que la mayoría de estas API están limitadas en términos de la cantidad de solicitudes y están preocupados por el límite de solicitudes de API, es mejor guardar los datos solicitados en un archivo y usar nuestro archivo guardado en lugar de solicitudes repetidas e innecesarias.
  8. Analizar respuestas JSON: Una vez que reciba una respuesta de la API, utilice la biblioteca JSON para analizar los datos JSON. La sintaxis específica dependerá de la biblioteca que estés utilizando.
  9. Mezcla: Después de clasificar los datos JSON, ahora puede combinar los datos deseados con su programa según el modelo, la estrategia o el tipo.


Una estructura para el código de funciones API

MQL5 ofrece la función WebRequest para peticiones HTTP, permitiendo la interacción con APIs.

Puede obtener más información sobre la documentación de Webrequest: Webrequest e Intercambio de datos HTTP.

A continuación se muestra un ejemplo de código MQL para solicitar datos JSON de una dirección API utilizando el método GET:

// Required variables
string cookie=NULL, headers="", apikey="your api key",
value1="value 1", value2="value 2";
char post[],result[];
int res;
string URL   =  "https://www.example.com/API?apikey="+apikey+"&data1=value1&data2="+value2; // Rest API address

ResetLastError(); // Reset ast error
// HTTP request via MQL Webrequest, GET method with apikey, value1, and value2 and 2000 millisecond timeout 
res=WebRequest("GET", URL, cookie, NULL, 2000, post, 0, result, headers);
if(res==-1) // WebRequest error handling
 {
    int error =  GetLastError();
    if(error==4060) Print("Webrequest Error ",error);
    else if(error==5203) Print("HTTP request failed!");
    else Print("Unknow HTTP request error("+string(error)+")! ");
    LastHTTPError=error;
 }
else if (res==200) // The HTTP 200 status response code indicates that the request has succeeded
 {
    Print("HTTP request successful!");

    // Use CharArrayToString to convert HTTP result array to a string
    string HTTP_Result = CharArrayToString(result, 0, 0, CP_UTF8); 
    Print(HTTP_Result);      

 }

Este código envía una solicitud GET a la URL de API especificada, lo que demuestra la simplicidad de integrar llamadas de API en MQL4.



Estudio de caso: Asesor experto exitoso en MQL4 con acceso a datos API

Cómo utilizar la API de datos de Forex de Ziwox para crear un sistema de comercio automático mediante el uso de datos de pronóstico de IA fundamentales y en tiempo real

En este artículo, exploraremos cómo utilizar la API de datos de Ziwox Forex para crear herramientas basadas en datos fundamentales y en tiempo real en lenguaje MetaQuotes (MQL). Hay mucha información sobre su API, pero elegimos Pronóstico de IA para nuestro proyecto.

El sistema de pronóstico de inteligencia artificial en la terminal Ziwox, según su información, se basa en la agregación de datos como noticias, datos del calendario económico, tasas de interés y sus cambios de tasa, políticas monetarias y económicas de los bancos centrales, sentimiento del mercado, fortaleza de las monedas forex, datos COT y datos de los comerciantes minoristas. Como resultado, se analiza todo el mercado para que esta predicción pueda utilizarse como información valiosa.

Recorreremos el proceso de obtención de datos de API, guardado de datos JSON en un archivo, análisis de respuestas JSON y uso de esta información para crear un asesor experto automatizado (EA).

Nuestro plan es crear un asesor experto, utilizar una estrategia MA simple como nuestra señal técnica y operar si el pronóstico de la IA está en nuestra dirección como un filtro de IA.

Hagamos lo mejor que podamos.


Paso 1: Registrarse y generar una clave API

Para comenzar a utilizar la API de datos de Forex de Ziwox, siga estos pasos:

1. Inscríbete en el Terminal Ziwox AQUÍ

Ziwox Regístrate 

2. Rellena el formulario con tus datos, lee las condiciones y políticas y acéptalas, haz clic en «No soy un robot» y, a continuación, en «Crear una cuenta nueva».

3. Se enviará un correo electrónico de verificación a su buzón, verifique su correo electrónico.

3. Inicie sesión en su cuenta aquí, vaya a la página de perfil, pestaña API aquí, y genere su clave API haciendo clic en el botón verde 'Generar'.

Generar API de Ziwox

4. Al generar una clave API, ahora tiene acceso a los datos de la API de Ziwox. Copie ese código API generado para usarlo en nuestro proyecto.

Clave API de Ziwox


Paso 2: Comprender la estructura de la API

La estructura del enlace API es la siguiente:

https://ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey={API_KEY}&apitype={REQUEST_TYPE}&pair={PAIR}

  • {API_KEY}: Su clave API única del último paso
  • {REQUEST_TYPE}: El formato de la respuesta, ya sea JSON o texto.
  • {PAIR}: El par de divisas deseado en un formato estándar, sin prefijos ni sufijos, como EURUSD, USDJPY, GBPUSD, XAUUSD, WTI...


Paso 3: Pruebe la estructura de su API

Ahora queremos verificar la estructura del enlace API y solicitar una muestra de la API de Ziwox. Simplemente, use el enlace API en el Paso 2, edite los parámetros con sus parámetros, abra su navegador, ingrese el enlace API en la barra de direcciones y presione Enter.

Si editas correctamente el enlace de la API, lo que tenemos en la respuesta HTTP es así:

Respuesta de la API de Ziwox


Con una clave API incorrecta, obtendrá una respuesta de error como esta:

{
"status": "error",
"desc": "invalid api key"
}

o si ingresa el nombre del activo incorrectamente, puede ver esta respuesta:

{
"status": "error",
"desc": "invalid asset name!!"
}


Paso 4: Implementar una función de solicitud API HTTP 

Si tiene éxito en el paso 3, ahora estamos listos para implementar una función para automatizar esta parte. Comprueba este código:

datetime LastWebRequest = 0; // use this datetime var for limit failed request API

bool GetAPI(string symbolname, string apikey, string filename)

  {
   Print("Get API Update");
   bool NeedToUpdate =   false;

   // Check if the API data file available
   if(FileGetInteger(filename,FILE_EXISTS,true)>=0)
     {
      // Check the latest update time from file modify date time
      if(TimeLocal()-(datetime)FileGetInteger(filename,FILE_MODIFY_DATE,true)>900) // update data every 15 min becasue of API call rate limitation
         NeedToUpdate  = true;
     }
   else
      NeedToUpdate  =  true;


   if(NeedToUpdate && TimeLocal()-LastWebRequest>300)   // retry failed API request every 5 min to avoid firewall IP block
     {
      string   cookie=NULL,headers;
      char     post[],result[];
      int      res;
      string   URL   =  "https://www.ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey="+apikey+"&apitype=json&pair="+symbolname;
      ResetLastError();
      int timeout=5000;
      res=WebRequest("GET", URL, cookie, NULL, timeout, post, 0, result, headers);
      if(res==-1)
        {
         LastWebRequest    =  TimeLocal();
         int error         =  GetLastError();
         if(error==4060)
            Print("API data Webrequest Error ",error, " Check your webrequest on Metatrader Expert option.");
         else  if(error==5203)
               Print("HTTP request for "+symbolname+" Data failed!");
            else
               Print("Unknow HTTP request error("+string(error)+")! "+symbolname+" Data");
         return(false);
        }
      else
         if(res==200)
           {
            LastWebRequest =  TimeLocal();
            string HTTPString = CharArrayToString(result, 0, 0, CP_UTF8);
            Print("HTTP request for "+symbolname+" Data successful!");
            Print(HTTPString);
	    
            if (StringFind(HTTPString,"invalid api key",0)!=-1) {
               Alert("invalid api key");
               return(false);
            }
            // Store the API data into a common folder file
            int filehandle=FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON);
            if(filehandle!=INVALID_HANDLE)
              {
               FileWriteArray(filehandle,result,0,ArraySize(result));
               FileClose(filehandle);
              }
           }
     }
   return(true);
  }

Esta función toma una clave API de autenticación (apikey), un nombre de activo (symbolname) y un nombre de archivo (filename) como entradas suyas. Incorpora "apikey" y "symbolname" en la URL para preparar el enlace de solicitud de API.

A continuación, utiliza la función Webrequest para hacer una petición HTTP similar a lo que hizo en el paso anterior y, por último, obtiene una respuesta del servidor y pone la información relacionada en un archivo con el nombre «filename».

Llamamos a la función API de la siguiente manera:

string APIfilename =  symbolname+"_API_Data.json"; // API store file name
string APIKey = "76thfd67a6f867df7"; // Our unic API Key, change it with your API Key
string SymbolRequest = "EURUSD"; // Symbol request, without prefix or suffix
string APIJSON[];
bool APIGET = GetAPI(SymbolRequest, APIKey,  APIfilename);


Paso 5: Análisis de datos JSON

Como recordarás en el Paso 3, los datos recibidos de la API contienen una matriz de datos. Puedes ver la explicación completa de estos datos en la siguiente tabla.

Nombre del objeto JSON Tipo de datos Descripción
Symbol string Devuelve el mismo nombre de activo/símbolo
Last Price número Último precio del activo
digits número Dígitos del precio de los activos
Base string Nombre base del par
Quote string Nombre del par de cotización
Base Fundamental Bias string Sesgo fundamental o perspectiva fundamental de la moneda base. Podría ser alcista o bajista
Base Fundamental Power string Potencia de polarización fundamental base. Podría ser débil, moderada o fuerte.
Quote Fundamental Bias string Cotización de divisas con sesgo fundamental o perspectiva fundamental. Podría ser alcista o bajista.
Quote Fundamental Power string Cotización: Poder del sesgo fundamental. Podría ser débil, moderada o fuerte.
Fundamental Bias string Sesgo fundamental de los activos, o perspectiva fundamental a largo plazo de los activos. Alcista o bajista
Fundamental Power string Poder fundamental del activo. Débil, moderado o fuerte
Fundamental Driver string Al igual que el sesgo fundamental del activo, es un número, 50 = Neutral, mayor que 50 es alcista y menor que 50 es bajista.
AI Bullish Forecast Porcentaje Pronóstico del movimiento alcista del precio de los activos: cuanto mayor sea el número, más alcista será
AI Bearish Forecast Porcentaje Pronóstico de movimiento bajista en el precio de los activos: cuanto mayor sea el número, más bajista será
Retail Long Ratio Porcentaje Comerciantes minoristas: Porcentaje largo
Retail Long Lot número Comerciantes minoristas: Lotes largos (volumen de órdenes)
Retail Long Pos número Número de traders minoristas con posiciones largas
Retail Short Ratio Porcentaje Comerciantes minoristas: Porcentaje corto
Retail Short Lot número Comerciantes minoristas: Lotes cortos (volumen de órdenes)
Retail Short pos número Número de comerciantes minoristas: Posiciones cortas
Base COT NET número Posición neta COT de la moneda base
Base COT change número Cambios en la posición neta COT (semanales) de la moneda base
Quote COT NET número Posición neta COT de la divisa cotizada
Quote COT change número Cambios en la posición neta COT (semanales) de la moneda cotizada
COT chng Ratio número Ratio de cambio de posición neta de grandes especuladores, número positivo = sentimiento a largo plazo, número negativo = sentimiento a corto plazo
Risk Sentiment string Sentimiento de riesgo del mercado, sería Risk-ON, Risk-OFF o MIX
D1 Trend string Datos técnicos, Tendencia diaria, Tendencia de compra o venta
D1 RSI número Datos del indicador, valor del indicador RSI diario
D1 Stoch número Datos del indicador, valor del indicador estocástico diario
cci números Valores del indicador CCI y
cci signal string Señal CCI
supports números Los activos admiten niveles
resistance números Niveles de resistencia de los activos
pivot números Punto de pivote/niveles de activos
VIX Value número VIX, valor del índice de volatilidad
VIX Direction número Dirección del sentimiento VIX, al alza = miedo y mercado riesgoso, a la baja = mercado avaricioso
VIX Buy driver número Número positivo = mercado avaricioso 
VIX Sell driver número Número negativo = Miedo y mercado riesgoso
Base Bond número Valor del rendimiento de los bonos de la moneda base
Base Bond chg número Moneda base Cambio en el valor del rendimiento de los bonos
Quote Bond número Valor del rendimiento de los bonos de la moneda cotizada
Quote Bond chg número Moneda de cotización Cambio del valor del rendimiento del bono
US10Y número Valor del rendimiento del bono estadounidense a 10 años
US10Y chg número Cambio de valor del H1 US10Y
Yield Driver número Número positivo, favor a la base, número negativo, favor a la Cotización   
Allow To Trade booliano Sugerencia de Ziwox: ¿es mejor dejar de operar?
Stop Reason String Si no se sugiere realizar ningún intercambio, puede ver el motivo aquí.
riskriversal número Valor de reversión de riesgo para este activo. Determinar el valor PUT/CALL
cesi número Valor CESI
yielddiff número Valor de rendimiento de la moneda base - Valor de rendimiento de la moneda cotizada 
banksposition número Ratio de posición de las instituciones bancarias
macrofundamental número Valor macroeconómico, un número positivo es un impulsor alcista, un número negativo es un impulsor bajista para el activo
longtermsentiment número Sentimiento a largo plazo de los activos, basado en la economía, la política...
seasonal Porcentaje La posibilidad de crecimiento o disminución de los activos en términos de datos estacionales


En este caso práctico/ejemplo, nos gusta utilizar la previsión de IA bajista/alcista. Ahora, para diseñar esta función, leemos los datos almacenados en el archivo (paso 4) mediante la biblioteca JSON y extraemos lo que necesitamos.

La función sería así:

#include "JAson.mqh"  // include the JSON librery in our project
CJAVal JsonValue;


void JsonDataParse(string filename, string &_APIJSON[])

  {
   bool     UpdateData =   false;
   for (int arraIn=0; arraIn<ArraySize(APIJSON); arraIn++) APIJSON[arraIn]="";


   if(FileGetInteger(filename,FILE_EXISTS,true)>=0)
     {
      int   FileHandle =FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON);
      char  jsonarray[];
      FileReadArray(FileHandle,jsonarray);
      FileClose(FileHandle);

      JsonValue.Clear();
      JsonValue.Deserialize(CharArrayToString(jsonarray, 0, 0, CP_UTF8));


      _APIJSON[0]   =   JsonValue[0]["Symbol"].ToStr();
      _APIJSON[1]   =   JsonValue[0]["Fundamental Bias"].ToStr();
      _APIJSON[2]   =   JsonValue[0]["Fundamental Power"].ToStr();
      _APIJSON[3]   =   JsonValue[0]["AI Bullish Forecast"].ToStr();
      _APIJSON[4]   =   JsonValue[0]["AI Bearish Forecast"].ToStr();
      _APIJSON[5]   =   JsonValue[0]["Retail Long Ratio"].ToStr();
      _APIJSON[6]   =   JsonValue[0]["Retail Short Ratio"].ToStr();
      _APIJSON[7]   =   JsonValue[0]["Retail Short Lot"].ToStr();
      _APIJSON[8]   =   JsonValue[0]["Retail Short pos"].ToStr();
      _APIJSON[9]   =   JsonValue[0]["Base COT NET"].ToStr();
      _APIJSON[10]  =   JsonValue[0]["Base COT change"].ToStr();
      _APIJSON[11]  =   JsonValue[0]["Quote COT NET"].ToStr();
      _APIJSON[12]  =   JsonValue[0]["Quote COT change"].ToStr();
      _APIJSON[13]  =   JsonValue[0]["COT chng Ratio"].ToStr();
      _APIJSON[14]  =   JsonValue[0]["Risk Sentiment"].ToStr();
     }
  }

Y llamamos a la función JSON así:

string APIfilename =  symbolname+"_API_Data.json"; // API store file name
string API_DATA[]; // define an array variable to store API details

JsonDataParse( APIfilename,API_DATA);


Paso 6: Creación de una estrategia simple de cruce de medias móviles

Utilizando los datos extraídos, almacenados en la variable “APIJSON”, ahora podemos crear estrategias comerciales automatizadas y combinar nuestra estrategia con un sistema de pronóstico de IA. A continuación se muestra un ejemplo básico de cómo utilizar los datos en un EA:

Puedes elegir cualquier estrategia que te guste, pero en este artículo intentamos elegir una estrategia simple porque nuestro objetivo aquí es guiarte y enseñarte cómo usar dicha herramienta en tus proyectos para que puedas hacerlo un paso mejor.

Una estrategia de cruce de medias móviles es una técnica popular utilizada por los traders para identificar posibles señales de compra y venta.

Esta estrategia utiliza dos medias móviles. Un corto plazo y un largo plazo para determinar la tendencia del mercado.

Cuando la MA de corto plazo cruza por encima de la MA de largo plazo, indica una compra, y cuando cruza por debajo, indica una venta.

Hagámoslo:

shortMA  = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
longMA   = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);


// Check for crossover signals
if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60%
   if (shortMA > longMA)   // BUY trend 
   { 
      if (OrdersTotal() == 0) {
         ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
         if (ticket < 0) Print("Error opening buy order: ", GetLastError());
      }
   }

if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60%
   if (shortMA < longMA)   // Sell trend
   {
      if (OrdersTotal() == 0) 
      {
         ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
         if (ticket < 0) Print("Error opening sell order: ", GetLastError());
      }
   }


Paso 7: Uso de datos JSON para el filtrado de señales

Para mejorar la estrategia de cruce de MA, utilizamos los datos JSON y la relación de pronóstico de IA de la API Ziwox para filtrar las señales.

Por ejemplo, si el cruce MA muestra una tendencia de compra, y si el pronóstico de IA es superior al 50%, lo que indica un movimiento alcista/ascendente, es una buena idea ingresar una compra. Por el contrario, si el análisis técnico (MA) tiene una señal de venta, solo venderemos cuando los datos analíticos y de pronóstico estén en la misma dirección que la venta. De esta manera, se puede reducir el riesgo de entrada y aumentar la tasa de ganancias.

Según la disposición de los datos JSON en el paso 4, el pronóstico de IA, el porcentaje alcista está en el tercer elemento de nuestra matriz y el pronóstico bajista está en el cuarto elemento.

El código podría ser así:

void OnTick()
  {
   if (!APIOK) return;
   double   shortMA, longMA;
   long     ticket = -1;

   if(IsNewCandle())
     {
      shortMA  = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
      longMA   = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
      
      // Check for crossover signals
      if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60%
         if (shortMA > longMA)   // BUY trend 
         { 
            if (OrdersTotal() == 0) {
               ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
               if (ticket < 0) Print("Error opening buy order: ", GetLastError());
            }
         }
      if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60%
         if (shortMA < longMA)   // Sell trend
         {
            if (OrdersTotal() == 0) 
            {
               ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
               if (ticket < 0) Print("Error opening sell order: ", GetLastError());
            }
         } 
     }
  }


Conclusión

La integración de datos API con MQL4 permite a los traders crear asesores expertos más adaptables y basados en datos. Al aprovechar la información en tiempo real de fuentes externas, los operadores pueden mejorar sus estrategias y tomar decisiones comerciales más informadas en condiciones de mercado dinámicas. Puede acceder a datos más allá de los precios brutos del mercado. Este enfoque le permite combinar el análisis técnico y fundamental, aumentando la eficacia de sus estrategias comerciales.

El código final está listo para descargarse a continuación.

Estoy aquí, dispuesto a responder cualquier pregunta, sugerencia o crítica.

Un cordial saludo y buen comercio.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/14108

Archivos adjuntos |
APIExpert.mq4 (18.77 KB)
JAson.mqh (30.59 KB)
Algoritmo de cerradura de código (Сode Lock Algorithm, CLA) Algoritmo de cerradura de código (Сode Lock Algorithm, CLA)
En este artículo repensaremos las cerraduras de código, transformándolas de mecanismos de protección en herramientas para resolver problemas complejos de optimización. Descubra el mundo de las cerraduras de código, no como simples dispositivos de seguridad, sino como inspiración para un nuevo enfoque de la optimización. Hoy crearemos toda una población de "cerraduras" en la que cada cerradura representará una solución única a un problema. A continuación, desarrollaremos un algoritmo que "forzará" estas cerraduras y hallará soluciones óptimas en ámbitos que van desde el aprendizaje automático hasta el desarrollo de sistemas comerciales.
Desarrollamos un asesor experto multidivisa (Parte 11): Comenzamos a automatizar el proceso de optimización Desarrollamos un asesor experto multidivisa (Parte 11): Comenzamos a automatizar el proceso de optimización
Para obtener un buen EA, tenemos que seleccionar muchos conjuntos adecuados de parámetros de instancias de estrategias comerciales para él. Esto puede hacerse manualmente ejecutando la optimización en diferentes símbolos y seleccionando después los mejores resultados. Pero resulta mejor delegar el trabajo en un programa y dedicarse a actividades más productivas.
Creación de un EA limitador de reducción diaria en MQL5 Creación de un EA limitador de reducción diaria en MQL5
El artículo analiza, desde una perspectiva detallada, cómo implementar la creación de un Asesor Experto (EA) basado en el algoritmo comercial. Esto ayuda a automatizar el sistema en MQL5 y tomar el control de la reducción diaria.
Características del Wizard MQL5 que debe conocer (Parte 27): Medias móviles y el ángulo de ataque Características del Wizard MQL5 que debe conocer (Parte 27): Medias móviles y el ángulo de ataque
El ángulo de ataque es una métrica citada a menudo cuya inclinación se entiende que está estrechamente relacionada con la fuerza de una tendencia predominante. Nos fijamos en cómo se utiliza y se entiende comúnmente y examinamos si hay cambios que podrían introducirse en la forma de medirlo en beneficio de un sistema comercial que lo ponga en uso.