Тестируем 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.

Проблема исправлена следующим образом:

Support Team 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 и мне нужно эти точки сделать разным цветом, получится разноцветная линия и она отображает одну информацию, хотя и сделана разными линиями, и мне надо в легенду поместить только сводную информацию об этой линии, таких разноцветных линий много. Как это сделать?
 

И ещё вопрос,почему указываю цвет "Red", а отображается на графике синий, в то время как Green отображается корректно?

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:

И ещё вопрос,почему указываю цвет "Red", а отображается на графике синий, в то время как Green отображается корректно?



С этим разобрался, цвет надо задавать так

ColorToARGB(Red,256)
Причина обращения: