English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
시각화! R 언어의 'plot'과 유사한 MQL5 그래픽 라이브러리

시각화! R 언어의 'plot'과 유사한 MQL5 그래픽 라이브러리

MetaTrader 5 | 11 10월 2022, 16:42
310 0
MetaQuotes
MetaQuotes

트레이딩의 로직을 연구할 때 그래프의 형태로 표시되는 시각적 표현은 매우 중요합니다. 과학 관련 커뮤니티에서 널리 사용되는 여러 프로그래밍 언어(예: R 및 Python)에는 시각화에 사용되는 특수한 '플롯' 함수가 있습니다. 이 함수들이 선, 점 분포 및 히스토그램을 그려서 패턴을 시각화 할 수 있습니다.

'plot' 함수의 중요한 이점은 그래프를 그리기 위해서 몇 줄의 코드만 있으면 된다는 것입니다. 데이터 배열을 매개변수로 전달하고 그래프의 유형을 지정하기만 하면 준비가 완료됩니다! 'plot' 함수는 축척 계산, 축 구축, 색상 선택 등의 모든 일상적인 작업을 수행합니다.

MQL5에서 함수의 모든 기능은 표준 라이브러리의 그래픽 라이브러리 메서드로 표시됩니다. 샘플 코드의 실행 결과는 다음과 같습니다.

#include <Graphics\Graphic.mqh>
#define RESULT_OR_NAN(x,expression) ((x==0)?(double)"nan":expression)
//--- 함수
doubleBlueFunction(doublex) {return(RESULT_OR_NAN(x,10*x*sin(1/x))); }
doubleRedFunction(doublex) {return(RESULT_OR_NAN(x,sin(100*x)/sqrt(x))); }
doubleOrangeFunction(doublex) {return(RESULT_OR_NAN(x,sin(100*x)/sqrt(-x)));}
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
  {
   double from =-1.2;
   double=1.2;
   double step=0.005;
   CGraphic 그래픽;
   graphic.Create(0,"G",0,30,30,780,380);
//--- colors
   CColorGenerator 생성기;
   uint blue= generator.Next();
   uint red = generator.Next();
   uint orange=generator.Next();
//--- 모든 곡선 그리기
   graphic.CurveAdd(RedFunction,from,to,step,red,CURVE_LINES,"Red");
   graphic.CurveAdd(OrangeFunction,from,to,step,orange,CURVE_LINES,"Orange");
   graphic.CurveAdd(BlueFunction,from,to,step,blue,CURVE_LINES,"Blue");
   graphic.CurvePlotAll();
   graphic.Update();
  }



CCanvas 기본 클래스 및 개발

표준 라이브러리에는 가격 차트에 이미지를 빠르고 편리하게 직접 그릴 수 있도록 설계된 CCanvas 기본 클래스가 포함되어 있습니다. 이 클래스는 그래픽 리소스를 만들고 캔버스에 간단한 기본 요소(점, 직선 및 폴리라인, 원, 삼각형 및 다각형)를 그리는 것을 기반으로 합니다. 클래스는 필요한 글꼴, 색상 및 크기를 사용하여 모양을 채우고 텍스트를 표시하기 위한 함수를 구현합니다.

처음에 CCanvas에는 AA(antialiasing)가 있는 것과 없는 두가지의 원시적인 그래픽 표시 모드만 포함되어 있었습니다. 그런 다음 Wu’s algorithm을 기반으로 기본 요소를 그리기 위한 새로운 기능이 추가되었습니다:

Wu의 알고리즘은 높은 품질로 앨리어싱을 제거하고 Bresenham의 알고리즘과 같은 작업 속도로 안티앨리어싱이 없이 결합합니다. Wu 알고리즘은 CCanvas에서 구현된 표준 앤티앨리어싱 알고리즘(AA)과 시각적으로도 다릅니다. 다음은 세 가지 함수를 각각 사용하여 원을 그리는 예입니다.

