English Русский 中文 Deutsch 日本語
preview
Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 2): Script de comentarios analíticos

Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 2): Script de comentarios analíticos

MetaTrader 5Ejemplos |
31 0
Christian Benjamin
Christian Benjamin

Introducción

Para simplificar el análisis de la evolución de los precios y acelerar las evaluaciones del mercado, he desarrollado una herramienta robusta basada en el concepto del proyector de gráficos. Esta herramienta proporciona un resumen eficaz de los valores esenciales del mercado, ya que permite a los operadores ejecutar un único script sin necesidad de navegar por el gráfico. Muestra de forma eficaz las métricas clave, incluyendo los precios de apertura y cierre del día anterior, los niveles significativos de soporte y resistencia, los valores máximos y mínimos del día anterior y el volumen de operaciones. Además, cuenta con una tabla vertical que se muestra directamente en el gráfico para facilitar su consulta.

La herramienta dibuja automáticamente líneas importantes de soporte y resistencia, proporcionándole indicaciones visuales para el análisis. También ofrece comentarios útiles sobre las condiciones del mercado y los posibles movimientos, lo que añade un valioso contexto a sus decisiones de negociación.

Procederemos con los siguientes subtemas:

  1. ¿Por qué centrarse en esta herramienta?
  2. Descripción general de la nueva herramienta
  3. El script MQL5
  4. Desarrollo del código
  5. Pruebas
  6. Conclusión


¿Por qué centrarse en esta herramienta?

Tras investigar cómo cierta información del mercado influye en las predicciones sobre la dirección del mercado, he creado una herramienta diseñada para proporcionar rápidamente los datos más importantes sobre el mercado. Esto significa que no tendrás que revisar datos históricos ni realizar cálculos complicados. La característica más destacada de esta herramienta es su capacidad para proporcionar información en cuestión de segundos.

Muestra los precios de apertura y cierre del día anterior y destaca los niveles clave de resistencia y soporte. Quizás lo más importante es que calcula tanto el volumen actual como el volumen del día anterior. Comprender el volumen es fundamental, ya que refleja la participación en el mercado. Cuando el volumen de hoy es significativamente mayor que el de ayer, esto indica que hay más operadores participando, lo que puede provocar movimientos de precios más pronunciados y reforzar la tendencia de precios predominante, ya sea al alza (alcista) o a la baja (bajista). Al combinar toda esta información, se obtienen datos sobre la dirección prevista de los precios.

Algunas de las características principales se describen en la tabla siguiente.

Ventajas Descripción
Identificación de niveles clave Conocer los precios máximos y mínimos del día anterior puede ayudar a los operadores a determinar niveles psicológicos importantes en los que podría aumentar la presión de compra o venta.
Información sobre el volumen El análisis del volumen ayuda a los operadores a evaluar el interés del mercado. Un volumen elevado a un nivel de precios concreto suele indicar una fuerte convicción entre los operadores, lo que lo convierte en una referencia crucial para futuras operaciones.
Confirmación de tendencia Los precios de apertura y cierre proporcionan información sobre el estado del mercado. Un cierre más alto en comparación con la apertura sugiere un sentimiento alcista, mientras que lo contrario indica un sentimiento bajista.
Anotaciones del gráfico El script añade líneas horizontales de soporte y resistencia al gráfico, proporcionando señales visuales que pueden mejorar el análisis del operador. Este soporte visual facilita la comprensión de los niveles del mercado y la dinámica de la evolución de los precios.
Comunicaciones claras El uso de un cuadro de comentarios en el gráfico ayuda a comunicar análisis críticos de forma concisa, lo que puede facilitar la toma de decisiones rápidas.
Herramienta de aprendizaje Para los traders novatos, el script puede servir como herramienta educativa para ayudarles a comprender cómo leer e interpretar los datos históricos de precios, el volumen y las implicaciones para los movimientos futuros de los precios.
Eficiencia y ahorro de tiempo La herramienta automatiza el cálculo y la recuperación de indicadores clave, lo que ahorra tiempo. Esto permite a los operadores centrarse en ejecutar sus planes de trading en lugar de recopilar datos.


