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

 
Roman Konopelko:

Boa tarde, como exatamente você tentou redesenhar o gráfico?

Se você só precisa alterar os dados de uma curva específica, aqui está um exemplo:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
voidOnStart()
  {
//--- dados 1
   double x1[]={-10,-4,-1,2,3,4,5,6,7,8};
   double y1[]={-5,4,-10,23,17,18,-9,13,17,4};
//--- dados 2
   double x2[]={-10,-10,10,10};
   double y2[]={-10,10,-10,10};
//--- gráfico
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);
//--- Pontos
   CCurve *curve=graph.CurveAdd(x1,y1,CURVE_LINES);
   graph.CurvePlot(0);
   graph.Update();
   Sleep(1000);
   curve.Update(x2,y2);
   graph.Redraw(true);
   graph.Update();
   Sleep(1000);
  }
P.S. Há um tópico sobre a biblioteca de gráficos no fórum, e essa questão já foi levantada lá.

Por exemplo, aqui está um código que cria um gráfico aleatório em cada tick:

#include <Graphics\Graphic.mqh>

 double Xg[10]={0,1,2,3,4,5,6,7,8,9};
 double Yg[10]={0,0,0,0,0,0,0,0,0,0};

//------------------------------------------ 
int OnInit()
  {
   graf(); //desenhar o gráfico
//---
   return(INIT_SUCCEEDED);
  }
//------------------------------------------ 
void OnTick()
  {  
   for(int i=0; i<=9; i++){
    Yg[i]=(int)MathRand()/1000;  
   }
   ObjectDelete(0,"Graph");//excluir o gráfico, sei que essa não é a abordagem correta, mas não consigo fazer isso de outra forma.
   graf(); //desenhar um novo gráfico
  }
//-------------------------------------------------------------
void graf(){
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);

   CCurve *curve=graph.CurveAdd(Xg,Yg,CURVE_LINES);
   graph.CurvePlotAll();
   graph.Update(true);
}
//-------------------------------------------------------------

Não consigo descobrir como atualizar os dados sem excluir o gráfico. Por favor, diga-me quem sabe como fazer isso.

 

Por favor, alguém sabe como alterar os tamanhos e estilos de fonte das assinaturas nessa biblioteca? - Tentei o FontSet, mas não funcionou.....

 
transcendreamer:

Por favor, alguém sabe como alterar os tamanhos e estilos de fonte das assinaturas nessa biblioteca? - Tentei o FontSet, mas não funcionou.....

Abra o código-fonte da biblioteca e, na busca, digite font.

 
fxsaber:

Abra o código-fonte da bibla e digite font na pesquisa.

Você pode fazer o shardcode diretamente lá? 😁

Achei que houvesse algum método pronto.

Na verdade, ao pesquisar por fonte, encontrei o FontSet, mas ele se recusa a cooperar.

 
transcendreamer:

Por favor, alguém sabe como alterar os tamanhos e estilos de fonte das assinaturas nessa biblioteca? - Tentei o FontSet, mas não funcionou.....

Para legendas na legenda?

graphicL.HistorySymbolSize(Point_K);//Get/Set o tamanho do símbolo dos símbolos dos símbolos
 
Aleksey Vyazmikin:

Para assinaturas na legenda?

Obrigado.

Na verdade, também para os eixos.

 
-vallen- #:

Isso está claro no script, mas como atualizar no Expert Advisor? Por exemplo, aqui está um código que cria um gráfico aleatório a cada tick:

Não consigo descobrir como atualizar os dados sem excluir o gráfico. Por favor, diga-me quem sabe como fazer isso.

Alguma resposta?

 

Изначально класс CCanvas содержал только два режима отрисовки графических примитивов   со сглаживанием (antialiasing, AA) и без него. Затем были добавлены новые функции для создания примитивов на основе алгоритма Ву:

Faltam métodos com suavização para Arc() e Pie().

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / Arc
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / Arc
  • www.mql5.com
Arc(int,int,int,int,int,int,int,int,const uint) - CCanvas - Пользовательская графика - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Também preciso desses métodos de preenchimento com bordas suavizadas:

   void              FillTriangle(int x1,int y1,int x2,int y2,int x3,int y3,const uint clr);
   void              FillPolygon(int &x[],int &y[],const uint clr);
   void              FillCircle(int x,int y,int r,const uint clr);
   void              FillEllipse(int x1,int y1,int x2,int y2,const uint clr);
   void              Fill(int x,int y,const uint clr);
   void              Fill(int x,int y,const uint clr,const uint threshould);

//---

Atualmente, mesmo que você primeiro desenhe um círculo com preenchimento usando o método FillCircle() e depois trace ao redor dele usando o método CircleWu(), a suavização é parcialmente perdida.

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / FillCircle
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / FillCircle
  • www.mql5.com
FillCircle(int,int,int,const uint) - CCanvas - Пользовательская графика - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Anatoli Kazharski #:

Você também precisa desses métodos de preenchimento de bordas suaves:

//---

Atualmente, mesmo que você primeiro desenhe um círculo com um preenchimento usando o método FillCircle() e, em seguida, trace ao redor dele usando o método CircleWu(), a suavização será parcialmente perdida.

Todos os métodos de suavização dependem muito da opacidade da linha. Com cerca de 50% de opacidade, tudo se torna sem serrilhado e apresenta artefatos.