#include<Canvas\Canvas.mqh>
CCanvas 캔버스;
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
  {
   int      Width=800;
   int      Height=600;
//--- 캔버스 생성
   if(!canvas.CreateBitmapLabel(0,0,"CirclesCanvas",30,30, Width, Height))
     {
      Print("캔버스 생성 중 오류 발생: ",GetLastError());
     }
//--- draw
   canvas.Erase(clrWhite);
   canvas.Circle(70,70,25,clrBlack);
   canvas.CircleAA(120,70,25,clrBlack);
   canvas.CircleWu(170,70,25,clrBlack);
//---
   canvas.Update();  
  }


보시다시피 표준 평활화 알고리즘을 사용하는 CircleAA()는 Wu의 알고리즘에 따라 CircleWu() 함수에 비해 더 두꺼운 선을 그립니다. 더 작은 두께와 더 나은 전환 음영 계산을 하여 CircleWu는 더 깔끔하고 자연스러워 보입니다.

CCanvas 클래스에는 다음과 같은 또 다른 개선 사항도 있습니다.

  1. EllipseAA() EllipseWu() 의 두 가지 앤티 앨리어싱 옵션이 있는 새로운 기본형 타원을 추가했습니다.
  2. "채움 감도"(임계값 매개변수)를 담당하는 새 매개변수를 통해 채우기 영역 함수 오버로드를 추가했습니다.


라이브러리 작업 알고리즘

1. 라이브러리를 연결한 후 CGraphic 클래스 객체를 생성해야 합니다. 그려질 곡선이 추가됩니다.

다음으로 생성된 객체와 관련하여 Create() 메서드를 호출해야 합니다. 이 메서드에는 주요한 그래프 매개변수가 포함되어 있습니다.

  1. 그래프 ID
  2. 객체명
  3. 윈도우 인덱스
  4. 그래프 앵커 포인트
  5. 그래프 너비 및 높이

이 메서드는 정의된 매개변수를 적용합니다. 그래서 그래프를 그릴 때 사용할 차트 객체와 그래픽 리소스를 생성합니다.

   //--- 그래프 생성을 위한 객체
   CGraphic 그래픽;
   //--- 캔버스 생성
   graphic.Create(0,"Graphic",0,30,30,830,430);

이제 사용 가능한 캔버스가 생겼습니다.

2. 이제 객체를 곡선으로 채우겠습니다. 4가지 다른 방법으로 곡선을 그릴 수 있는CurveAdd() 메서드를 사용하여 추가하는 작업을 수행합니다.

  1. double 유형의 1차원 배열을 기반으로 합니다. 이 경우 배열의 값은 Y축에 표시되고 배열의 인덱스는 X 좌표의 역할을 합니다.
  2. 두 개의 x[] 및 y[] double 유형의 배열을 기반으로 합니다.
  3. CPoint2D 배열을 기반으로 합니다.
  4. CurveFunction() 포인터와 함수 인수를 빌드하기 위한 세 가지 값(initial, final과 increment by argument)을 기반으로 합니다.

CurveAdd() 메서드는CCurve클래스에 대한 포인터를 반환하여 새롭게 생성된 곡선에 대해 빠른 액세스를 가능하게 하고 곡선의 속성을 변경하는 기능을 합니다.

   doublex[]={-10,-4,-1,2,3,4,5,6,7,8};

   doubley[]={-5,4, -10,23,17,18, -9,13,17,4};

   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);

3. 그러면 추가된 어떠한 곡선이든 차트에 표시할 수 있습니다. 이는 세 가지 방법으로 수행할 수 있습니다.

  1. 차트에 추가된 모든 곡선을 자동으로 그리는CurvePlotAll() 메서드를 사용합니다.
    graphic.CurvePlotAll();
  2. 지정된 인덱스로 곡선을 그리는CurvePlot() 메서드를 사용합니다.
    graphic.CurvePlot(0);
  3. Redraw() 메서드를 사용하고 곡선의 Visible 속성을 'true'로 설정합니다.
    curve.Visible(true);
    graphic.Redraw();

4. 차트에 그래프를 그리려면 Update() 메서드를 호출하십시오. 결과적으로 간단한 그래프를 그리는 스크립트의 전체 코드를 얻을 수 있습니다.

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
  {
   CGraphic 그래픽;
   graphic.Create(0,"Graphic",0,30,30,780,380);
   doublex[]={-10,-4,-1,2,3,4,5,6,7,8};
   doubley[]={-5,4, -10,23,17,18, -9,13,17,4};
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
   graphic.CurvePlotAll();
   graphic.Update();
  }

다음은 결과를 보여주는 그래프입니다:


그래프의 속성과 그래프의 기능은 언제든지 변경될 수 있습니다. 예를 들어, 그래프 축에 레이블을 추가하고 곡선의 이름을 변경하고 곡선에 대한 스플라인 근사 모드를 활성화할 수 있습니다:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
  {
   CGraphic 그래픽;
   graphic.Create(0,"Graphic",0,30,30,780,380);
   doublex[]={-10,-4,-1,2,3,4,5,6,7,8};
   doubley[]={-5,4, -10,23,17,18, -9,13,17,4};
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
   curve.Name("Example");                
   curve.LinesIsSmooth(true);            
   graphic.XAxis().Name("X - axis");      
   graphic.XAxis().NameSize(12);          
   graphic.YAxis().Name("Y - axis");      
   graphic.YAxis().NameSize(12);
   graphic.YAxis().ValuesWidth(15);
   graphic.CurvePlotAll();
   graphic.Update();
   DebugBreak();
  }


CurvePlotAll을 호출한 후 변경 사항을 설정했다면 변경 사항을 보기 위해 Redraw 메서드를 추가로 호출해야만 했을 것입니다.

많은 최신 라이브러리와 마찬가지로 Graphics에는 도표 그리기를 상당히 단순화하는 다양한 이미 만들어진 알고리즘이 포함되어 있습니다.

  1. 라이브러리는 명시적으로 지정되지 않은 경우 곡선 색상에 대한 대조색상을 자동으로 생성할 수 있습니다.
  2. 그래프 축에는 매개변수 자동 크기 조정 모드가 있으며 필요한 경우 비활성화할 수 있습니다.
  3. 곡선의 이름은 유형 및 추가 되는 순서에 따라 자동으로 생성됩니다.
  4. 그래프의 작업 영역이 자동으로 선으로 표시되고 실제의 축이 설정됩니다.
  5. 선을 사용할 때는 곡선을 매끄럽게 할 수도 있습니다.

그래픽 라이브러리에는 차트에 새 요소를 추가하기 위한 몇 가지 추가적인 메서드들도 있습니다.

  1. TextAdd()— 차트의 임의의 위치에 텍스트를 추가합니다. 좌표는 실제의 스케일로 설정해야 합니다. 표시된 텍스트를 정확하게 구성하려면 FontSet 메서드를 사용합니다.
  2. LineAdd()— 차트의 임의의 위치에 선을 추가합니다. 좌표는 실제의 스케일로 설정해야 합니다.
  3. MarksToAxisAdd()— 지정된 좌표 축에 새로운 레이블을 추가합니다.

요소 추가에 관한 데이터는 어디에도 저장되지 않습니다. 차트에 새로운 곡선을 그리거나 이전의 곡선을 다시 그리면 데이터는 사라집니다.


그래프 유형

그래픽 라이브러리는 기본 유형의 곡선 플로팅을 지원합니다. 모두 ENUM_CURVE_TYPE 열거형에 지정됩니다:

  1. CURVE_POINTS— 점 곡선 그리기
  2. CURVE_LINES— 선 곡선 그리기
  3. CURVE_POINTS_AND_LINES— 점 곡선과 선 곡선 모두 그리기
  4. CURVE_STEPS— 계단형 곡선 그리기
  5. CURVE_HISTOGRAM— 히스토그램 곡선 그리기
  6. CURVE_NONE— 곡선을 그리지 않기