Descripción general del script

El script MQL5 que vamos a ver le ayuda a recopilar automáticamente métricas importantes del día de negociación anterior. Esto facilita tu análisis, por lo que puedes dedicar más tiempo a la estrategia y menos a recopilar datos. Así es como lo hace el script. 

1. Cálculo y visualización de los niveles técnicos esenciales mediante la obtención directa de datos del día de negociación anterior en la plataforma de negociación.

Niveles técnicos clave

 Figura 1. Niveles esenciales

La figura 1 muestra información esencial sobre el mercado, incluidos los precios de apertura y cierre del día anterior, los niveles clave de resistencia y soporte, y cómo reacciona el mercado a esos niveles.

2. Anotación de los gráficos para referencia inmediata.

Cómo se muestra la información

Figura 2. Referencia rápida de gráficos

En la figura 2, podemos ver cómo se presenta la información de referencia inmediata en el gráfico de MetaTrader 5.

Echemos un vistazo más de cerca al script para entender cómo funciona.


El script MQL5

El script está diseñado para analizar el desempeño del mercado del día anterior y presentar análisis clave a los operadores. Es particularmente útil para los traders intradía y los analistas técnicos que dependen de la comprensión de la acción reciente de los precios y las tendencias de volumen para tomar decisiones comerciales informadas. A continuación se muestra el script completo, listo para implementarse dentro de su plataforma MetaTrader 5:

//+------------------------------------------------------------------+
//|                                                          ACS.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2024, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/en/users/lynnchris"
#property description "Script that displays previous day metrics on the current chart and predicts market direction."
#property version     "1.0"

#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//| Input parameters                                                 |
//+------------------------------------------------------------------+
input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

//+------------------------------------------------------------------+
//| Main function                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Get previous day's data
   int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

   if(prevDayIndex == -1)
     {
      Print("Error retrieving previous day's data.");
      return;
     }

   prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
   prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
   prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
   prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
   prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

//--- Get today's volume
   currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

//--- Calculate key support and resistance
   keySupport = prevDayLow;  // Support level can be set to the previous day's low
   keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

//--- Manage existing lines (if any)
//ObjectDelete("SupportLine");
//ObjectDelete("ResistanceLine");

//--- Create support line
   if(!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
     {
      Print("Failed to create SupportLine");
     }
   ObjectSetInteger(0, "SupportLine", OBJPROP_COLOR, SupportColor);
   ObjectSetInteger(0, "SupportLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Create resistance line
   if(!ObjectCreate(0, "ResistanceLine", OBJ_HLINE, 0, 0, keyResistance))
     {
      Print("Failed to create ResistanceLine");
     }
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_COLOR, ResistanceColor);
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Determine the day's nature (Bullish or Bearish)
   string marketNature;
   if(prevDayClose > prevDayOpen)
     {
      marketNature = "Bullish";
     }
   else
      if(prevDayClose < prevDayOpen)
        {
         marketNature = "Bearish";
        }
      else
        {
         marketNature = "Neutral";
        }

//--- Compare volumes and determine market sentiment
   string volumeCommentary;
   if(currentDayVolume > prevDayVolume)
     {
      volumeCommentary = "Current day volume is higher than previous day volume. Bullish sentiment may continue.";
     }
   else
      if(currentDayVolume < prevDayVolume)
        {
         volumeCommentary = "Current day volume is lower than previous day volume. Bearish sentiment may follow.";
        }
      else
        {
         volumeCommentary = "Current day volume is equal to previous day volume. Market sentiment remains uncertain.";
        }

//--- Generate market movement commentary
   string marketCommentary;
   if(marketNature == "Bullish")
     {
      marketCommentary = "The market closed higher yesterday, indicating bullish sentiment. Look for potential continuation patterns.";
     }
   else
      if(marketNature == "Bearish")
        {
         marketCommentary = "The market closed lower yesterday, indicating bearish sentiment. Consider taking positions that align with this trend.";
        }
      else
        {
         marketCommentary = "The market showed neutrality with little change. Watch for potential breakout opportunities.";
        }

//--- Display the information in a table-like format on the chart
   string textOutput = "Previous Day Analytics:\n";
   textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
   textOutput += "Close: " + DoubleToString(prevDayClose, 5) + "\n";
   textOutput += "High: " + DoubleToString(prevDayHigh, 5) + "\n";
   textOutput += "Low: " + DoubleToString(prevDayLow, 5) + "\n";
   textOutput += "Volume (Prev Day): " + DoubleToString(prevDayVolume, 0) + "\n";
   textOutput += "Volume (Current Day): " + DoubleToString(currentDayVolume, 0) + "\n";
   textOutput += "Support: " + DoubleToString(keySupport, 5) + "\n";
   textOutput += "Resistance: " + DoubleToString(keyResistance, 5) + "\n";
   textOutput += "\nMarket Nature: " + marketNature + "\n";
   textOutput += volumeCommentary + "\n";
   textOutput += marketCommentary;

// Draw the text output on the chart
   Comment(textOutput);
  }

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


