Cómo usar la API de datos JSON en sus proyectos MQL
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.
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:
<title>German Trade Balance</title>
<country>EUR</country>
<![CDATA[ 07-07-2024 ]]> </date>
<![CDATA[ 8:30am ]]>
</time>
<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>
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:
- 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.
- 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.
- 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.
- 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:
- 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.
- 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.
- 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.
- 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.
//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"
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Í
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'.
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.
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í:
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
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso