文章 "可视化!类似于 R 语言 "plot (绘图)" 的 MQL5 图形库" - 页 4

 
Roman Konopelko:

下午好,您究竟是如何尝试重新绘制图表的?

如果您只需要更改特定曲线的数据,这里有一个示例:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
voidOnStart()
  {
//--- 数据 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};
//--- 数据 2
   double x2[]={-10,-10,10,10};
   double y2[]={-10,10,-10,10};
//--- 图形
   CGraphic graph;
   graph.HistoryNameWidth(80);
   graph.Create(0,"Graph",0,30,30,830,430);
//--- 点数
   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);
  }
附注:论坛上有一个关于图形库的主题,这个问题已经在那里提出过了。

例如,这里有一段代码,可以在每个刻度线上创建一个随机图表:

#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 - 但不起作用.....。

打开程序库的源代码,在搜索栏中输入字体。

 
fxsaber:

打开 bibla 的源文件,在搜索中输入字体。

直接在那里编码?😁

我只是觉得有一些现成的方法。

事实上,通过搜索字体,我找到了 FontSet,但它拒绝合作。

 
transcendreamer:

如果有人知道如何更改该库中签名的字体大小和样式,请告诉我。- 我试过 FontSet - 但不起作用.....。

对于图例中的标题?

graphicL.HistorySymbolSize(Point_K);//获取/设置符号的符号大小
 
Aleksey Vyazmikin:

在图例中签名?

谢谢。

事实上,轴也是如此。

 
-vallen- #:

这在脚本中很清楚,但如何在 Expert Advisor 中更新呢? 例如,这里有一段代码,可以在每个 tick 上创建随机图表:

我不知道如何在不删除图表的情况下更新数据。请告诉我谁知道怎么做。

有答案吗?

 

Изначально класс 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%左右时,一切都会变成无锯齿,并产生人工痕迹。