Discussione sull’articolo "Visualizza questo! Libreria grafica di MQL5 simile a 'plot' del linguaggio R" - pagina 4

 
Roman Konopelko:

Buon pomeriggio, come ha provato a ridisegnare il grafico?

Se deve solo modificare i dati di una curva specifica, ecco un esempio:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Funzione di avvio del programma di script|
//+------------------------------------------------------------------+
voidOnStart()
  {
//--- dati 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};
//--- dati 2
   double x2[]={-10,-10,10,10};
   double y2[]={-10,10,-10,10};
//--- grafico
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);
//--- Punti
   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. C'è un topic sulla libreria grafica sul forum, questa domanda è già stata sollevata lì.

Lo script è chiaro, ma come aggiornarlo nell'Expert Advisor? Ad esempio, ecco un codice che crea un grafico casuale ad ogni 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(); /disegnare il grafico
//---
   return(INIT_SUCCEEDED);
  }
//------------------------------------------ 
void OnTick()
  {  
   for(int i=0; i<=9; i++){
    Yg[i]=(int)MathRand()/1000;  
   }
   ObjectDelete(0,"Graph");//Mi rendo conto che non è l'approccio giusto, ma non posso fare diversamente.
   graf(); /disegnare un nuovo grafico
  }
//-------------------------------------------------------------
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);
}
//-------------------------------------------------------------

Non riesco a capire come aggiornare i dati senza cancellare il grafico. Per favore, ditemi chi sa come fare.

 

Per favore, se qualcuno sa come cambiare le dimensioni e gli stili dei caratteri per le firme in questa libreria? - Ho provato con FontSet, ma non ha funzionato.....

 
transcendreamer:

Per favore, se qualcuno sa come cambiare le dimensioni e gli stili dei caratteri per le firme in questa libreria? - Ho provato con FontSet, ma non ha funzionato.....

Aprire il sorgente della libreria e nella ricerca digitare font.

 
fxsaber:

Aprite il sorgente di bibla e digitate font nella ricerca.

Lo shardcode direttamente lì? 😁

Pensavo che ci fosse un metodo già pronto.

In realtà cercando font ho trovato FontSet ma si rifiuta di collaborare.

 
transcendreamer:

Per favore, se qualcuno sa come cambiare le dimensioni e gli stili dei caratteri per le firme in questa libreria? - Ho provato con FontSet, ma non ha funzionato.....

Per le didascalie nella legenda?

graphicL.HistorySymbolSize(Point_K);//Impostate le dimensioni dei simboli dei simboli
 
Aleksey Vyazmikin:

Per le firme nella legenda?

Grazie.

In realtà anche per gli assi.

 
-vallen- #:

Lo script è chiaro, ma come aggiornare l'Expert Advisor? Ad esempio, ecco un codice che crea un grafico casuale ad ogni tick:

Non riesco a capire come aggiornare i dati senza cancellare il grafico. Per favore, ditemi chi sa come fare.

Qualche risposta?

 

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

Mancano i metodi di lisciatura per 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
 

Sono necessari anche questi metodi di riempimento con bordi smussati:

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

//---

Attualmente, anche se si disegna prima un cerchio con un riempimento usando il metodo FillCircle() e poi si traccia intorno ad esso usando il metodo CircleWu(), la levigatura viene parzialmente persa.

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

Sono necessari anche questi metodi di riempimento dei bordi lisci:

//---

Attualmente, anche se si disegna prima un cerchio con un riempimento usando il metodo FillCircle() e poi si traccia intorno ad esso usando il metodo CircleWu(), la lisciatura viene parzialmente persa.

Tutti i metodi di smussamento dipendono fortemente dall'opacità della linea. Con un'opacità del 50% circa, tutto diventa non fedele e presenta degli artefatti.