이러한 각각의 모드에는 차트에 표시되는 곡선에 영향을 주는 고유한 속성이 있습니다. 곡선에 대한 CCurve 포인터를 사용하면 이러한 속성을 빠르게 수정할 수 있습니다. 따라서 CurveAdd 메서드에서 반환된 모든 포인터를 기억하는 것이 좋습니다. 속성의 이름은 속성이 사용되는 곡선 그리기 모드로 시작합니다.

각 유형의 속성을 더 자세히 살펴보겠습니다.

1. CURVE_POINTS는 가장 빠르고 가장 간단한 모드입니다. 각 곡선의 좌표는 지정된 속성이 있는 점으로 표시됩니다.

  • PointsSize — 포인트 크기
  • PointsFill — 채우기가 있는지 여부를 나타내는 플래그
  • PointsColor — 채우기 색상
  • PointsType — 포인트 유형

이 경우 곡선 자체의 색상이 포인트 테두리의 색상을 정의합니다.

   CCurve *curve=graphic.CurveAdd(x,y,ColorToARGB(clrBlue,255),CURVE_POINTS);
   curve.PointsSize(20);
   curve.PointsFill(true);
   curve.PointsColor(ColorToARGB(clrRed,255));

점 유형은 ENUM_POINT_TYPE 열거형에서 특정한 기하학적인 모양을 정의합니다. 이 모양은 모든 곡선 점을 표시하는 데 사용됩니다. 전체적으로 ENUM_POINT_TYPE에는 10개의 주요한 기하학적 모양이 있습니다.

  1. POINT_CIRCLE — 원(기본적으로 사용됨)
  2. POINT_SQUARE — 정사각형
  3. POINT_DIAMOND — 다이아몬드
  4. POINT_TRIANGLE — 삼각형
  5. POINT_TRIANGLE_DOWN — 역삼각형
  6. POINT_X_CROSS — 십자
  7. POINT_PLUS — 플러스
  8. POINT_STAR — 별
  9. POINT_HORIZONTAL_DASH — 수평선
  10. POINT_VERTICAL_DASH — 수직선

다음은 다양한 종류의 홍채를 시각적으로 표현한 예입니다(첨부된 IrisSample.mq5 스크립트의 "MetaTrader 5에서 자체 구성 기능 맵(Kohonen Maps) 사용"을 참조하세요).



2. CURVE_LINES 디스플레이 모드는 곡선을 시각화하기 위한 기본 모드입니다. 각 쌍의 점은 하나 또는 여러 개의 직선으로 연결됩니다(평활화의 경우). 모드의 속성은 다음과 같습니다.

  • LinesStyle —ENUM_LINE_STYLE 열거형의 선 스타일
  • LinesSmooth — 평활화를 수행할지 여부를 나타내는 플래그
  • LinesSmoothTension — 평활화 정도
  • LinesSmoothStep — 평활화할 때 근사하는 선의 길이

Graphics는 표준 매개변수 곡선 평활화 알고리즘을 제공합니다. 두 단계로 구성됩니다:

  1. 도함수를 기반으로 각 점들의 쌍에 대해 두 개의 기준점이 정의됩니다.
  2. 지정된 근사 단계가 있는 베지어 곡선은 이 네 점을 기반으로 그려집니다.

LinesSmoothTension 매개변수는 값(0.0, 1.0)을 사용합니다. LinesSmoothTension이 0.0으로 설정되면 평활화가 되지 않습니다. 이 매개변수를 높이면 점점 더 부드러운 곡선이 나타납니다.

   CCurve *curve=graphic.CurveAdd(x,y,ColorToARGB(clrBlue,255),CURVE_LINES);
   curve.LinesStyle(STYLE_DOT);
   curve.LinesSmooth(true);
   curve.LinesSmoothTension(0.8);
   curve.LinesSmoothStep(0.2);


