Discussão do artigo "Visualize isto! Biblioteca gráfica em linguagem MQL5 como equivalente a plot de R" - página 3

 
Roman Konopelko:

Bom dia!

O modo CustomPlotFunction é implementado na biblioteca para fins semelhantes, o exemplo de uso implementa aproximadamente o que você está interessado.

P.S. Mais detalhes sobre isso estão escritos no fórum .


Ótimo, obrigado :)
[Excluído]  

Existe uma maneira de plotar os rótulos do eixo X como uma série de data e hora?

 
Pablo Rego:

Existe uma maneira de plotar os rótulos do eixo X como uma série de data e hora?

Exemplo:

#include <Graphics/Graphic.mqh>
double arrX[];
double arrY[];
//---
string TimeFormat(double x,void*data)
  {
   return(TimeToString((datetime)arrX[ArraySize(arrX)-(int)x-1]));
  }
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   CopyRates(Symbol(),Period(),0,100,rates);
   ArraySetAsSeries(rates,true);
   int size=ArraySize(rates);
   ArrayResize(arrX,size);
   ArrayResize(arrY,size);
   for(int i=0; i<size;++i)
     {
      arrX[i]=(double)rates[i].time;
      arrY[i]=rates[i].close;
     }
   CGraphic graphic;
   graphic.Create(0,"Rates",0,30,30,780,380);
   CCurve *curve=graphic.CurveAdd(arrY,CURVE_LINES,"Close");
   CAxis *xAxis=graphic.XAxis();
   xAxis.AutoScale(false);
   xAxis.Type(AXIS_TYPE_CUSTOM);
   xAxis.ValuesFunctionFormat(TimeFormat);
   xAxis.DefaultStep(20.0);
   curve.Visible(true);
   graphic.Redraw();
   graphic.Update();
  }

Resultado:


 

É possível desenhar rótulos no eixo X em ordem inversa (reversa)?

Para ver índices de séries temporais, por exemplo.

 
Dennis Kirichenko:

É possível desenhar rótulos no eixo X em ordem inversa (reversa)?

Para ver os índices de séries temporais, por exemplo.

Não há uma solução rápida na forma de chamar uma função que fará tudo sozinha. Como no , você precisa criar sua própria função para desenhar valores e passá-la para o método ValuesFunctionFormat.
 

Existe alguma biblioteca semelhante no mql4?

 

Você pode me dizer se é possível definir a transparência do plano de fundo, talvez na classe de base, talvez algo a ser ajustado?

 
Maxim Dmitrievsky:

Você pode me dizer se é possível definir a transparência do plano de fundo, talvez na classe base? Não consegui encontrar isso facilmente


Somente se você modificar a classe CGraphic (somente a edição direta é incorreta, você precisa de herança; o exemplo aqui é apenas para agilizar).

//+------------------------------------------------------------------+
//| Criar gráfico|
//+------------------------------------------------------------------+
bool CGraphic::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
//--- verificar o nome do objeto 
   if(ObjectFind(chart,name)>=0)
      return(false);
//--- cálculo preliminar
   int width=x2-x1;
   int height=y2-y1;
   if(width>0 && height>0)
     {
      m_width=width;
      m_height=height;
      //--- criar objeto
      if(!ObjectCreate(chart,name,OBJ_BITMAP_LABEL,subwin,0,0))
         return(false);
      //--- personalizar objeto
      if(!ObjectSetInteger(chart,name,OBJPROP_XDISTANCE,x1) || 
         !ObjectSetInteger(chart,name,OBJPROP_YDISTANCE,y1))
        {
         ObjectDelete(chart,name);
         return(false);
        }
      //--- anexar objeto
      if(!m_canvas.Attach(chart,name,width,height,COLOR_FORMAT_ARGB_NORMALIZE))
        {
         ObjectDelete(chart,name);
         return(false);
        }
     }
//--- sucesso
   return(true);
  }

Depois disso, você pode controlar a cor:

   CGraphic graphic;
   graphic.Create(0,"Graphic",0,10,10,680,360);

   graphic.BackgroundColor(ColorToARGB(clrRed,150));
   graphic.GridBackgroundColor(ColorToARGB(clrBlue,150));

:

Exemplo

 
Vladimir Karputov:

Somente se você fizer uma alteração na classe CGraphic (somente a edição direta está errada, você precisa de herança; o exemplo aqui é apenas para agilizar)

Depois disso, você pode controlar a cor:

:



Obrigado, vou lidar com a herança :)

 

Como fazer para que, ao alterar as entradas no Expert Advisor(REASON_PARAMETERS), o gráfico não gere um erro e seja atualizado com os novos parâmetros? Se eu trocar de tf ou mudar os símbolos, tudo estará bem; se eu mudar os parâmetros, o erro será ponteiro inválido. O número de curvas muda nos parâmetros e é neles que os ponteiros estão incorretos.

Se não estiver claro, posso lhe dar um exemplo)