CGraphic을 사용하려고 할 때. 말레비치 제곱을 얻습니다.
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.001"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name= "RECTANGLE" ; // rectangle name
input int sleeping= 15000 ; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
int result_find= ObjectFind ( 0 ,rectangle_name);
Print ( "result_find: " ,result_find);
if (result_find!=- 1 )
{
datetime from = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 0 );
datetime to = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 1 );
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError ();
CopyTicksRange( Symbol (),tick_array_range, COPY_TICKS_INFO ,( ulong )from* 1000 ,( ulong )to* 1000 );
Print ( "Error: " , GetLastError ());
if ( GetLastError ()!= 0 )
return ;
double arr_ask[];
int size= ArraySize (tick_array_range);
ArrayResize (arr_ask,size);
for ( int i= 0 ;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
m_graphic.Create( 0 , "Deals" , 0 , 30 , 30 , 500 , 300 );
m_graphic.CurveAdd(arr_ask, 1 );
Print ( "Цвет фона перед \"Update\": " ,m_graphic.BackgroundColor());
m_graphic.Update();
Print ( "Цвет фона после \"Update\": " ,m_graphic.BackgroundColor());
Sleep (sleeping);
m_graphic.Destroy();
}
}
//+------------------------------------------------------------------+
2016.12 . 11 09 : 06 : 02.531 Terminal Windows 10 Pro (x64 based PC), IE 11.00 , UAC, Intel Core i3- 3120 M @ 2.50 GHz, RAM: 4882 / 8077 Mb, HDD: 357683 / 476372 Mb, GMT+ 02 : 00
2016.12 . 11 09 : 06 : 02.531 Terminal C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
"전문가" 또는 "저널"에는 오류가 없습니다.
새로운 기능, 특히 Grahic 라이브러리(과학적 그래프) 에 대한 응용 프로그램을 찾고 있습니다.
예를 들어, 사각형 개체를 사용하여 차트에서 영역을 선택하고 스크립트를 실행합니다.
프로그래머가 아닌 경우 이 사각형을 RECTANGLE이라고 추가해야 합니다.
질문 - x축에 무엇이 표시됩니까? 나는 2 개의 M1 막대를 선택하고 틱 수를 세었고 맞지 않으며 초도 일치하지 않습니다.
Update() 전에 Redraw()를 하지 않았습니다.
만든, 그래프 프레임, 축을 그립니다. 차트 자체가 없습니다.
그는 또한 추가하여 그림을 그립니다.
m_graphic.Create( 0 , "Deals" , 0 , 30 , 30 , 500 , 300 );
CCurve* curve = m_graphic.CurveAdd(arr_ask,CURVE_LINES);
curve.Color( clrBlack );
curve.Visible( true );
Print ( "Цвет фона перед \"Update\": " ,m_graphic.BackgroundColor());
m_graphic.Redraw();
m_graphic.Update();
....
***
만든, 그래프 프레임, 축을 그립니다. 차트 자체가 없습니다.
그는 또한 추가하여 그림을 그립니다.
m_graphic.Create( 0 , "Deals" , 0 , 30 , 30 , 500 , 300 );
CCurve* curve = m_graphic.CurveAdd(arr_ask,CURVE_LINES);
curve.Color( clrBlack );
curve.Visible( true );
Print ( "Цвет фона перед \"Update\": " ,m_graphic.BackgroundColor());
m_graphic.Redraw();
m_graphic.Update();
....
***
고맙습니다!
작업 버전(버전 "1.003"):
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.003"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name= "RECTANGLE" ; // rectangle name
input int sleeping= 15000 ; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
ResetLastError ();
int result_find= ObjectFind ( 0 ,rectangle_name);
if (result_find< 0 )
{
Print ( "ObjectFind Error: " , GetLastError ());
return ;
}
datetime from = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 0 );
datetime to = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 1 );
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError ();
CopyTicksRange( Symbol (),tick_array_range, COPY_TICKS_INFO ,( ulong )from* 1000 ,( ulong )to* 1000 );
if ( GetLastError ()!= 0 )
return ;
double arr_ask[];
int size= ArraySize (tick_array_range);
ArrayResize (arr_ask,size);
for ( int i= 0 ;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
m_graphic.Create( 0 , "Deals" , 0 , 30 , 30 , 500 , 300 ); // создает графический ресурс, привязанный к объекту чарта
CCurve *curve=m_graphic.CurveAdd(arr_ask, 1 ); // создает и добавляет кривую (CCurve) на график
curve.Visible( true ); // отображает кривую
m_graphic.Redraw(); // redraw grahic
m_graphic.Update(); // отображает на экране сделанные изменения
Sleep (sleeping);
m_graphic.Destroy(); // удаляет с чарта график и уничтожает графический ресурс
}
//+------------------------------------------------------------------+
CGraphic 클래스는 자체 캔버스를 사용하여 매우 성공적이지 못한(또는 잘못 생각한) 디자인을 가지고 있습니다.
현재 형태로는 순전히 실증적입니다. 다른 용도로는 적합하지 않습니다. 개체에 그리는 위치와 크기로 작업하는 것이 불가능하기 때문에 m_canvas는 뻔뻔스럽게도 전체 그래프 개체를 차지합니다.
그리고 m_canvas는 private이기 때문에 자신만의 방식으로 무언가를 상속하고 변경하는 것은 불가능합니다.
일반적으로 개발 완료하십시오.
캔버스를 상속할 때 사용할 수 있도록 하거나 차트에 실제 개체 없이 이 m_canvas로 작업한 다음 재량에 따라 완성된 구성을 가져갈 수 있도록 합니다.
m_canvas.FontSizeSet(m_history.name_size);
if (m_canvas.TextWidth(name)>m_history.name_width)
{
while (m_canvas.TextWidth(name+ "..." )>m_history.name_width)
name= StringSubstr (name, 0 , StringLen (name)- 1 );
name+= "..." ;
}
버그 발견 - 작은 m_history.name_width가 있는 무한 while 루프
오른쪽에서 이 기록을 비활성화하려면 어떻게 해야 합니까?
내가 이해하는 한도에서는:
GetX | 모든 곡선 점의 X 좌표를 배열에 씁니다. |
차트에 그려진 모든 점의 "x" 좌표(픽셀 단위 좌표) 배열에 들어가야 합니까?
우리는 다음을 확인합니다:
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.000"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input int m_width= 500 ; // ширина
input int m_height= 300 ; // высота
input int sleeping= 15000 ; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
double arr_example[ 15 ]={ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 };
m_graphic.Create( 0 , "Example" , 0 , 30 , 30 ,m_width,m_height); // создает графический ресурс, привязанный к объекту чарта
CCurve *curve=m_graphic.CurveAdd(arr_example, 1 ); // создает и добавляет кривую (CCurve) на график
curve.Visible( true ); // отображает кривую
m_graphic.Redraw(); // redraw grahic
double arr_get_x[];
curve.GetX(arr_get_x); // записываем координаты X для всех точек кривой в массив
ArrayPrint(arr_get_x); // распечатываем массив
m_graphic.Update(); // отображает на экране сделанные изменения
Sleep (sleeping);
m_graphic.Destroy(); // удаляет с чарта график и уничтожает графический ресурс
}
//+------------------------------------------------------------------+
차트가 그려집니다.
그리고 다음은 배열의 출력입니다. 여기에는 그래프가 작성된 데이터가 포함되지만 픽셀 단위의 "x" 좌표는 포함되지 않습니다.
차트에 그려진 모든 점의 "x" 좌표(픽셀 단위 좌표) 배열에 들어가야 합니까?
"픽셀"과 같은 연설은 가지 않았습니다.
배열 Y만 제출했습니다. 따라서 X는 단순 서수입니다. GetX를 올바르게 발행했습니다.
새로운 기능, 특히 Grahic 라이브러리(과학적 그래프) 에 대한 응용 프로그램을 찾고 있습니다.
예를 들어, 사각형 개체를 사용하여 차트에서 영역을 선택하고 스크립트를 실행합니다.
//| RECTANGLE_to_csv.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#property script_show_inputs
#include <Graphics/Graphic.mqh>
//---
input string rectangle_name= "RECTANGLE" ; // rectangle name
input int sleeping= 15000 ; // sleep (milliseconds)
//---
CGraphic m_graphic;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
int result_find= ObjectFind ( 0 ,rectangle_name);
Print ( "result_find: " ,result_find);
if (result_find!=- 1 )
{
datetime from = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 0 );
datetime to = ( datetime ) ObjectGetInteger ( 0 ,rectangle_name, OBJPROP_TIME , 1 );
MqlTick tick_array_range[]; // массив для приема тиков
ResetLastError ();
CopyTicksRange( Symbol (),tick_array_range, COPY_TICKS_INFO ,( ulong )from* 1000 ,( ulong )to* 1000 );
Print ( "Error: " , GetLastError ());
if ( GetLastError ()!= 0 )
return ;
double arr_ask[];
int size= ArraySize (tick_array_range);
ArrayResize (arr_ask,size);
for ( int i= 0 ;i<size;i++)
arr_ask[i]=tick_array_range[i].ask;
GraphPlot(arr_ask, 1 );
m_graphic.Destroy();
Sleep (sleeping);
ObjectsDeleteAll ( 0 , "Graphic" , 0 , OBJ_BITMAP_LABEL );
ChartRedraw ();
}
}
//+------------------------------------------------------------------+
결과적으로 Ask가 진드기로 만든 차트를 볼 수 있습니다.