Desarrollo del código

Desarrollamos nuestro código utilizando MetaEditor. En este caso optamos por crear un script. A continuación, describiremos los pasos para lograrlo.

1. Propiedades

Estas propiedades le ayudan a dar el crédito adecuado a su trabajo y compartir detalles importantes sobre el autor o la fuente del guión. También especifican la versión del script, lo que es útil para realizar un seguimiento de las actualizaciones y garantizar que los usuarios estén al tanto de cualquier cambio.

#property copyright "2024, MetaQuotes Software Corp"
#property link      "https://www.mql5.com/en/users/lynnchris"
#property version   "1.0"

2. Incluir las bibliotecas necesarias

Esta línea incluye la biblioteca Trade.mqh.

Trade: Este término probablemente se refiere a las diversas funciones, clases u objetos diseñados para gestionar las operaciones comerciales. Estos elementos facilitan la ejecución de operaciones, la comprobación del estado de las mismas y la gestión de tareas relacionadas dentro de sus algoritmos de trading.

.mqh: Esta extensión de archivo se utiliza para los archivos de encabezado MetaQuotes. En MetaTrader, los archivos .mqh sirven para almacenar código reutilizable, incluyendo funciones, clases o bibliotecas. Este código se puede incorporar fácilmente a otros programas MQL, lo que promueve la eficiencia y la modularidad.

#include <Trade\Trade.mqh>

3. Input Parameters: 

Un parámetro de entrada es una variable definida en un programa MQL5 que los usuarios pueden ajustar en el probador de estrategias o en la configuración de entrada de un EA sin cambiar el código subyacente.

The script also allows for user input parameters, providing traders the flexibility to tailor their analysis to their preferences. Esto significa que pueden elegir símbolos o colores específicos para las líneas de soporte y resistencia, lo que hace que la herramienta sea más personalizada y fácil de leer.

input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

A continuación, abordamos las variables globales. Estas variables globales almacenan información sobre la evolución de los precios del día anterior y el volumen del día actual. Las variables keySupport y keyResistance se inicializan más adelante en el código.

double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

4. Funcionalidad principal:

Esta es la función principal donde comienza la ejecución del script. Todo lo que se encuentre dentro de esta función se ejecutará cuando se ejecute el script. Los scripts son programas de ejecución única que realizan tareas específicas en el entorno MetaTrader 5, como colocar una operación, modificar órdenes o generar señales.

void OnStart()

En primer lugar, recuperamos los datos del día de negociación anterior, incluidos los niveles de precios y el volumen. Este paso identifica el índice de la última barra diaria completada, lo cual es esencial para analizar el comportamiento reciente del mercado y tomar decisiones de trading informadas.

int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

Comprueba si el índice del día anterior se recuperó correctamente. Si no es así, muestra un mensaje de error y sale de la función.

