Discussão do artigo "Sincronização de vários gráficos num instrumento em diferentes timeframes"

 

Novo artigo Sincronização de vários gráficos num instrumento em diferentes timeframes foi publicado:

Muitas vezes, para tomar decisões, no processo de negociação, é necessário analisar simultaneamente gráficos em vários timeframes. Ao mesmo tempo, há objetos de análise gráfica nos gráficos. Implementar os mesmos objetos em todos os gráficos é incômodo. Neste artigo, proponho automatizar a clonagem de objetos em gráficos.


Autor: Dmitriy Gizlyk

 
Bom artigo, especialmente para quem usa análise técnica e cria muitos objetos em diferentes gráficos. Consegui sincronizar objetos gráficos, graças ao autor. Como um desenvolvimento adicional desse tópico, é possível sincronizar indicadores criados em gráficos diferentes. A única questão é se essa tarefa é relevante. Talvez não seja necessário transferir um indicador com os mesmos parâmetros para outro período de tempo, mas sim alterá-los. Também acho que a função de "desvincular" da clonagem seria útil, ou seja, o objeto "desvinculado" não seria transferido para outros gráficos.
 
Estou procurando sincronizar os níveis de suporte e resistência em diferentes períodos de tempo, ou seja, o suporte adicionado em um período de tempo aparece em todos os outros gráficos de período de tempo
 
Tapani:
Estou procurando sincronizar os níveis de suporte e resistência em diferentes períodos de tempo, ou seja, o suporte adicionado em um período de tempo aparece em todos os outros gráficos de período de tempo

Olá,
Como você adicionou os níveis de resistência no gráfico? Como uma linha horizontal ou uma caixa retangular?

 

Existe uma maneira de optar por clonar apenas determinados tipos de objetos e ignorar o restante? Além disso, como eu poderia clonar também as propriedades de visibilidade dos objetos, pois parece que a configuração de visibilidade dos objetos clonados não é copiada e precisa ser definida manualmente de novo nos outros gráficos.

Muito obrigado

 
yousurfer:

Existe uma maneira de optar por clonar apenas determinados tipos de objetos e ignorar o restante? Além disso, como eu poderia clonar também as propriedades de visibilidade dos objetos, pois parece que a configuração de visibilidade dos objetos clonados não é copiada e precisa ser definida manualmente de novo nos outros gráficos.

Muito obrigado

Olá, yousurfer.
Se você quiser selecionar objetos por alguma propriedade, poderá adicioná-la a esta função

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(!( check object property to copy) ) // se você não quiser copiar esse objeto
// continuar;// ir para o próximo 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;
  }

Atenciosamente,
Dmitriy.

 
Você poderia criar um para o MT4? De preferência, com filtro por objetos (clone apenas horizontal ou de tendência...) Há um similar para o MT4, mas o código está fechado, nenhum filtro pode ser anexado.
 

Com 8 gráficos abertos de um instrumento com TF diferente, o indicador fica visivelmente mais lento e trava o MT, por exemplo, um quadrado recém-desenhado chega a outros gráficos com um atraso de 5 a 10 segundos. Qual pode ser o motivo?

Obrigado!

 
Kofa:
Você poderia criar um para o MT4? De preferência, com um filtro nos objetos (clone somente horizontal ou tendência...) Há um semelhante para o MT4, mas o código está fechado, não é possível adicionar o filtro.

Para usá-lo no MT4, basta alterar a extensão do arquivo do indicador de mq5 para mq4 e recompilar o indicador.
Para adicionar a filtragem de objetos, você precisa adicionar os parâmetros

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

e corrigir OnChartEvent com a adição da função CheckToClone.

//+------------------------------------------------------------------+
//| Função 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:

Com 8 gráficos abertos de um instrumento com TF diferente, o indicador fica visivelmente mais lento e trava o MT, por exemplo, um quadrado recém-desenhado chega a outros gráficos com um atraso de 5 a 10 segundos. Qual poderia ser o motivo?

Obrigado!

Boa tarde.

A questão é que os indicadores funcionam em um thread e um grande número de indicadores no terminal pode realmente tornar seu trabalho mais lento. Além disso, o trabalho com elementos gráficos é bastante trabalhoso para o terminal. Para uso em um grande número de gráficos, eu recomendaria reformatar o programa em um Expert Advisor sem nenhuma perda de funcionalidade. Mas isso só funcionará se você não usar os Expert Advisors ao mesmo tempo que a análise. Porque o terminal tem uma restrição de não mais do que um Expert Advisor por gráfico.

 
Dmitriy Gizlyk:

Para usá-lo no MT4, basta alterar a extensão do arquivo do indicador de mq5 para mq4 e recompilar o indicador.


Obrigado por sua rápida resposta e ajuda. ChartIndicatorGet, CloneAllObjects e outras funções não são compatíveis com o mq4. Em geral, 9 erros durante a compilação. Não tenho nenhuma experiência em programação. Por favor, me ajude.