3. CURVE_POINTS_AND_LINES는 이전의 두 표시 모드와 모드의 속성을 결합합니다.

4. CURVE_STEPS모드에서 각 점들의 쌍은 두 개의 선으로 계단식으로 연결됩니다. 모드에는 두개의 속성이 있습니다:

  • LinesStyle — 이 속성은 CURVE_POINTS에서 가져 온 것으로 선의 스타일을 정의합니다.
  • StepsDimension — 단계 차원: 0 — x(수평선 다음에 수직선) 또는 1 — y(수직선 다음에 수평선).
   CCurve *curve=graphic.CurveAdd(x,y,ColorToARGB(clrBlue,255),CURVE_STEPS);
   curve.LinesStyle(STYLE_DASH);
   curve.StepsDimension(1);

5. CURVE_HISTOGRAM 모드는 표준 바 히스토그램을 그립니다. 이 모드에는 하나의 속성이 있습니다.

  • HistogramWidth — 바 너비

값이 너무 크면 바가 겹칠 수 있으며 Y 값이 큰 바는 값이 작은 인접한 바를 "흡수"합니다.

6. CURVE_NONE모드는 곡선이 보이는지 여부와 상관없이 곡선의 그래픽적인 표현을 비활성화합니다.

Auto scaling을 설정할 경우 차트에 추가되는 모든 곡선에는 특정한 값이 있습니다. 따라서 곡선이 플롯 되지 않거나 CURVE_NONE 모드로 설정되더라도 해당 값은 계속 유지됩니다.


함수에 그래프 - 몇 줄로 빠르게 생성

라이브러리의 또 다른 장점은 함수에 대한 CurveFunction 포인터로 작업을 한다는 것입니다. MQL5에서 함수에 대한 포인터는 전역 또는 정적 함수만을 허용하지만 함수 구문은 포인터 1에 완전히 대응해야 합니다. 여기서도 double을 받는 double형 매개변수를 받는 함수에 대해 CurveFunction이 구성되어 있습니다.

함수에 대한 포인터로 곡선을 구성하려면 초기(from) 및 최종(to)의 인수 값과 증분(단계)도 정확하게 설정해야 합니다. 증분 값이 적을수록 구성하기 위한 더 많은 함수 포인트가 있게 됩니다. 데이터 시리즈를 생성하려면 CurveAdd()를 사용하고 함수를 플롯 하려면 CurvePlot() 또는 CurvePlotAll()을 적용하십시오.

예를 들어 포물선 함수를 만들고 다양한 증분으로 그립니다:

#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Parabola                                                         |
//+------------------------------------------------------------------+
double Parabola(double x) { return MathPow(x,2); }
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
  {
   doublefrom1=-5;
   doubleto1=0;
   double step1=1;
  
   doublefrom2=0;
   doubleto2=5;
   double step2=0.2;
  
   CurveFunction 함수 = 포물선;
  
   CGraphic 그래프;
   graph.Create(0,"Graph",0,30,30,780,380);
   graph.CurveAdd(function,from1,to1,step1,CURVE_LINES);
   graph.CurveAdd(function,from2,to2,step2,CURVE_LINES);
   graph.CurvePlotAll();
   graph.Update();
  }

라이브러리는 브레이크 포인트가 있는 함수와 함께 작동합니다(좌표 중 하나는 플러스 또는 마이너스의 무한대 값을 가지거나 숫자가 아님). 때때로 우리는 단순히 브레이크 포인트를 놓칠 수 있기 때문에 함수에 의한 증분을 고려해야 합니다. 이 경우 그래프가 기대에 미치지 못합니다. 예를 들어, [-5.0; 5.0] 첫 번째 함수는 0.7 단계이고 두 번째 함수는 0.1인 세그먼트인 두개의 쌍곡선 함수를 그려 봅시다. 결과가 아래와 같이 표시됩니다:

위의 이미지에서 볼 수 있듯이 0.7 단계를 사용할 때 우리는 브레이크 포인트를 놓쳤습니다. 결과적으로 곡선은 실제의 쌍곡선 함수와 거의 관련이 없게 되어버렸습니다.

함수 사용 시 영분할 오류가 발생할 수 있습니다. 이 문제를 해결할 수 있는 두 가지의 방법이 있습니다:

  • metaeditor.ini에서 0 나누기 검사 비활성화
    [Experts]
    FpNoZeroCheckOnDivision=1
  • 또는 함수에 사용된 방정식을 분석하고 해당 인스턴스에 대해 유효한 값을 반환합니다. 매크로를 사용한 이러한 처리의 예는 첨부된3Functions.mq5bat.mq5 파일에서 찾을 수 있습니다.






빠른 플로팅 함수

그래픽 라이브러리에는 사용 가능한 데이터를 기반으로 모든 그래프의 플로팅 단계를 수행하고 그 결과로 차트에 객체명을 반환하는 여러가지 GraphPlot() 전역 함수가 포함되어 있습니다. 이러한 함수는 R 또는 Phyton 언어의 '플롯'과 유사하여 다양한 형식으로 사용 가능한 데이터를 즉시 시각화 할 수 있습니다.

GraphPlot 함수에는 10가지 다양한 오버로드가 있어 다양한 수의 곡선을 단일 차트에 표시하고 다양한 방식으로 설정할 수 있습니다. 여러분이 할 일은 사용 가능한 방법 중 하나를 써서 곡선을 그리기 위한 데이터를 만들기만 하면 됩니다. 예를 들어, x[] 및 y[] 배열의 빠른 플로팅을 위한 소스 코드는 다음과 같습니다:

void OnStart()
  {
   doublex[]={-10,-4,-1,2,3,4,5,6,7,8};
   doubley[]={-5,4, -10,23,17,18, -9,13,17,4};
   GraphPlot(x,y);
  }

R에서 비슷하게 보입니다:

> x<-c(-10,-4,-1,2,3,4,5,6,7,8)
>
y<-c(-5,4,-10,23,17,18,-9,13,17,4)
>
plot(x,y)

MQL5의 GraphPlot 함수와 R의 plot 함수에 의해 구현된 세 가지 주요 디스플레이 모드로 그래프를 비교한 결과:

1. 점 곡선


2. 선


3. 히스토그램


GraphPlot() 및 plot() 함수의 상당한 시각적 차이 외에도 이들 함수는 서로 다른 입력 매개변수를 적용합니다. plot() 함수를 사용하면 특정한 곡선 매개변수(예: 선 너비를 변경하는 'lwd')를 설정할 수 있지만 GraphPlot() 함수에는 데이터 작성에 필요한 주요 매개변수만 포함됩니다.

이름을 지정해 보겠습니다:

  1. 위에서 설명한 네 가지 형식 중 하나의 곡선 데이터입니다.
  2. 플로팅 유형(기본값은 CURVE_POINTS).
  3. 객체명(기본값은 NULL).

그래픽 라이브러리를 사용하여 생성된 각 그래프는 차트 객체와 할당된 그래픽 리소스로 구성됩니다. 그래픽 리소스명은 객체명 앞에 "::"를 추가하기만 하면 객체명을 기반으로 구성됩니다. 예를 들어 객체명이 "SomeGraphic"이면 해당 그래픽 리소스의 이름은 "::SomeGraphic"입니다.

