CustomPlotFunction (méthode Get)

Retourne un pointeur vers la fonction implémentant le mode personnalisé de dessin des courbes.

PlotFucntion  CustomPlotFunction()

Valeur de Retour

Pointeur vers la fonction implémentant le mode personnalisé de dessin des courbes.

CustomPlotFunction (méthode Set)

Définit le pointeur vers la fonction implémentant le mode personnalisé de dessin des courbes.

void  CustomPlotFunction(
   PlotFucntion  func      // pointeur vers la fonction
   )

Paramètres

func

[in]  Pointeur vers la fonction implémentant le mode personnalisé de dessin des courbes

Exemple :

Mode personnalisé de dessin d'une courbe

Cette courbe constituée de barres est construite avec le mode suivant :

//+------------------------------------------------------------------+
//|                                                CandleGraphic.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Classe CCandle                                                   |
//| Usage : classe représentant une bougie                           |
//+------------------------------------------------------------------+
class CCandle: public CObject
  {
private:
   double            m_open;
   double            m_close;
   double            m_high;
   double            m_low;
   uint              m_clr_inc;
   uint              m_clr_dec;
   int               m_width;
 
public:
                     CCandle(const double open,const double close,const double high,const double low,
                                                       const int width,const uint clr_inc=0x000000,const uint clr_dec=0xF5F5F5);
                    ~CCandle(void);
   double            OpenValue(void)            const { return(m_open);     }
   double            CloseValue(void)           const { return(m_close);    }
   double            HigthValue(void)           const { return(m_high);     }
   double            LowValue(void)             const { return(m_low);      }
   uint              CandleColorIncrement(voidconst { return(m_clr_inc);  }
   uint              CandleColorDecrement(voidconst { return(m_clr_dec);  }
   int               CandleWidth(void)          const { return(m_width);    }
  };
//+------------------------------------------------------------------+
//| Constructeur                                                     |
//+------------------------------------------------------------------+
CCandle::CCandle(const double open,const double close,const double high,const double low,
                                 const int width,const uint clr_inc=0x000000,const uint clr_dec=0xF5F5F5):
                                 m_open(open),m_close(close),m_high(high),m_low(low),
                                 m_clr_inc(clr_inc),m_clr_dec(clr_dec),m_width(width)
  {
  }
//+------------------------------------------------------------------+
//| Destructeur                                                      |
//+------------------------------------------------------------------+
CCandle::~CCandle(void)
  {
  }
//+------------------------------------------------------------------+
//| Méthode personnalisé pour dessiner les bougies                   |
//+------------------------------------------------------------------+
void PlotCandles(double &x[],double &y[],int size,CGraphic *graphic,CCanvas *canvas,void *cbdata)
  {
//--- vérifie l'objet
   CArrayObj *candles=dynamic_cast<CArrayObj*>(cbdata);
   if(candles==NULL || candles.Total()!=size)
      return;
//--- dessine les bougies
   for(int i=0; i<size; i++)
     {
      CCandle *candle=dynamic_cast<CCandle*>(candles.At(i));
      if(candle==NULL)
         return;
      //--- calcul
      int xc=graphic.ScaleX(x[i]);
      int width_2=candle.CandleWidth()/2;
      int open=graphic.ScaleY(candle.OpenValue());
      int close=graphic.ScaleY(candle.CloseValue());
      int high=graphic.ScaleY(candle.HigthValue());
      int low=graphic.ScaleY(candle.LowValue());
      uint clr=(open<=close) ? candle.CandleColorIncrement() :  candle.CandleColorDecrement();
      //--- dessine la bougie
      canvas.LineVertical(xc,high,low,0x000000);
      //--- dessine le corps réel de la bougie
      canvas.FillRectangle(xc+width_2,open,xc-width_2,close,clr);
      canvas.Rectangle(xc+width_2,open,xc-width_2,close,0x000000);
     }
  }
//+------------------------------------------------------------------+
//| Fonction de lancement du script                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int count=10;
   int width=10;
   double x[];
   double y[];
   ArrayResize(x,count);
   ArrayResize(y,count);
   CArrayObj candles();
   double max=0;
   double min=0;
//--- crée les valeurs
   for(int i=0; i<count; i++)
     {
      x[i] = i;
      y[i] = i;
      //--- calcule les valeurs
      double open=MathRound(50.0+(MathRand()/32767.0)*50.0);
      double close=MathRound(50.0+(MathRand()/32767.0)*50.0);
      double high=MathRound(MathMax(open,close)+(MathRand()/32767.0)*10.0);
      double low=MathRound(MathMin(open,close) -(MathRand()/32767.0)*10.0);
      //--- trouve le max et le min
      if(i==0 || max<high)
         max=high;
      if(i==0 || min>low)
         min=low;
      //--- crée la bougie
      CCandle *candle=new CCandle(open,close,high,low,width);
      candles.Add(candle);
     }
//--- crée le graphique
   CGraphic graphic;
   if(!graphic.Create(0,"CandleGraphic",0,30,30,780,380))
     {
      graphic.Attach(0,"CandleGraphic");
     }
//--- crée la courbe
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_CUSTOM,"Candles");
//--- définit les propriétés de la courbe
   curve.CustomPlotFunction(PlotCandles);
   curve.CustomPlotCBData(GetPointer(candles));
//--- définit les propriétés graphiques
   graphic.YAxis().Max((int)max);
   graphic.YAxis().Min((int)min);
//--- dessin 
   graphic.CurvePlotAll();
   graphic.Update();
  }