测试CGraphic--问题和建议 - 页 9

 
Dennis Kirichenko:

安纳托利,非常感谢你它在第1点上有帮助。是的,我错过了CAxis::MaxGrace(const double value) 轴方法。

下面是另一个简短的例子。

   CAxis *x_axis=graph.XAxis();
   x_axis.AutoScale(true);
   x_axis.Min(0);
   x_axis.Max(m_max_data);
   x_axis.MinGrace(0.0);
   x_axis.MaxGrace(0.2);
   x_axis.DefaultStep(m_max_data/10);
 

申请号:1827124。


 
Anatoli Kazharski:

申请号:1827124。

该问题已被修复,具体如下。

支持团队2018.01.15 14:30

在CAxis::Mod方法中安全计算除法的余数时出现了错误。

那里曾经实现过一种数值方法,不使用MathMod函数,但你的例子表明,这种方法的准确性在某些情况下不是最好的。

所以我不得不把这个方法改为。

//+------------------------------------------------------------------+
//| Calculate the modulus (remainder) in a safe manner so that divide|
//| by zero errors are avoided                                       |
//+------------------------------------------------------------------+
double CAxis::Mod(const double x,const double y)
  {
//--- check 
   if(y==0)
      return(0);
//--- calculate modulus
   return (x>0)? MathMod(x,y): MathMod(x,y)+y;
  }

//---

相同参数下的结果。


 

CGraphic 专家中的初始化。

如果你在专家顾问中创建一个图表,例如

int OnInit()
  {
     
   CGraphic graphic;
   string name ="Graphic";   
   bool ch =graphic.Create(0,name,0,220,20,970,370);

   double x[24]={0,1,2,3,4,5,6,7,8,9,10};
   double y[24]={0,1,2,3,4,5,6,7,8,9,10};
   
   for(int i=0;i<10;i++)
     {
     y[i] =y[i]+Shift;
     }
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_HISTOGRAM);
   curve.HistogramWidth(6);
   curve.Color(Green);
   curve.Name("Curve");
   
   graphic.CurvePlotAll();
   graphic.Update();
//   ChartRedraw();
   
  return(INIT_SUCCEEDED);       
  }

那么当改变一个外部参数时,图表会周期性地消失。不是在第一次的时候。你可以改变参数3-5次,它就会随机丢失,而且不是永远。它可以通过切换时间框架或自动交易(启用或禁用)来发现。

我们能不能使它不丢失?

 
Photic:

CGraphic专家中的初始化。

例如,如果你在专家顾问中创建一个图表。

那么当外部参数改变时,图表会周期性地消失。不是从第一次开始的。有可能改变参数3-5次,然后就会随机地丢失在某个地方,而不是永远。它可以通过切换时间框架或自动交易(启用-未启用)来发现。

你能使它不至于丢失吗?

你在OnInit函数的 本地层面上创建和销毁对象。

在全球层面上创建一个。
 

通过重新安装MT,问题得到了解决。

我无法习惯在发生错误时可能没有错误的事实。

 

你能告诉我如何改变图例的宽度,或完全删除分配给它的空间吗?

 
如何防止某些行被写入图例中?我只是有一条线,是Y坐标上的点,我需要把这些点做成不同的颜色,所以它是一条不同颜色的线,它显示的信息是一样的,虽然它是用不同的线做成的,我只需要把这条线的摘要信息放在图例里,有很多这样不同颜色的线。我怎样才能做到这一点呢?
 

还有一个问题,为什么我指定了一种颜色 "红色",但在图表上却显示为蓝色,而绿色却显示正确?

if(TypeInfo=="TP_FP")
{
   graphicP.HistoryNameSize(Point_K);//Устанавливает размер шрифта имени кривой
   graphicP.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Green,CURVE_POINTS,N_Model+"("+N+")");//Создает и добавляет кривую на график
   A.PointsFill(true);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}

if(TypeInfo=="FN")
{
   //graphicP.HistoryNameSize(1);//Устанавливает размер шрифта имени кривой
   //graphicP.HistorySymbolSize(1);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Red,CURVE_POINTS,"");//Создает и добавляет кривую на график
   A.PointsFill(false);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}



 
Aleksey Vyazmikin:

还有一个问题,为什么我指定了一种颜色 "红色",但它在图上显示为蓝色,而绿色却显示正确?



我想明白了,颜色必须按以下方式设置

ColorToARGB(Red,256)