Обсуждение статьи "Визуализируй это! Графическая библиотека в MQL5 как аналог plot из R" - страница 4

 
Roman Konopelko:

Добрый день, как конкретно вы пытались перерисовать график?

Если вам необходимо просто изменить данные для конкретной кривой, то вот пример:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
voidOnStart()
  {
//--- data 1
   double x1[]={-10,-4,-1,2,3,4,5,6,7,8};
   double y1[]={-5,4,-10,23,17,18,-9,13,17,4};
//--- data 2
   double x2[]={-10,-10,10,10};
   double y2[]={-10,10,-10,10};
//--- graphic
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);
//--- Points  
   CCurve *curve=graph.CurveAdd(x1,y1,CURVE_LINES);
   graph.CurvePlot(0);
   graph.Update();
   Sleep(1000);
   curve.Update(x2,y2);
   graph.Redraw(true);
   graph.Update();
   Sleep(1000);
  }
P.S. На форуме есть тема относительно библиотеки Graphics, в ней уже поднимался данный вопрос.

В скрипте это понятно, а как обновить в советнике? например вот код, создает на каждом тике случайный график:

#include <Graphics\Graphic.mqh>

 double Xg[10]={0,1,2,3,4,5,6,7,8,9};
 double Yg[10]={0,0,0,0,0,0,0,0,0,0};

//------------------------------------------  
int OnInit()
  {
   graf(); //рисуем график
//---
   return(INIT_SUCCEEDED);
  }
//------------------------------------------ 
void OnTick()
  {  
   for(int i=0; i<=9; i++){
    Yg[i]=(int)MathRand()/1000;  
   }
   ObjectDelete(0,"Graph");//удаляю график, понимаю что не тот подход но по другому не получается
   graf(); //рисуем график по новому
  }
//-------------------------------------------------------------
void graf(){
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);

   CCurve *curve=graph.CurveAdd(Xg,Yg,CURVE_LINES);
   graph.CurvePlotAll();
   graph.Update(true);
}
//-------------------------------------------------------------

не могу сообразить как обновить данные не удаляя графика. Подскажите, пожалуйста кто в курсе.

 

Подскажите пожалуйста, если кто знает, как в этой библиотеке менять размеры и стиль шрифтов для подписей? - попробовал FontSet - не сработало...

 
transcendreamer:

Подскажите пожалуйста, если кто знает, как в этой библиотеке менять размеры и стиль шрифтов для подписей? - попробовал FontSet - не сработало...

Открыть исходник библы и в поиске набрать font.

 
fxsaber:

Открыть исходник библы и в поиске набрать font.

прямо захардкодить там? 😁

я просто думал что есть какой-то готовый метод

собственно поиском font нашёл FontSet но оно отказывается от сотрудничества

 
transcendreamer:

Подскажите пожалуйста, если кто знает, как в этой библиотеке менять размеры и стиль шрифтов для подписей? - попробовал FontSet - не сработало...

Для подписей в легенде?

graphicL.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений
 
Aleksey Vyazmikin:

Для подписей в легенде?

Спасибо

На самом деле для осей тоже

 
-vallen- #:

В скрипте это понятно, а как обновить в советнике? например вот код, создает на каждом тике случайный график:

не могу сообразить как обновить данные не удаляя графика. Подскажите, пожалуйста кто в курсе.

Есть ответ ?

 

Изначально класс CCanvas содержал только два режима отрисовки графических примитивов   со сглаживанием (antialiasing, AA) и без него. Затем были добавлены новые функции для создания примитивов на основе алгоритма Ву:

Не хватает методов со сглаживанием для Arc() и Pie().

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / Arc
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / Arc
  • www.mql5.com
Arc(int,int,int,int,int,int,int,int,const uint) - CCanvas - Пользовательская графика - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Также нужны вот эти методы заливки со сглаженными краями:

   void              FillTriangle(int x1,int y1,int x2,int y2,int x3,int y3,const uint clr);
   void              FillPolygon(int &x[],int &y[],const uint clr);
   void              FillCircle(int x,int y,int r,const uint clr);
   void              FillEllipse(int x1,int y1,int x2,int y2,const uint clr);
   void              Fill(int x,int y,const uint clr);
   void              Fill(int x,int y,const uint clr,const uint threshould);

//---

На текущий момент, если даже сначала нарисовать круг с заливкой методом FillCircle(), а затем обвести его методом CircleWu(), то сглаживание частично теряется. 

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / FillCircle
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas / FillCircle
  • www.mql5.com
FillCircle(int,int,int,const uint) - CCanvas - Пользовательская графика - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Anatoli Kazharski #:

Также нужны вот эти методы заливки со сглаженными краями:

//---

На текущий момент, если даже сначала нарисовать круг с заливкой методом FillCircle(), а затем обвести его методом CircleWu(), то сглаживание частично теряется. 

Все методы сглаживания сильно зависят от непрозрачности линии. При примерно 50% прозрачности уже всё становится не сглаженным и имеет артефакты.