English Русский 中文 Deutsch 日本語 Português
Alerta y comentario para indicadores externos.

Alerta y comentario para indicadores externos.

MetaTrader 4Ejemplos | 4 mayo 2016, 17:34
1 425 0
Vladimir
Vladimir

Introducción

La práctica muestra que los desarrolladores de indicadores no siempre incluyen la posibilidad de mostrar alertas o comentarios en un código de indicador que resulten en peticiones de añadir la posibilidad de mostrar señales en un indicador.

Posibilidades de MQL4 para mostrar la información de los indicadores

Las posibilidades del lenguaje de programación de MQL4 no incluye el uso extendido de búfers de indicadores, por ejemplo, extendiéndolos añadiendo comentarios o alertas, que podría ser una ventaja al simplificar la creación de un código de programa Por otro lado, MQL4 permite la lectura de la ubicación de cualquier objeto y la obtención de todas sus características.

En este artículo me gustaría mostrar el método para conseguir datos en una señal de un indicador adjunto a un gráfico, y mostrar sus comentarios, alertas, o crear una variable global para su futuro uso con finalidad informativa, por ejemplo para pasarla a un Asesor Experto.

Todas las marcas que se dibujan en un gráfico utilizan Wingdings y códigos de flecha. Es por eso que no es difícil conseguir información sobre una marca que se dibuje en un gráfico. Por cierto, si el autor de un indicador incluye una descripción bastante informativa del objeto OBJ_ARROW, un usuario puede identificar fácilmente una señal. Un ejemplo de esto es la descripción de las marcas que ofrecen los creadores de las clásicas velas japonesas. En el funcionamiento estándar de su indicador, un usuario sólo necesita poner el cursor del ratón sobre la marca para obtener una ventana de ayuda emergente con un texto correspondiente.



Muestra estándar de una señal


En MQL4 puede utilizar varias opciones incluidas para una presentación de los datos más informativa.

Entre los idiomas ordene la función

double ObjectGet (string name, int prop_id)

devuelve el valor de una propiedad específica de un objeto. Para obtener los datos de un error, llame a la función GetLastError()
Vea también ObjectSet().

Parámetros:
name: nombre del objeto.
prop_id: identificador de las propiedades de un objeto. Puede ser cualquier valor de la lista de propiedades del objeto.

Los identificadores de las propiedades de un objeto se utilizan en las funciones ObjectGet() y ObjectSet(). Puede ser cualquiera de estos valores:

Constante Valor Tipo Descripción
OBJPROP_TIME10datetimeRecibe/configura la primera coordinada de tiempo
OBJPROP_PRICE11doubleRecibe/configura la primera coordinada de precio
OBJPROP_TIME22datetimeRecibe/configura la segunda coordinada de tiempo
OBJPROP_PRICE23doubleRecibe/configura la segunda coordinada de precio
OBJPROP_TIME34datetimeRecibe/configura la tercera coordinada de tiempo
OBJPROP_PRICE35doubleRecibe/configura la tercera coordinada de precio
OBJPROP_COLOR6colorRecibe/configura el color de un objeto
OBJPROP_STYLE7intRecibe/configura el estilo de línea de un objeto
OBJPROP_WIDTH8intRecibe/configura la anchura de línea de un objeto
OBJPROP_BACK9boolRecibe/configura el fondo de representación de un objeto
OBJPROP_RAY10boolRecibe/configura la bandera de las propiedades de una gama para los objetos del tipo OBJ_TREND y parecidos
OBJPROP_ELLIPSE11boolRecibe/configura la bandera para mostrar la elipse completa de OBJ_FIBOARC
OBJPROP_SCALE12doubleRecibe/configura el valor de la escala de un objeto
OBJPROP_ANGLE13doubleRecibe/configura el valor del ángulo en grados para OBJ_TRNDBYANGLE

OBJPROP_ARROWCODE

14

int

Recibe /configura el código de la flecha de OBJ_ARROW. Puede ser uno de los símbolos wingdings o un código de flechas predefinido.

OBJPROP_TIMEFRAMES15intRecibe/establece la representación de objetos en varios periodos. Puede ser una combinación de varias constantes de visibilidad de objetos
OBJPROP_DEVIATION16doubleRecibe/configura el valor de desvío de OBJ_STDDEVCHANNEL
OBJPROP_FONTSIZE100intRecibe/configura el tamaño de fuente de OBJ_TEXT y OBJ_LABEL
OBJPROP_CORNER101intRecibe/configura el número de ángulo de vinculación para OBJ_LABEL. Obtiene valores de 0-3.
OBJPROP_XDISTANCE102intRecibe/configura la distancia de la coordinada X en píxeles para el ángulo relativo de vinculación de OBJ_LABEL
OBJPROP_YDISTANCE103intRecibe/configura la distancia de la coordinada Y en píxeles para el ángulo relativo de vinculación de OBJ_LABEL
OBJPROP_FIBOLEVELS200intRecibe/configura el número de niveles del objeto Fibonacci. Puede ser de 1 a 32.
OBJPROP_LEVELCOLOR201colorRecibe/configura la línea de color del nivel de un objeto.
OBJPROP_LEVELSTYLE202intRecibe/configura el estilo de línea del nivel de un objeto.
OBJPROP_LEVELWIDTH203intRecibe/configura la anchura de línea del nivel de un objeto.
OBJPROP_FIRSTLEVEL+n210+nintRecibe/configura el número de nivel del objeto, en el que n es el índice del nivel instalado/recibido. Puede ser de 0 a 31.