if (prevDayIndex == -1)
{
   Print("Error retrieving previous day's data.");
   return;
}

A continuación, recupera los datos del día anterior:

prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

Obtener el volumen del día actual

Esto recupera el volumen del día actual.

currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

Calcular los niveles de soporte y resistencia

El soporte se establece como el mínimo del día anterior, mientras que la resistencia se establece como el máximo del día anterior.

keySupport = prevDayLow;  // Support level can be set to the previous day's low
keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

Crear líneas de soporte y resistencia

Esto intenta crear una línea horizontal que represente el soporte. Si falla, muestra un mensaje de error. El mismo proceso se aplica a la línea de resistencia.

if (!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
{
   Print("Failed to create SupportLine");
}

 Determinar la naturaleza del mercado

La siguiente parte determina si el mercado fue alcista, bajista o neutral basándose en los precios de apertura y cierre del día anterior:

if (prevDayClose > prevDayOpen)
{
   marketNature = "Bullish";
}
else if (prevDayClose < prevDayOpen)
{
   marketNature = "Bearish";
}
else
{
   marketNature = "Neutral";
}

Comentario

La función Comment() permite mostrar texto descriptivo directamente en el gráfico de operaciones. Esto se puede utilizar para mostrar información importante, como valores actuales, señales de trading o mensajes de estado.

Aquí, un comentario sobre los volúmenes actuales frente a los del día anterior:

if (currentDayVolume > prevDayVolume)
{
   volumeCommentary = "Current day volume is higher...";
}
else if (currentDayVolume < prevDayVolume)
{
   volumeCommentary = "Current day volume is lower...";
}
else
{
   volumeCommentary = "Current day volume is equal...";
}

El script utiliza la función Comment para escribir un mensaje limpio y formateado en el gráfico que muestra la apertura, la máxima, la mínima, el cierre y los volúmenes del día anterior y del día actual. Esto sirve como punto de referencia inmediato para los operadores.

if (marketNature == "Bullish")
{
   marketCommentary = "The market closed higher yesterday...";
}
else if (marketNature == "Bearish")
{
   marketCommentary = "The market closed lower yesterday...";
}
else
{
   marketCommentary = "The market showed neutrality...";
}

Tabla de visualización

Por último, crea un mensaje de texto que contiene todos los datos recopilados y lo muestra en el gráfico:

string textOutput = "Previous Day Analytics:\n";
textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
...
textOutput += marketCommentary;

// Draw the text output on the chart
Comment(textOutput);


Pruebas

A continuación se detallan los pasos para implementar correctamente el script.

1: Abra MetaTrader 5 y navegue hasta MetaEditor.

2: En MetaEditor, cree un nuevo script seleccionando Nuevo > Script.

3: Copie y pegue el script proporcionado en el editor.

4: Compila el script usando el botón de compilación. Asegúrese de que no haya errores.

5: Regrese a su plataforma MetaTrader, busque el script en el panel del Navegador, en "Scripts", y arrástrelo al gráfico deseado. Tras arrastrar el script al gráfico, este es el resultado que obtuve:

  Resultado de la prueba 1

Figura 3. Resultado 1 de la prueba de herramientas

6: Establezca cualquier parámetro de entrada personalizado (si lo desea) en el cuadro de diálogo que aparece. A continuación se muestra un GIF que demuestra cómo cambié algunos parámetros en MetaTrader 5.

  Cambiar parámetros

Figura 4. Configuración de parámetros

Después de ejecutar el script, se obtuvieron los siguientes resultados. Estoy proporcionando tres GIF diferentes de los distintos pares en los que probé el script. El primer GIF muestra un par de divisas, USDSEK, que produjo los resultados que se muestran a continuación.

  RESULTADO DE LA HERRAMIENTA

Figura 5. Resultado 2 de la prueba de herramientas

En la figura 5 anterior, la herramienta presenta eficazmente la información requerida. Indica un sentimiento de mercado alcista anticipado. El mercado experimentó inicialmente un ligero movimiento bajista, pero a medida que avanzaba el día exhibió un fuerte impulso alcista.

En segundo lugar, también analizamos el índice Crash 900.

  Resultado de la prueba

Figura 6. Resultado 3 de la prueba de herramientas

En la figura 6 del índice Crash 900, la información también se presentó con claridad, revelando un sentimiento bajista que se desarrolló rápidamente y sin ninguna reversión.

Por último, analizamos el par USDCNH, como se detalla a continuación.

  Resultado

Figura 7. Resultado 4 de la prueba de herramientas

En la figura 7 anterior, la herramienta funcionó excepcionalmente bien, lo que indica un movimiento alcista del mercado. El mercado respondió en consecuencia, respetando tanto los niveles de resistencia como los de soporte.

Además, durante el proceso de prueba de la herramienta, la figura 3 (índice Boom 300) presenta algunos resultados notables. Ilustra claramente los precios iniciales y finales del día anterior, proporcionando información valiosa sobre el análisis y el comportamiento del mercado. Los datos también indican una tendencia bajista, como lo identifica la navegación de la herramienta.


Conclusión

Después de haber desarrollado y probado con éxito la herramienta, puedo decir con confianza que la herramienta de comentarios analíticos es sólida. Su capacidad para analizar rápidamente los movimientos anteriores del mercado, identificar niveles de soporte y resistencia, calcular los volúmenes comerciales y brindar información sobre los movimientos de precios futuros esperados en función de la información recopilada es impresionante.

 La información se presenta con claridad, lo que mejora la usabilidad. Animo a los traders a integrar sus propias estrategias comerciales junto con esta herramienta para mejorar sus resultados y procesos de toma de decisiones. Además, he observado que la herramienta funciona de manera óptima a medida que avanza el día, ya que calcula volúmenes de tiempo actuales que pueden ser necesarios para un análisis preciso.

Fecha Nombre de la herramienta   Descripción Versión  Actualizaciones  Notas
01/10/24 Proyector de gráficos Script para superponer la acción del precio del día anterior con efecto fantasma.  1.0 Lanzamiento inicial Primera herramienta en Lynnchris Toolchest
18/11/24 Comentario analítico Proporciona información del día anterior en formato tabular y anticipa la dirección futura del mercado.  1.0 Lanzamiento inicial Segunda herramienta del conjunto de herramientas Lynnchris

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

Archivos adjuntos |
Utilizando redes neuronales en MetaTrader Utilizando redes neuronales en MetaTrader
En el artículo se muestra la aplicación de las redes neuronales en los programas de MQL, usando la biblioteca de libre difusión FANN. Usando como ejemplo una estrategia que utiliza el indicador MACD se ha construido un experto que usa el filtrado con red neuronal de las operaciones. Dicho filtrado ha mejorado las características del sistema comercial.
Uso de reglas de asociación en el análisis de datos de Forex Uso de reglas de asociación en el análisis de datos de Forex
¿Cómo aplicar las reglas predictivas del análisis minorista de supermercados al mercado Forex real? ¿Cómo se relacionan las compras de galletas, leche y pan con las transacciones bursátiles? El artículo analiza un enfoque innovador del trading algorítmico basado en el uso de reglas de asociación.
Particularidades del trabajo con números del tipo double en MQL4 Particularidades del trabajo con números del tipo double en MQL4
En estos apuntes hemos reunido consejos para resolver los errores más frecuentes al trabajar con números del tipo double en los programas en MQL4.
Desarrollamos un Asesor Experto multidivisas (Parte 20): Ordenando la cadena de etapas de optimización automática de proyectos (I) Desarrollamos un Asesor Experto multidivisas (Parte 20): Ordenando la cadena de etapas de optimización automática de proyectos (I)
Ya hemos creado bastantes componentes que ayudan a organizar la optimización automática. Durante la creación, seguimos la estructura cíclica tradicional: desde la creación de código mínimo funcional hasta la refactorización y la obtención de código mejorado. Es hora de empezar a limpiar nuestra base de datos, que también es un componente clave en el sistema que estamos creando.