Discusión sobre el artículo "¡Visualice esto! La biblioteca gráfica en MQL5 como un análogo de plot en el lenguaje R" - página 4

 
Roman Konopelko:

Buenas tardes, ¿cómo ha intentado exactamente redibujar el gráfico?

Si sólo necesitas cambiar los datos de una curva concreta, aquí tienes un ejemplo:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
voidOnStart()
  {
//--- dato 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};
//--- datos 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);
//--- Puntos
   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.D. Hay un tema sobre la librería de gráficos en el foro, esta pregunta ya se ha planteado allí.

Está claro en el script, pero ¿cómo actualizarlo en el Asesor Experto? Por ejemplo, aquí hay un código que crea un gráfico aleatorio en 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(); //dibujar el gráfico
//---
   return(INIT_SUCCEEDED);
  }
//------------------------------------------ 
void OnTick()
  {  
   for(int i=0; i<=9; i++){
    Yg[i]=(int)MathRand()/1000;  
   }
   ObjectDelete(0,"Graph");//borrar el gráfico, me doy cuenta de que no es el enfoque correcto, pero no puedo hacerlo de otra manera.
   graf(); //dibujar un nuevo 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);
}
//-------------------------------------------------------------

No consigo averiguar cómo actualizar los datos sin borrar el gráfico. Por favor, dígame quién sabe cómo hacerlo.

 

Por favor, si alguien sabe cómo cambiar los tamaños y estilos de fuente para las firmas en esta biblioteca? - He intentado FontSet - no funcionó.....

 
transcendreamer:

Por favor, si alguien sabe cómo cambiar los tamaños y estilos de fuente para las firmas en esta biblioteca? - He intentado FontSet - no funcionó.....

Abra la fuente de la biblioteca y en la fuente de tipo de búsqueda.

 
fxsaber:

Abra la fuente de la bibla y escriba fuente en la búsqueda.

Directamente la shardcode ahí? 😁

Es que pensaba que había algún método preparado.

En realidad buscando font encontré FontSet pero se niega a cooperar.

 
transcendreamer:

Por favor, si alguien sabe cómo cambiar los tamaños y estilos de fuente para las firmas en esta biblioteca? - He intentado FontSet - no funcionó.....

¿Para las leyendas?

graphicL.HistorySymbolSize(Point_K);//Get/Set el tamaño de los símbolos de los símbolos
 
Aleksey Vyazmikin:

¿Para firmas en la leyenda?

Gracias.

En realidad para los ejes también.

 
-vallen- #:

Está claro en el script, pero ¿cómo actualizar en el Asesor Experto? Por ejemplo, aquí hay un código que crea un gráfico aleatorio en cada tick:

No puedo averiguar cómo actualizar los datos sin borrar el gráfico. Por favor, dime que sabe cómo hacerlo.

¿Alguna respuesta?

 

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

Faltan métodos con suavizado para Arc() y 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
 

También necesito estos métodos de relleno con bordes suavizados:

   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);

//---

Actualmente, incluso si primero se dibuja un círculo con relleno usando el método FillCircle() y luego se traza alrededor usando el método CircleWu(), el suavizado se pierde parcialmente.

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

También necesita estos métodos de relleno de bordes lisos:

//---

Actualmente, incluso si primero dibujas un círculo con relleno usando el método FillCircle() y luego trazas alrededor usando el método CircleWu(), el suavizado se pierde parcialmente.

Todos los métodos de suavizado dependen en gran medida de la opacidad del trazo. Alrededor del 50% de opacidad, todo se vuelve no suavizado y tiene artefactos.