기고글 토론 "시각화! 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);
  }
추신 포럼에 그래픽 라이브러리에 대한 주제가 있으며이 질문은 이미 거기에서 제기되었습니다.

스크립트에는 명확하지만 Expert Advisor에서 업데이트하는 방법은 무엇입니까? 예를 들어 다음은 각 틱에 임의의 차트를 생성하는 코드입니다:

#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);
}
//-------------------------------------------------------------

차트를 삭제하지 않고 데이터를 업데이트하는 방법을 알 수 없습니다. 방법을 아는 사람이 있으면 알려주세요.

 

이 라이브러리에서 서명의 글꼴 크기와 스타일을 변경하는 방법을 아는 사람이 있나요? - 폰트셋을 사용해봤는데 작동하지 않았습니다.....

 
transcendreamer:

이 라이브러리에서 서명의 글꼴 크기와 스타일을 변경하는 방법을 아는 사람이 있나요? - 폰트셋을 사용해봤는데 작동하지 않았습니다.....

라이브러리의 소스를 열고 검색 유형 글꼴에서.

 
fxsaber:

비블라의 소스를 열고 검색에 글꼴을 입력합니다.

거기서 직접 샤드코딩을 하나요? 😁

이미 만들어진 방법이 있다고 생각했습니다.

실제로 글꼴을 검색하여 FontSet을 찾았지만 협업을 거부합니다.

 
transcendreamer:

이 라이브러리에서 서명의 글꼴 크기와 스타일을 변경하는 방법을 아는 사람이 있나요? - 폰트셋을 사용해봤는데 작동하지 않았습니다.....

범례의 캡션의 경우?

graphicL.HistorySymbolSize(Point_K);//심볼의 심볼 크기 가져오기/설정하기
 
Aleksey Vyazmikin:

범례에 서명을 하시나요?

고맙습니다.

사실 축도 마찬가지입니다.

 
-vallen- #:

스크립트에는 명확하지만 Expert Advisor에서 업데이트하는 방법은 무엇입니까? 예를 들어 다음은 각 틱에 대해 임의의 차트를 만드는 코드입니다:

차트를 삭제하지 않고 데이터를 업데이트하는 방법을 알 수 없습니다. 방법을 아는 사람이 있으면 알려주세요.

답변 있나요?

 

Изначально класс 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%의 불투명도에서는 모든 것이 에일리어싱되지 않고 아티팩트가 발생합니다.