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

 
Roman Konopelko:

Buongiorno!

La modalità CustomPlotFunction è implementata nella libreria per scopi simili, l'esempio di utilizzo implementa approssimativamente ciò che ti interessa.

P.S. Maggiori dettagli al riguardo sono scritti nel forum .


Ottimo, grazie :)
 

Esiste un modo per tracciare le etichette dell'asse X come serie di dati?

 
Pablo Rego:

Esiste un modo per tracciare le etichette dell'asse X come serie di dati?

Esempio:

#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();
  }

Risultato:


 

È possibile disegnare le etichette sull'asse X in ordine inverso (reverse)?

Per vedere gli indici delle serie temporali, ad esempio.

 
Dennis Kirichenko:

È possibile disegnare le etichette sull'asse X in ordine inverso (reverse)?

Per vedere gli indici delle serie temporali, ad esempio.

Non esiste una soluzione rapida che consista nel richiamare una funzione che faccia tutto da sola. Come in , è necessario creare la propria funzione per disegnare i valori e passarla al metodo ValuesFunctionFormat.
 

Esiste una libreria simile in mql4?

 

Potete dirmi se è possibile impostare la trasparenza dello sfondo, forse nella classe base, forse qualcosa da modificare?

 
Maxim Dmitrievsky:

Potete dirmi se è possibile impostare la trasparenza dello sfondo, magari nella classe base? Non sono riuscito a trovarlo facilmente.


Solo se si modifica la classe CGraphic (solo la modifica diretta è sbagliata, è necessaria l'ereditarietà, l'esempio qui è solo per rapidità).

//+------------------------------------------------------------------+
//| Crea grafica|
//+------------------------------------------------------------------+
bool CGraphic::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
//--- controllare il nome dell'oggetto 
   if(ObjectFind(chart,name)>=0)
      return(false);
//--- calcolo preliminare
   int width=x2-x1;
   int height=y2-y1;
   if(width>0 && height>0)
     {
      m_width=width;
      m_height=height;
      //--- creare un oggetto
      if(!ObjectCreate(chart,name,OBJ_BITMAP_LABEL,subwin,0,0))
         return(false);
      //--- personalizzare l'oggetto
      if(!ObjectSetInteger(chart,name,OBJPROP_XDISTANCE,x1) || 
         !ObjectSetInteger(chart,name,OBJPROP_YDISTANCE,y1))
        {
         ObjectDelete(chart,name);
         return(false);
        }
      //--- allegare l'oggetto
      if(!m_canvas.Attach(chart,name,width,height,COLOR_FORMAT_ARGB_NORMALIZE))
        {
         ObjectDelete(chart,name);
         return(false);
        }
     }
//--- successo
   return(true);
  }

Dopo di che si può controllare il colore:

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

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

:

Esempio

 
Vladimir Karputov:

Solo se si apporta una modifica alla classe CGraphic (solo la modifica diretta è sbagliata, è necessaria l'ereditarietà, l'esempio qui è solo per rapidità)

Dopo di che è possibile controllare il colore:

:



grazie, mi occuperò dell'ereditarietà :)

 

Come fare in modo che quando si cambiano gli input nell'Expert Advisor(REASON_PARAMETERS), il grafico non generi un errore e si aggiorni con i nuovi parametri? Se cambio tf o cambio simbolo, tutto va bene, se cambio parametri, l'errore è puntatore non valido. Il numero di curve cambia nei parametri ed è su di essi che i puntatori sono errati.

se non è chiaro posso fare un esempio)