GraphPlot() 함수는 차트 x=65 및 y=45에 고정된 앵커 포인트가 있습니다. 그래프의 너비와 높이는 차트의 크기에 따라 계산됩니다: 너비는 차트의 60%이고 높이는 차트 높이의 65%입니다. 따라서 현재 차트의 차원이 65~45보다 작으면 GraphPlot() 함수가 제대로 작동하지 않습니다.

그래프를 생성하는 동안 이미 생성된 객체명을 적용하면 그래픽 라이브러리는 그래프의 리소스 유형을 확인한 후 해당 객체에 그래프를 표시하려고 시도합니다. 리소스의 유형이OBJ_BITMAP_LABEL인 경우 동일한 객체-리소스 쌍에 대해 플로팅이 수행됩니다.

객체명이 GraphPlot() 함수에 명시적으로 전달되면 해당 객체를 찾아 해당 객체에 그래프를 표시하려고 합니다. 객체를 찾을 수 없으면 지정된 이름을 기반으로 새로운 객체-리소스 쌍이 자동으로 생성됩니다. 명시적으로 지정된 객체명이 없는 채로 GraphPlot() 함수를 사용할 때는 "Graphic"이란 표준명이 사용됩니다. 

이 경우 그래프의 기준점과 크기를 지정할 수 있습니다. 이렇게 하려면 필요한 매개변수를 사용하여 객체-리소스 쌍을 생성하고 생성된 객체명을 GraphPlot() 함수에 전달합니다. 그래픽 객체명으로 쌍을 생성하면 GraphPlot 함수에 대한 표준 캔버스를 재정의하고 수정하여 각 호출에서 객체명을 전달할 필요가 없게 할 수 있습니다.

예를 들어 위의 예에서 데이터를 가져와 새로운 그래프의 크기를 750x350으로 설정해 보겠습니다. 또한 앵커 포인트를 왼쪽 상단 모서리로 이동해 보겠습니다.

void OnStart()
  {
//--- 차트 및 동적 리소스에 객체 생성
   string name="Graphic";
   long x=0;
   long y=0;
   intwidth =750;
   int height=350;
   int data[];
   ArrayResize(data,width*height);
   ZeroMemory(data);
   ObjectCreate(0,name,OBJ_BITMAP_LABEL,0,0,0);
   ResourceCreate("::"+name,data,width,height,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_BMPFILE,"::"+name);
//--- x 및 y 배열 생성
   doublearr_x[]={-10,-4,-1,2,3,4,5,6,7,8};
   doublearr_y[]={-5,4, -10,23,17,18, -9,13,17,4};
//--- x 및 y 배열 플롯
   GraphPlot(arr_x,arr_y,CURVE_LINES);
  }



과학 그래프 샘플

표준 라이브러리에는 확률 이론의 여러 통계 분포 작업을 위한 함수를 제공하는 통계 섹션이 포함되어 있습니다. 각 분포에는 샘플 그래프와 이를 검색하는 코드가 함께 제공됩니다. 여기서는 이 그래프들을 단일 GIF로 표시합니다. 예제의 소스 코드는 MQL5.zip 파일에 첨부되어 있습니다. MQL5\Scripts에 압축을 풉니다.

이 모든 예에는 CHART_SHOW 속성에 의해 비활성화된 가격 차트가 있습니다.

//--- 가격 차트 비활성화
   ChartSetInteger(0,CHART_SHOW,false);

이를 통해 차트 창을 하나의 커다란 캔버스로 만들고 그래픽 리소스를 적용하여 복잡한 객체를 그릴 수 있습니다.

Alglib 라이브러리에서 얻은 선형 회귀의 결과와 트레이닝 샘플을 표시하기 위해 그래픽 라이브러리를 적용하는 방법을 보여주는 "모스크바 거래소 선물에서 사용 가능한 스프레드 전략 개발의 예"란 기사를 읽어 보십시오.


그래픽 라이브러리의 주요 이점

