CustomPlotFunction(获得方法)

获得实施自定义曲线绘制模式的函数指针。

PlotFucntion  CustomPlotFunction()

返回值

实施自定义曲线绘制模式的函数指针。

CustomPlotFunction(设置方法)

设置实施自定义曲线绘制模式的函数指针。

void  CustomPlotFunction(

   PlotFucntion  func      // 函数指针

   )

参数

func

[in]  实施自定义曲线绘制模式的函数指针

示例:

组成该曲线的柱形图通过以下代码来构建:

//+------------------------------------------------------------------+

//|                                                CandleGraphic.mq5 |

//|                        Copyright 2016, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#include <Graphics\Graphic.mqh>

//+------------------------------------------------------------------+

//|CCandle 类                                                         |

//| 用法:表示蜡烛图的类                                                 |

//+------------------------------------------------------------------+

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(void) const { return(m_clr_inc);  }

   uint              CandleColorDecrement(void) const { return(m_clr_dec);  }

   int               CandleWidth(void)          const { return(m_width);    }

  };

//+------------------------------------------------------------------+

//| 构造函数                                                          |

//+------------------------------------------------------------------+

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)

  {

  }

//+------------------------------------------------------------------+

//| 析构函数                                                          |

//+------------------------------------------------------------------+

CCandle::~CCandle(void)

  {

  }

//+------------------------------------------------------------------+

//| 绘制蜡烛图的自定义方法                                              |

//+------------------------------------------------------------------+

void PlotCandles(double &x[],double &y[],int size,CGraphic *graphic,CCanvas *canvas,void *cbdata)

  {

//--- 检查 obj

   CArrayObj *candles=dynamic_cast<CArrayObj*>(cbdata);

   if(candles==NULL || candles.Total()!=size)

      return;

//--- plot candles  

   for(int i=0; i<size; i++)

     {

      CCandle *candle=dynamic_cast<CCandle*>(candles.At(i));

      if(candle==NULL)

         return;

      //--- 主要计算 

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

      //--- plot candle

      canvas.LineVertical(xc,high,low,0x000000);

      //--- 绘制实体蜡烛图 

      canvas.FillRectangle(xc+width_2,open,xc-width_2,close,clr);

      canvas.Rectangle(xc+width_2,open,xc-width_2,close,0x000000);

     }

  }

//+------------------------------------------------------------------+

//| 脚本程序起始函数                                                   |

//+------------------------------------------------------------------+

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;

//--- 创建值 

   for(int i=0; i<count; i++)

     {

      x[i] = i;

      y[i] = i;

      //--- 计算值

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

      //--- 寻找最大最小值

      if(i==0 || max<high)

         max=high;

      if(i==0 || min>low)

         min=low;

      //--- create candle

      CCandle *candle=new CCandle(open,close,high,low,width);

      candles.Add(candle);

     }

//--- 创建图形

   CGraphic graphic;

   if(!graphic.Create(0,"CandleGraphic",0,30,30,780,380))

     {

      graphic.Attach(0,"CandleGraphic");

     }

//--- 创建曲线

   CCurve *curve=graphic.CurveAdd(x,y,CURVE_CUSTOM,"Candles");

//--- 设置曲线属性

   curve.CustomPlotFunction(PlotCandles);

   curve.CustomPlotCBData(GetPointer(candles));

//--- 设置图形属性

   graphic.YAxis().Max((int)max);

   graphic.YAxis().Min((int)min);

//--- 绘制 

   graphic.CurvePlotAll();

   graphic.Update();

  }