Discusión sobre el artículo "Sincronización de varios gráficos del mismo símbolo en timeframes diferentes"

 

Artículo publicado Sincronización de varios gráficos del mismo símbolo en timeframes diferentes:

Para tomar decisiones sobre la realización de las transacciones, a menudo es necesario analizar simultáneamente los gráficos en el proceso del trading. Además, los gráficos disponen de los objetos del análisis gráfico. Es bastante incómodo colocar los mismos objetos en todos los gráficos. En este artículo, yo propongo automatizar la clonación de los objetos en los gráficos.

  1. Procesamiento de los eventos del gráfico. Cuando aparece el evento de la creación o del cambio de un objeto gráfico, el programa lee la información desde el gráfico sobre el objeto modificado y pasa estos datos a todos los gráficos de la lista creada anteriormente.

Autor: Dmitriy Gizlyk

 
Buen artículo, especialmente para aquellos que utilizan el análisis técnico y crear muchos objetos en diferentes gráficos. Conseguí sincronizar objetos gráficos, gracias al autor, como desarrollo posterior de este tema es posible sincronizar indicadores creados en diferentes gráficos. La única pregunta es si tal tarea es relevante. Tal vez no sea necesario transferir un indicador con los mismos parámetros a otro marco temporal, sino cambiarlos. También creo que la función de "desvinculación" de la clonación sería útil, es decir, el objeto "desvinculado" no se transferiría a otros gráficos.
 
Quiero sincronizar los niveles de soporte y resistencia en diferentes marcos temporales, es decir, el soporte añadido en un marco temporal aparece en todos los demás gráficos de marcos temporales.
 
Tapani:
Estoy buscando sincronizar los niveles de soporte y resistencia en diferentes marcos de tiempo, es decir, soporte añadido en un marco de tiempo aparece en todos los gráficos de otros marcos de tiempo

Hola,
¿Cómo ha añadido los niveles de resistencia en el gráfico? ¿Como una línea horizontal o un rectángulo?

 

¿Hay alguna forma de clonar sólo determinados tipos de objetos e ignorar el resto? Además, ¿cómo puedo clonar también las propiedades de visibilidad de los objetos, ya que parece que la configuración de visibilidad de los objetos clonados no se copia y debe configurarse manualmente de nuevo en los otros gráficos?

Muchas gracias.

 
yousurfer:

¿Hay alguna forma de clonar sólo determinados tipos de objetos e ignorar el resto? Además, ¿cómo puedo clonar también las propiedades de visibilidad de los objetos, ya que parece que la configuración de visibilidad de los objetos clonados no se copia y debe establecerse manualmente de nuevo en los otros gráficos?

Muchas gracias

Hola, yousurfer.
Si quieres seleccionar objetos por alguna propiedad puedes añadirla en esta función

string CCopyObject::CreateMessage(long chart)
  {
   string result = NULL;
   int total = ObjectsTotal(chart, 0);
   for(int i=0;i<total;i++)
     {
      string name = ObjectName(chart, i, 0);
//
// if(!( comprueba la propiedad del objeto a copiar) ) // si no quieres copiar este objeto
// continuar;// pasar al siguiente objeto
//
      switch((ENUM_OBJECT)ObjectGetInteger(chart,name,OBJPROP_TYPE))
        {
         case OBJ_HLINE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_HLINE)+"|"+HLineToString(chart, name)+"}";
           break;
         case OBJ_VLINE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_VLINE)+"|"+VLineToString(chart, name)+"}";
           break;
         case OBJ_TREND:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_TREND)+"|"+TrendToString(chart, name)+"}";
           break;
         case OBJ_RECTANGLE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_RECTANGLE)+"|"+RectangleToString(chart, name)+"}";
           break;
        }
     }
   return result;
  }

Saludos,
Dmitriy.

 
¿Podrías hacer uno para MT4? Preferiblemente con filtro por objetos (clon sólo horizontal o tendencia...) Hay uno similar para mt4, pero el código está cerrado, no se puede adjuntar ningún filtro.
 

Con 8 gráficos abiertos de un instrumento con diferentes TF, el indicador se ralentiza notablemente y se cuelga MT, por ejemplo, un cuadrado recién dibujado llega a otros gráficos con un retraso de 5-10 segundos. ¿Cuál puede ser la razón?

Gracias.

 
Kofa:
¿Podrías hacer uno para MT4? Preferiblemente con un filtro sobre objetos (clonar sólo horizontal o tendencia...) Hay uno similar para MT4, pero el código está cerrado, no se puede añadir el filtro.

Para usarlo en MT4, simplemente cambia la extensión del archivo del indicador de mq5 a mq4 y recompila el indicador.
Para añadir el filtro de objetos, necesitas añadir los parámetros

sinput bool    CloneHLine     =  true;
sinput bool    CloneVLine     =  true;
sinput bool    CloneTrend     =  true;
sinput bool    CloneRectangle =  true;

y corregir OnChartEvent con la adición de la función CheckToClone.

//+------------------------------------------------------------------+
//| Función ChartEvent|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   string message1=NULL;
   string message2=NULL;
   int total=0;
//---
   switch(id)
     {
      case CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_OBJECT_DRAG:
        if(!CheckToClone(sparam))
           return;
        message1=CloneObjects.CreateMessage(l_Chart,sparam,0);
        message2=CloneObjects.CreateMessage(l_Chart,sparam,1);
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
          {
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message1);
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message2);
          }
        break;
//---
      case CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,sparam);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DRAG:
        CloneObjects.DrawObjects(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        ObjectDelete(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
     }
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
bool CheckToClone(string name)
  {
  bool result = false;
   
   if(l_Chart>=0 && ObjectFind(l_Chart,name)==0)
     {
      switch((ENUM_OBJECT)ObjectGetInteger(l_Chart,name,OBJPROP_TYPE))
        {
         case OBJ_HLINE:
           result=CloneHLine;
           break;
         case OBJ_VLINE:
           result=CloneVLine;
           break;
         case OBJ_TREND:
           result=CloneTrend;
           break;
         case OBJ_RECTANGLE:
           result=CloneRectangle;
           break;
        }
     }
   return result;
   }
 
XDiavel:

Con 8 gráficos abiertos de un instrumento con diferentes TF, el indicador se ralentiza notablemente y se cuelga MT, por ejemplo, un cuadrado recién dibujado llega a otros gráficos con un retraso de 5-10 segundos. ¿Cuál puede ser la razón?

Gracias.

Buenas tardes.

La cuestión es que los indicadores trabajan en un hilo y un gran número de cualquier indicador en el terminal puede ralentizar mucho su trabajo. Además, el trabajo con elementos gráficos es bastante laborioso para el terminal. Para su uso en un gran número de gráficos, yo recomendaría reformatear el programa en un Asesor Experto sin ninguna pérdida de funcionalidad. Pero sólo funcionará si no utiliza Asesores Expertos al mismo tiempo que el análisis. Porque el terminal tiene una restricción de no más de un Asesor Experto por gráfico.

 
Dmitriy Gizlyk:

Para usarlo en MT4, simplemente cambie la extensión del archivo del indicador de mq5 a mq4 y recompile el indicador.


Gracias por su rápida respuesta y ayuda. ChartIndicatorGet, CloneAllObjects y otras funciones no están soportadas en mq4. En general, 9 errores durante la compilación. Soy cero en programación. Por favor, ayúdeme.