MQL5 언어를 통해 개발자는 거래 로봇 및 기술 지표를 생성할 수 있을 뿐만 아니라 ALGLIB ,FuzzyStatistics 라이브러리를 사용하여 복잡한 수학적 계산을 수행할 수 있습니다. 데이터는 제공된 그래픽 라이브러리를 통해 쉽게 시각화 됩니다. 대부분의 작업은 자동화되며 라이브러리는 다음과 같은 여러가지 기능들을 제공합니다:

  • 5가지 그래프 디스플레이 유형
  • 10가지 차트 마커 유형
  • X 및 Y 축으로 차트의 크기 자동 조정
  • 그래프에 여러 가지 구성이 있는 경우에도 색상 자동 선택
  • 표준 앤티 앨리어싱 또는 고급 Bresenham 알고리즘을 사용하여 선을 평활화
  • 선을 표시하기 위한 스플라인 근사 매개변수를 설정하는 기능
  • x[] 및 y[] 배열을 기반으로 하여 한 줄의 코드를 사용해 그래프를 그리는 기능
  • 함수에 대한 포인터를 사용하여 그래프를 그리는 기능

그래픽 라이브러리는 과학 관련 그래프의 플롯을 단순화하고 트레이딩용 응용 프로그램의 개발을 새로운 수준으로 끌어 올립니다. MetaTrader 5 플랫폼을 사용하면 복잡한 수학적 계산을 수행하고 전문가와 같은 방식으로 터미널 창에 직접적인 결과를 표시할 수 있습니다.

첨부된 코드를 사용해 보세요. 다른 외부의 패키지가 더 이상 필요하지 않습니다!



MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/2866

파일 첨부됨 |
3Functions.mq5 (1.71 KB)
Bat.mq5 (2.94 KB)
iris.txt (4.59 KB)
IrisSample.mq5 (7.23 KB)
MQL5.zip (44.97 KB)
MetaTrader 5에서 DirectX를 사용하여 3D 그래픽을 만드는 방법 MetaTrader 5에서 DirectX를 사용하여 3D 그래픽을 만드는 방법
3D 그래픽은 숨겨진 패턴을 시각화 할 수 있습니다. 그러므로 방대한 양의 데이터를 분석하는 데 탁월합니다 이러한 작업은 MQL5에서 직접 해결할 수 있는데 DireсtX 함수를 사용하면 3차원 객체를 만들 수 있습니다. 따라서 MetaTrader 5용 3D 게임과 같은 복잡한 프로그램을 만드는 것도 가능합니다. 간단한 3차원 도형을 그리는 것으로 3D 그래픽을 배워보세요.
SQLite: MQL5로 SQL 데이터베이스의 처리 SQLite: MQL5로 SQL 데이터베이스의 처리
트레이딩 전략을 개발하는 일은 많은 양의 데이터를 처리하는 것과 관련이 있습니다. 이제 MQL5에서 SQLite를 기반으로 하는 SQL 쿼리를 사용하여 데이터베이스로 작업할 수 있습니다. 이 엔진에서 중요한 점 전체 데이터베이스가 사용자의 PC에 있는 단일 파일에 저장된다는 것입니다.
Expert Advisor 개발 기초부터 (파트 10): 맞춤형 지표 액세스하기 Expert Advisor 개발 기초부터 (파트 10): 맞춤형 지표 액세스하기
Expert Advisor에서 어떻게 맞춤형 지표에 바로 액세스 할 수 있을까요? 트레이딩 EA는 맞춤형 지표를 사용할 수 있는 경우에 더욱 유용할 수 있습니다; 그렇지 않으면 코드와 명령의 집합일 뿐입니다.
Expert Advisor 개발 기초부터 (파트 9): 개념적 도약(II) Expert Advisor 개발 기초부터 (파트 9): 개념적 도약(II)
이 기사에서는 차트 트레이드를 플로팅 창에 배치합니다. 이전 파트에서는 플로팅 창 내에서 템플릿을 사용할 수 있는 기본 시스템을 만들었습니다.