그런데 CircleWu 기능을 단순화하고 가속화할 수 있습니다:
{
if(r<=0)
return;
//--- 예비 계산
double r2=r*r;
double quarter=round(r*M_SQRT1_2);
//--- 줄 스타일 설정
uint prev_style=m_style;
if(style!=UINT_MAX)
LineStyleSet(style);
uint mask=1<<m_style_idx;
//--- 그리기
for(int dx=0; dx<=quarter; dx++)
{
double dy=sqrt(r2-dx*dx);
double alpha1=dy-floor(dy);
double alpha2=1-alpha1;
if((m_style&mask)==mask)
{
PixelTransform4(x,y,dx,(int)(dy)+1,clr,alpha1);
PixelTransform4(x,y,dx,(int)(dy),clr,alpha2);
PixelTransform4(x,y,(int)dy+1,dx,clr,alpha1);
PixelTransform4(x,y,(int)dy,dx,clr,alpha2);
}
mask<<=1;
if(mask==0x1000000)
mask=1;
}
//--- 이전 줄 스타일 설정
if(style!=UINT_MAX)
m_style=prev_style;
}
수고하셨습니다! 고마워요. 이미 CircleAA 알고리즘을 수정하려고 했어요
그런데 CircleWu 함수를 단순화하고 가속화할 수 있습니다:
그래프 자체와 각 함수의 속성을 언제든지 변경할 수 있습니다. 예를 들어 그래프 축에 캡션을 추가하고, 곡선 이름을 변경하고, 스플라인 근사화 모드를 활성화해 보겠습니다:
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
{
CGraphic graphic;
graphic.Create(0,"Graphic",0,30,30,780,380);
double x[]={-10,-4,-1,2,3,4,5,6,7,8};
double y[]={-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();
}
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
그래프 자체와 각 함수의 속성을 언제든지 변경할 수 있습니다. 예를 들어 그래프 축에 캡션을 추가하고, 곡선 이름을 변경하고, 스플라인 근사화 모드를 사용하도록 설정해 보겠습니다:
{
curve.LinesIsSmooth(true);
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
차트에서 곡선을 다시 그릴 때 눈금도 업데이트되도록 하려면 어떻게 해야 하나요?
graphicfirst.Redraw(); и Update()
커브 자체는 업데이트되지만 이전 가격의 눈금은 그대로 유지되고 차트가 캔버스 경계 밖으로 이동합니다.
찾았어요, CalculateMaxMinValues() :)를 수행해야 합니다.
예를 들어 배열의 값을 변경할 때 이미 생성된 차트를 올바르게 다시 그리는 방법을 알려주실 수 있나요? Redraw() 및 Update()는 효과가 없습니다.
안녕하세요, 정확히 어떻게 차트를 다시 그리려고 하셨나요?
특정 곡선에 대한 데이터만 변경해야 하는 경우 여기에 작동하는 예제가 있습니다:
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
{
//--- 데이터 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);
}
안녕하세요, 정확히 어떻게 그래프를 다시 그리려고 하셨나요?
특정 곡선에 대한 데이터만 변경해야 하는 경우 여기에 작동하는 예가 있습니다:
추신 포럼에 그래픽 라이브러리에 관한 스레드가 있으며이 질문은 이미 제기되었습니다.고마워요, 이미 알아 냈습니다. 하나의 배열에서만 똑같은 작업을 수행했습니다.그래프에 대해서도 그래프.CalculateMaxMinValues ()를 다시 계산하면스케일이 업데이트됩니다.
CGraphic::Redraw(const bool rescale=false) 메서드를 참으로 설정하여 호출하면 스케일이 자동으로 다시 계산됩니다( CalculateMaxMinValues를 별도로 호출할 필요가 없습니다).
네, 알겠습니다. 감사합니다)
그래프에 두 개 이상의 눈금을 만들 수 있나요(자처럼 센티미터와 인치로 구분하고 그래프를 그리는 데 점으로만 값을 지정하는 경우)?
새로운 기고글 시각화! R 언어의 'plot'과 유사한 MQL5 그래픽 라이브러리 가 게재되었습니다:
트레이딩의 로직을 연구할 때 그래프의 형태로 표시되는 시각적 표현은 매우 중요합니다. 과학 관련 커뮤니티에서 널리 사용되는 여러 프로그래밍 언어(예: R 및 Python)에는 시각화에 사용되는 특수한 '플롯' 함수가 있습니다. 이 함수들이 선, 점 분포 및 히스토그램을 그려서 패턴을 시각화 할 수 있습니다. MQL5에서는 CGraphics 클래스를 사용하여 동일한 작업을 수행할 수 있습니다.
함수에 그래프 - 몇 줄로 빠르게 생성
라이브러리의 또 다른 장점은 함수에 대한 CurveFunction 포인터로 작업을 한다는 것입니다. MQL5에서 함수에 대한 포인터는 전역 또는 정적 함수만을 허용하지만 함수 구문은 포인터 1에 완전히 대응해야 합니다. 여기서도 double을 받는 double형 매개변수를 받는 함수에 대해 CurveFunction이 구성되어 있습니다.
함수에 대한 포인터로 곡선을 구성하려면 초기(from) 및 최종(to)의 인수 값과 증분(단계)도 정확하게 설정해야 합니다. 증분 값이 적을수록 구성하기 위한 더 많은 함수 포인트가 있게 됩니다. 데이터 시리즈를 생성하려면 CurveAdd()를 사용하고 함수를 플롯 하려면 CurvePlot() 또는 CurvePlotAll()을 적용하십시오.
그래픽 라이브러리의 주요 이점
MQL5 언어를 통해 개발자는 거래 로봇 및 기술 지표를 생성할 수 있을 뿐만 아니라 ALGLIB ,Fuzzy 및 Statistics 라이브러리를 사용하여 복잡한 수학적 계산을 수행할 수 있습니다. 데이터는 제공된 그래픽 라이브러리를 통해 쉽게 시각화 됩니다. 대부분의 작업은 자동화되며 라이브러리는 다음과 같은 여러가지 기능들을 제공합니다:
그래픽 라이브러리는 과학 관련 그래프의 플롯을 단순화하고 트레이딩용 응용 프로그램의 개발을 새로운 수준으로 끌어 올립니다. MetaTrader 5 플랫폼을 사용하면 복잡한 수학적 계산을 수행하고 전문가와 같은 방식으로 터미널 창에 직접적인 결과를 표시할 수 있습니다.
첨부된 코드를 사용해 보세요. 다른 외부의 패키지가 더 이상 필요하지 않습니다!
작성자: MetaQuotes