Por eso se va a utilizar el parámetro OBJPROP_ARROWCODE para encontrar el objeto necesario y se recibirá la lista de todos los objetos. Después de eso, se seleccionan los objetos necesarios en la gama y se muestra la información en la forma necesaria.

Luego se crea un código para recibir la información de los nombres de las velas para el indicador "japón". Se obtiene el siguiente código:

int    obj_total=ObjectsTotal(); // Define the total number of objects on a chart
  for(int i=0;i<obj_total;i++) // Loop of going through all objects with the purpose of finding necessary ones
    {
            if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE) // reading the code

Primero hay que definir cómo se lidiará con Wingdings y configurar en consecuencia los parámetros del código de programa. En este ejemplo, se manejará la parte de la tabla de Wingdings que empieza con 100.

if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>100&&
                     ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars])

La variable ExtBars se utiliza para definir el número de las últimas barras para encontrar el objeto dibujado en el gráfico.

Ahora se mostrarán Alertas y (o) Comentarios.

       if (ExtAlert==true){
                        Alert(Symbol(),Period()," ",
                              TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ",
                              TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":",
                              TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ",
                              ObjectName(i));}
       if (ExtComment==true){
                        Comment("\n","\n","\n",
                              Symbol(),Period()," ",
                              TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ",
                               TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":",
                                TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ",
                                ObjectName(i));}

En la línea de comentarios

("\n","\n","\n",

se utiliza para mostrar la información en la tercera línea de una pantalla.

Si es necesario, puede incluir enviar la información a las variables globales para utilizarlas en el Asesor Experto. Aunque se elimina la violación de los derechos de autor de los autores de los indicadores, se obtiene la posibilidad de utilizar la información en las alertas para nuestras propias intenciones y no hay que pedir a los autores la autorización para modificar los códigos.

Utilizando el método descrito, se obtienen los siguientes resultados:


Resultado del funcionamiento del indicador que muestra información externa.


En la forma análoga, el código funciona con el indicador ExCandles2. Ese es el segundo indicador publicado en base MQL4; se probó junto al código publicado.

Conclusión

Aquí está el código de fuente del indicador para mostrar información sobre la aparición de las señales de los indicadores:

//+------------------------------------------------------------------+
//|                                                  AlertSignal.mq4 |
//|                                  Copyright © 2009, WWW.FIBOOK.RU |
//|                                                 http://fibook.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, FIBOOK.RU"
#property link      "http://fibook.ru"

#property indicator_chart_window
extern int ExtBars=10;        // Number of last bars for calculation
extern int ExtArrow=100;      // Code number in the "wingdings" table for the count start
extern bool ExtAlert=true;    // Switch of Alerts displaying
extern bool ExtComment=true;  // Switch of Comments displaying
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if (per == Time[0]) return; // Correct once per a period
      per = Time[0];

   int cod=0;
//----

int    obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++)
    {
            if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>ExtArrow&&
                     ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars])
                {
                  if (ExtAlert==true){
                        Alert(Symbol(),Period()," ",
                              TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ",
                              TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":",
                              TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ",
                              ObjectName(i));}
                  if (ExtComment==true){
                        Comment("\n","\n","\n",
                              Symbol(),Period()," ",
                              TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".",
                              TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ",
                               TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":",
                                TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ",
                                ObjectName(i));}
                }
     }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+


Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1568

Archivos adjuntos |
AlertSignal.mq4 (6.31 KB)
Interfaces gráficas V: Barra de desplazamiento vertical y horizontal (Capítulo 1) Interfaces gráficas V: Barra de desplazamiento vertical y horizontal (Capítulo 1)
Seguimos analizando el proceso de desarrollo de la librería para la creación de las interfaces gráficas en el entorno de los terminales de trading MetaTrader. En el primer capítulo de la quinta parte de la serie vamos a desarrollar las clases para la creación de los controles como las barras de desplazamiento verticales y horizontales.
Interacción entre MetaTrader 4 y MATLAB Engine (Máquina virtual MATLAB) Interacción entre MetaTrader 4 y MATLAB Engine (Máquina virtual MATLAB)
El artículo contiene las consideraciones en relación a la creación de una librería DLL: el envase que habilitará la interacción de MetaTrader 4 y el paquete de escritorio matemático de MATLAB. Describe los errores y las maneras de resolverlos. Este artículo está destinado a programadores preparados en C/C++ que utilizan el compilador Borland C++ Builder 6.
Kit del trader: Indicadores para el diseño Kit del trader: Indicadores para el diseño
Este artículo incluye las principales tareas para el diseño de los indicadores, así como soluciones y automatizaciones.
Canales. Modelos avanzados. Ondas Wolfe Canales. Modelos avanzados. Ondas Wolfe
El artículo describe las reglas de fabricación de patrones de las Ondas Wolfe. Aquí encontrará los detalles de construcción y reglas para una fabricación precisa, lo que ayuda a encontrar las formaciones correctas de las ondas de forma rápida y correcta.