Gráficos na biblioteca DoEasy (Parte 84): classes herdeiras do objeto gráfico abstrato padrão
Artyom Trishkin | 5 novembro, 2021
Sumário
- Ideia
- Aprimorando as classes da biblioteca
- Classes herdeiras do objeto gráfico abstrato
- Teste
- O que vem agora?
Ideia
No último artigo criamos uma classe do objeto gráfico abstrato padrão do terminal. O objeto deste tipo de classe descreve propriedades comuns a todos os objetos gráficos, isto é, ele é apenas um tipo de objeto gráfico. Para entender se pertence a um objeto gráfico real, precisamos gerar herança a partir dele, já na classe do objeto herdeiro precisamos escrever as propriedades que são específicas do objeto gráfico em particular. Por outra parte, algumas propriedades restringem o acesso a ele, uma vez que não são parâmetros deste objeto gráfico particular, mas estão disponíveis no conjunto de propriedades do objeto abstrato.
Esta abordagem para construir objetos é aceito por quase todos os objetos de biblioteca, e as classes dos objetos gráficos não são exceção.
Para especificar se os objetos criados hoje pertencem ao grupo de objetos gráficos, tomaremos um conjunto de grupos de objetos gráficos padrão a partir do terminal e adicionaremos uma nova propriedade ao objeto gráfico abstrato, isto é, o grupo ao qual pertence o objeto gráfico descrito pela classe herdeira:
Hoje vamos criar classes de objetos pertencentes aos grupos Lines, Channels, Gann, Fibonacci e Elliott. Faremos o resto dos grupos de objetos no próximo artigo. A razão é que não podemos descrever todas as propriedades desses objetos usando a funcionalidade existente de objeto gráfico abstrato. Por isso, hoje vamos fazer o que a classe criada no artigo anterior já oferece e no próximo artigo vamos acrescentar a capacidade de ler e escrever todas as propriedades dos objetos, e vamos escrever classes para os outros grupos de objetos gráficos.
Aqui estamos falando, por exemplo, dos pontos de ancoragem de um objeto gráfico. As propriedades armazenadas no objeto gráfico abstrato estão nas matrizes de propriedades do objeto, onde cada campo de matriz descreve uma propriedade, como o tempo. Esse tempo é obtido por padrão a partir do primeiro ponto de ancoragem do objeto gráfico. Todos os outros pontos de ancoragem podem ser obtidos a partir da função ObjectGetInteger() especificando o índice do ponto desejado com o modificador de propriedade. Nossa classe pode armazenar apenas um valor. Em consequência, aqui precisaremos criar, por exemplo, uma matriz de propriedades do mesmo tipo e acessar as propriedades necessárias da mesma forma que com o modificador de propriedade.
Como a extensão do artigo é incerta, vamos dividir o trabalho em várias fases, e assim, gradualmente, chegaremos a uma solução final.
Aprimorando as classes da biblioteca
No arquivo MQL5\Include\DoEasy\Data.mqh adicionamos as enumerações de grupos de objetos gráficos padrão:
//+------------------------------------------------------------------+ //| The list of graphical element types | //+------------------------------------------------------------------+ enum ENUM_GRAPH_ELEMENT_TYPE { GRAPH_ELEMENT_TYPE_STANDART, // Standard graphical object GRAPH_ELEMENT_TYPE_ELEMENT, // Element GRAPH_ELEMENT_TYPE_SHADOW_OBJ, // Shadow object GRAPH_ELEMENT_TYPE_FORM, // Form GRAPH_ELEMENT_TYPE_WINDOW, // Window }; //+------------------------------------------------------------------+ //| Graphical object group | //+------------------------------------------------------------------+ enum ENUM_GRAPH_OBJ_GROUP { GRAPH_OBJ_GROUP_LINES, // Lines GRAPH_OBJ_GROUP_CHANNELS, // Channels GRAPH_OBJ_GROUP_GANN, // Gann GRAPH_OBJ_GROUP_FIBO, // Fibo GRAPH_OBJ_GROUP_ELLIOTT, // Elliott GRAPH_OBJ_GROUP_SHAPES, // Shapes GRAPH_OBJ_GROUP_ARROWS, // Arrows GRAPH_OBJ_GROUP_GRAPHICAL, // Graphical objects }; //+------------------------------------------------------------------+ //| Integer properties of a standard graphical object | //+------------------------------------------------------------------+
Adicionar esta nova propriedade à lista de propriedades inteiras do objeto e aumentamos o número de propriedades inteiras em 1 (de 51 para 52):
//+------------------------------------------------------------------+ //| Integer properties of a standard graphical object | //+------------------------------------------------------------------+ enum ENUM_GRAPH_OBJ_PROP_INTEGER { //--- Additional properties GRAPH_OBJ_PROP_ID = 0, // Object ID GRAPH_OBJ_PROP_TYPE, // Graphical object type (ENUM_OBJECT) GRAPH_OBJ_PROP_ELEMENT_TYPE, // Graphical element type (ENUM_GRAPH_ELEMENT_TYPE) GRAPH_OBJ_PROP_GROUP, // Graphical object group (ENUM_GRAPH_OBJ_GROUP) GRAPH_OBJ_PROP_BELONG, // Graphical object affiliation GRAPH_OBJ_PROP_CHART_ID, // Chart ID GRAPH_OBJ_PROP_WND_NUM, // Chart subwindow index GRAPH_OBJ_PROP_NUM, // Object index in the list //--- Common properties of all graphical objects GRAPH_OBJ_PROP_CREATETIME, // Object creation time GRAPH_OBJ_PROP_TIMEFRAMES, // Object visibility on timeframes GRAPH_OBJ_PROP_BACK, // Background object GRAPH_OBJ_PROP_ZORDER, // Priority of a graphical object for receiving the event of clicking on a chart GRAPH_OBJ_PROP_HIDDEN, // Disable displaying the name of a graphical object in the terminal object list GRAPH_OBJ_PROP_SELECTED, // Object selection GRAPH_OBJ_PROP_SELECTABLE, // Object availability //--- Properties belonging to different graphical objects GRAPH_OBJ_PROP_TIME, // Time coordinate GRAPH_OBJ_PROP_COLOR, // Color GRAPH_OBJ_PROP_STYLE, // Style GRAPH_OBJ_PROP_WIDTH, // Line width GRAPH_OBJ_PROP_FILL, // Object color filling GRAPH_OBJ_PROP_READONLY, // Ability to edit text in the Edit object GRAPH_OBJ_PROP_LEVELS, // Number of levels GRAPH_OBJ_PROP_LEVELCOLOR, // Level line color GRAPH_OBJ_PROP_LEVELSTYLE, // Level line style GRAPH_OBJ_PROP_LEVELWIDTH, // Level line width GRAPH_OBJ_PROP_ALIGN, // Horizontal text alignment in the Edit object (OBJ_EDIT) GRAPH_OBJ_PROP_FONTSIZE, // Font size GRAPH_OBJ_PROP_RAY_LEFT, // Ray goes to the left GRAPH_OBJ_PROP_RAY_RIGHT, // Ray goes to the right GRAPH_OBJ_PROP_RAY, // Vertical line goes through all windows of a chart GRAPH_OBJ_PROP_ELLIPSE, // Display the full ellipse of the Fibonacci Arc object GRAPH_OBJ_PROP_ARROWCODE, // Arrow code for the "Arrow" object GRAPH_OBJ_PROP_ANCHOR, // Position of the binding point of the graphical object GRAPH_OBJ_PROP_XDISTANCE, // Distance from the base corner along the X axis in pixels GRAPH_OBJ_PROP_YDISTANCE, // Distance from the base corner along the Y axis in pixels GRAPH_OBJ_PROP_DIRECTION, // Gann object trend GRAPH_OBJ_PROP_DEGREE, // Elliott wave marking level GRAPH_OBJ_PROP_DRAWLINES, // Display lines for Elliott wave marking GRAPH_OBJ_PROP_STATE, // Button state (pressed/released) GRAPH_OBJ_PROP_OBJ_CHART_ID, // Chart object ID (OBJ_CHART). GRAPH_OBJ_PROP_CHART_OBJ_PERIOD, // Chart object period GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE, // Time scale display flag for the Chart object GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE, // Price scale display flag for the Chart object GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE, // Chart object scale GRAPH_OBJ_PROP_XSIZE, // Object width along the X axis in pixels. GRAPH_OBJ_PROP_YSIZE, // Object height along the Y axis in pixels. GRAPH_OBJ_PROP_XOFFSET, // X coordinate of the upper-left corner of the visibility area. GRAPH_OBJ_PROP_YOFFSET, // Y coordinate of the upper-left corner of the visibility area. GRAPH_OBJ_PROP_BGCOLOR, // Background color for OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL GRAPH_OBJ_PROP_CORNER, // Chart corner for binding a graphical object GRAPH_OBJ_PROP_BORDER_TYPE, // Border type for "Rectangle border" GRAPH_OBJ_PROP_BORDER_COLOR, // Border color for OBJ_EDIT and OBJ_BUTTON }; #define GRAPH_OBJ_PROP_INTEGER_TOTAL (52) // Total number of integer properties #define GRAPH_OBJ_PROP_INTEGER_SKIP (0) // Number of integer properties not used in sorting //+------------------------------------------------------------------+
Na lista de possíveis critérios para classificação de objetos gráficos incluímos a classificação por propriedade nova:
//+------------------------------------------------------------------+ //| Possible sorting criteria of graphical objects | //+------------------------------------------------------------------+ #define FIRST_GRAPH_OBJ_DBL_PROP (GRAPH_OBJ_PROP_INTEGER_TOTAL-GRAPH_OBJ_PROP_INTEGER_SKIP) #define FIRST_GRAPH_OBJ_STR_PROP (GRAPH_OBJ_PROP_INTEGER_TOTAL-GRAPH_OBJ_PROP_INTEGER_SKIP+GRAPH_OBJ_PROP_DOUBLE_TOTAL-GRAPH_OBJ_PROP_DOUBLE_SKIP) enum ENUM_SORT_GRAPH_OBJ_MODE { //--- Sort by integer properties SORT_BY_GRAPH_OBJ_ID = 0, // Sort by object ID SORT_BY_GRAPH_OBJ_TYPE, // Sort by object type SORT_BY_GRAPH_OBJ_ELEMENT_TYPE, // Sort by graphical element type SORT_BY_GRAPH_OBJ_GROUP, // Sort by a graphical object group SORT_BY_GRAPH_OBJ_BELONG, // Sort by a graphical element affiliation SORT_BY_GRAPH_OBJ_CHART_ID, // Sort by chart ID SORT_BY_GRAPH_OBJ_WND_NUM, // Sort by chart subwindow index SORT_BY_GRAPH_OBJ_NUM, // Sort by object index in the list SORT_BY_GRAPH_OBJ_CREATETIME, // Sort by object creation time SORT_BY_GRAPH_OBJ_TIMEFRAMES, // Sort by object visibility on timeframes SORT_BY_GRAPH_OBJ_BACK, // Sort by the "Background object" property SORT_BY_GRAPH_OBJ_ZORDER, // Sort by the priority of a graphical object for receiving the event of clicking on a chart SORT_BY_GRAPH_OBJ_HIDDEN, // Sort by a disabling display of the name of a graphical object in the terminal object list SORT_BY_GRAPH_OBJ_SELECTED, // Sort by the "Object selection" property SORT_BY_GRAPH_OBJ_SELECTABLE, // Sort by the "Object availability" property SORT_BY_GRAPH_OBJ_TIME, // Sort by time coordinate SORT_BY_GRAPH_OBJ_COLOR, // Sort by color SORT_BY_GRAPH_OBJ_STYLE, // Sort by style SORT_BY_GRAPH_OBJ_WIDTH, // Sort by line width SORT_BY_GRAPH_OBJ_FILL, // Sort by the "Object color filling" property SORT_BY_GRAPH_OBJ_READONLY, // Sort by the ability to edit text in the Edit object SORT_BY_GRAPH_OBJ_LEVELS, // Sort by number of levels SORT_BY_GRAPH_OBJ_LEVELCOLOR, // Sort by line level color SORT_BY_GRAPH_OBJ_LEVELSTYLE, // Sort by line level style SORT_BY_GRAPH_OBJ_LEVELWIDTH, // Sort by line level width SORT_BY_GRAPH_OBJ_ALIGN, // Sort by the "Horizontal text alignment in the Entry field" property SORT_BY_GRAPH_OBJ_FONTSIZE, // Sort by font size SORT_BY_GRAPH_OBJ_RAY_LEFT, // Sort by "Ray goes to the left" property SORT_BY_GRAPH_OBJ_RAY_RIGHT, // Sort by "Ray goes to the right" property SORT_BY_GRAPH_OBJ_RAY, // Sort by the "Vertical line goes through all windows of a chart" property SORT_BY_GRAPH_OBJ_ELLIPSE, // Sort by the "Display the full ellipse of the Fibonacci Arc object" property SORT_BY_GRAPH_OBJ_ARROWCODE, // Sort by an arrow code for the Arrow object SORT_BY_GRAPH_OBJ_ANCHOR, // Sort by the position of a binding point of a graphical object SORT_BY_GRAPH_OBJ_XDISTANCE, // Sort by a distance from the base corner along the X axis in pixels SORT_BY_GRAPH_OBJ_YDISTANCE, // Sort by a distance from the base corner along the Y axis in pixels SORT_BY_GRAPH_OBJ_DIRECTION, // Sort by the "Gann object trend" property SORT_BY_GRAPH_OBJ_DEGREE, // Sort by the "Elliott wave marking level" property SORT_BY_GRAPH_OBJ_DRAWLINES, // Sort by the "Display lines for Elliott wave marking" property SORT_BY_GRAPH_OBJ_STATE, // Sort by button state (pressed/released) SORT_BY_GRAPH_OBJ_OBJ_CHART_ID, // Sort by Chart object ID. SORT_BY_GRAPH_OBJ_CHART_OBJ_PERIOD, // Sort by Chart object period SORT_BY_GRAPH_OBJ_CHART_OBJ_DATE_SCALE, // Sort by time scale display flag for the Chart object SORT_BY_GRAPH_OBJ_CHART_OBJ_PRICE_SCALE, // Sort by price scale display flag for the Chart object SORT_BY_GRAPH_OBJ_CHART_OBJ_CHART_SCALE, // Sort by Chart object scale SORT_BY_GRAPH_OBJ_XSIZE, // Sort by Object width along the X axis in pixels SORT_BY_GRAPH_OBJ_YSIZE, // Sort by object height along the Y axis in pixels SORT_BY_GRAPH_OBJ_XOFFSET, // Sort by X coordinate of the upper-left corner of the visibility area SORT_BY_GRAPH_OBJ_YOFFSET, // Sort by Y coordinate of the upper-left corner of the visibility area SORT_BY_GRAPH_OBJ_BGCOLOR, // Sort by background color for OBJ_EDIT, OBJ_BUTTON and OBJ_RECTANGLE_LABEL SORT_BY_GRAPH_OBJ_CORNER, // Sort by chart corner for binding a graphical object SORT_BY_GRAPH_OBJ_BORDER_TYPE, // Sort by border type for the "Rectangle border" object SORT_BY_GRAPH_OBJ_BORDER_COLOR, // Sort by frame color for the OBJ_EDIT and OBJ_BUTTON objects //--- Sort by real properties SORT_BY_GRAPH_OBJ_PRICE = FIRST_GRAPH_OBJ_DBL_PROP, // Sort by price coordinate SORT_BY_GRAPH_OBJ_LEVELVALUE, // Sort by level value SORT_BY_GRAPH_OBJ_SCALE, // Sort by scale (property of Gann objects and Fibonacci Arcs objects) SORT_BY_GRAPH_OBJ_ANGLE, // Sort by angle SORT_BY_GRAPH_OBJ_DEVIATION, // Sort by a deviation of the standard deviation channel //--- Sort by string properties SORT_BY_GRAPH_OBJ_NAME = FIRST_GRAPH_OBJ_STR_PROP, // Sort by object name SORT_BY_GRAPH_OBJ_TEXT, // Sort by object description SORT_BY_GRAPH_OBJ_TOOLTIP, // Sort by tooltip text SORT_BY_GRAPH_OBJ_LEVELTEXT, // Sort by level description SORT_BY_GRAPH_OBJ_FONT, // Sort by font SORT_BY_GRAPH_OBJ_BMPFILE, // Sort by BMP file name for the "Bitmap Level" object SORT_BY_GRAPH_OBJ_CHART_OBJ_SYMBOL, // Sort by Chart object period symbol }; //+------------------------------------------------------------------+
No arquivo \MQL5\Include\DoEasy\Data.mqh inserimos os índices das novas mensagens da biblioteca:
//+------------------------------------------------------------------+ //| List of the library's text message indices | //+------------------------------------------------------------------+ enum ENUM_MESSAGES_LIB { MSG_LIB_PARAMS_LIST_BEG=ERR_USER_ERROR_FIRST, // Beginning of the parameter list MSG_LIB_PARAMS_LIST_END, // End of the parameter list MSG_LIB_PROP_NOT_SUPPORTED, // Property not supported MSG_LIB_PROP_NOT_SUPPORTED_MQL4, // Property not supported in MQL4 MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_2155, // Property not supported in MetaTrader 5 versions lower than 2155 MSG_LIB_PROP_NOT_SUPPORTED_POSITION, // Property not supported for position MSG_LIB_PROP_NOT_SUPPORTED_PENDING, // Property not supported for pending order MSG_LIB_PROP_NOT_SUPPORTED_MARKET, // Property not supported for market order MSG_LIB_PROP_NOT_SUPPORTED_MARKET_HIST, // Property not supported for historical market order MSG_LIB_PROP_NOT_SET, // Value not set MSG_LIB_PROP_EMPTY, // Not set MSG_LIB_PROP_AUTO, // Formed by the terminal MSG_LIB_PROP_AS_IN_ORDER, // According to the order expiration mode
...
MSG_LIB_TEXT_FAILED_ADD_TO_LIST, // failed to add to list MSG_LIB_TEXT_TIME_UNTIL_THE_END_DAY, // Order lifetime till the end of the current day to be used MSG_LIB_TEXT_OBJ_NO_PERIODS, // Not shown on any timeframe MSG_LIB_TEXT_OBJ_ALL_PERIODS, // Drawn on all timeframes MSG_LIB_TEXT_JANUARY, // January MSG_LIB_TEXT_FEBRUARY, // February
...
MSG_GRAPH_OBJ_BELONG_PROGRAM, // Graphical object belongs to a program MSG_GRAPH_OBJ_BELONG_NO_PROGRAM, // Graphical object does not belong to a program //--- MSG_GRAPH_STD_OBJ_ANY, // Abstract graphical object MSG_GRAPH_STD_OBJ_VLINE, // Vertical line MSG_GRAPH_STD_OBJ_HLINE, // Horizontal line
...
MSG_GRAPH_OBJ_PROP_BMPFILE, // BMP file name for the "Bitmap Level" object MSG_GRAPH_OBJ_PROP_SYMBOL, // Chart object symbol MSG_GRAPH_OBJ_PROP_GROUP, // Graphical object group MSG_GRAPH_OBJ_PROP_GROUP_LINES, // Lines MSG_GRAPH_OBJ_PROP_GROUP_CHANNELS, // Channels MSG_GRAPH_OBJ_PROP_GROUP_GANN, // Gann MSG_GRAPH_OBJ_PROP_GROUP_FIBO, // Fibo MSG_GRAPH_OBJ_PROP_GROUP_ELLIOTT, // Elliott MSG_GRAPH_OBJ_PROP_GROUP_SHAPES, // Shapes MSG_GRAPH_OBJ_PROP_GROUP_ARROWS, // Arrows MSG_GRAPH_OBJ_PROP_GROUP_GRAPHICAL, // Graphical objects MSG_GRAPH_OBJ_TEXT_CLICK_COORD, // (Chart click coordinate) }; //+------------------------------------------------------------------+
e as mensagens que correspondem aos índices recém-adicionados:
string messages_library[][TOTAL_LANG]= { {"Начало списка параметров","The beginning of the parameter list"}, {"Конец списка параметров","End of parameter list"}, {"Свойство не поддерживается","Property not supported"}, {"Свойство не поддерживается в MQL4","Property not supported in MQL4"}, {"Свойство не поддерживается в MetaTrader5 версии ниже 2155","The property is not supported in MetaTrader5, build lower than 2155"}, {"Свойство не поддерживается у позиции","Property not supported for position"}, {"Свойство не поддерживается у отложенного ордера","The property is not supported for a pending order"}, {"Свойство не поддерживается у маркет-ордера","The property is not supported for a market-order"}, {"Свойство не поддерживается у исторического маркет-ордера","The property is not supported for a history market-order"}, {"Значение не задано","Value not set"}, {"Отсутствует","Not set"}, {"Формируется терминалом","Formed by the terminal"}, {"В соответствии с режимом истечения ордера","In accordance with the order expiration mode"},
...
{"не удалось добавить в список","failed to add to list"}, {"Будет использоваться время действия ордера до конца текущего дня","Order validity time until the end of the current day will be used"}, {"Не показывается ни на одном таймфрейме","Not shown on any timeframe"}, {"Рисуется на всех таймфреймах","Drawn on all timeframes"}, {"Январь","January"}, {"Февраль","February"},
...
{"Графический объект принадлежит программе","The graphic object belongs to the program"}, {"Графический объект не принадлежит программе","The graphic object does not belong to the program"}, {"Абстрактный графический объект","Abstract graphic object"}, {"Вертикальная линия","Vertical Line"}, {"Горизонтальная линия","Horizontal Line"},
...
{"Имя BMP-файла","BMP-file name"}, {"Символ графика","Chart Symbol"}, {"Группа графического объекта","Graphic object group"}, {"Линии","Lines"}, {"Каналы","Channels"}, {"Ганн","Gann"}, {"Фибоначчи","Fibonacci"}, {"Эллиотт","Elliott"}, {"Фигуры","Shapes"}, {"Стрелки","Arrows"}, {"Графические объекты","Graphical"}, {"(Координата щелчка по графику)","(Chart click coordinate)"}, }; //+---------------------------------------------------------------------+
O objeto gráfico tem a propriedade inteira OBJPROP_TIMEFRAMES que permite definir ou obter a exibição do objeto em qualquer um dos períodos gráficos. Os períodos gráficos em que o objeto é exibido podem ser definidos ou configurados através de uma combinação de sinalizadores de visibilidade do objeto.
Para que possamos exibir uma descrição do sinalizadores de visibilidade definidas para o objeto gráfico, no arquivo de funções de serviço
\MQL5\Include\DoEasy\Services\DELib.mqh escrevemos uma função que retorna se o sinalizador está definido ou desmarcado para o período gráfico solicitado:
//+------------------------------------------------------------------+ //| Return the flag of displaying the graphical | //| object on a specified chart timeframe | //+------------------------------------------------------------------+ bool IsVisibleOnTimeframe(const ENUM_TIMEFRAMES timeframe,const int flags) { if(flags==OBJ_ALL_PERIODS) return true; if(flags==OBJ_NO_PERIODS) return false; int flag=0; switch((int)timeframe) { case PERIOD_M1 : flag=0x00000001; break; case PERIOD_M2 : flag=0x00000002; break; case PERIOD_M3 : flag=0x00000004; break; case PERIOD_M4 : flag=0x00000008; break; case PERIOD_M5 : flag=0x00000010; break; case PERIOD_M6 : flag=0x00000020; break; case PERIOD_M10 : flag=0x00000040; break; case PERIOD_M12 : flag=0x00000080; break; case PERIOD_M15 : flag=0x00000100; break; case PERIOD_M20 : flag=0x00000200; break; case PERIOD_M30 : flag=0x00000400; break; case PERIOD_H1 : flag=0x00000800; break; case PERIOD_H2 : flag=0x00001000; break; case PERIOD_H3 : flag=0x00002000; break; case PERIOD_H4 : flag=0x00004000; break; case PERIOD_H6 : flag=0x00008000; break; case PERIOD_H8 : flag=0x00010000; break; case PERIOD_H12 : flag=0x00020000; break; case PERIOD_D1 : flag=0x00040000; break; case PERIOD_W1 : flag=0x00080000; break; case PERIOD_MN1 : flag=0x00100000; break; default: break; } return((flags & flag)==flag); } //+------------------------------------------------------------------+
Se no valor passado para a função os sinalizadores de todos os períodos gráficos estiverem definidos (OBJ_ALL_PERIODS), veremos o objeto em todos os períodos gráficos, e imediatamente retornamos true sem verificação de sinalizadores.
Se os sinalizadores de todos os períodos gráficos (OBJ_NO_PERIODS), o objeto será completamente oculto em todos os períodos gráficos, logo retornamos false.
Em seguida, dependendo do valor de período gráfico para a função, definimos como variável flag os valores respectivos que usaremos depois para comparar os bits da variável flags.
Depois de obter o valor da máscara de bits, comparamos com o valor obtido colocando a máscara de bits sobre o valor da variável flags. E retorna o resultado desta comparação bit a bit. A função retorna true só se na variável flags estiver definido o bit a ser verificado a nível de máscara.
Definimos grupos de objetos gráficos. Agora vamos adicionar este novo valor às propriedades do objeto gráfico.
No arquivo da classe do objeto base de todos os objetos gráficos da biblioteca \MQL5\Include\DoEasy\Objects\Graph\GBaseObj.mqh, na sua seção protegida, declaramos uma variável para armazenar o grupo do objeto gráfico:
//+------------------------------------------------------------------+ //| Class of the base object of the library graphical objects | //+------------------------------------------------------------------+ class CGBaseObj : public CObject { private: protected: ENUM_OBJECT m_type_graph_obj; // Graphical object type ENUM_GRAPH_ELEMENT_TYPE m_type_element; // Graphical element type ENUM_GRAPH_OBJ_BELONG m_belong; // Program affiliation ENUM_GRAPH_OBJ_GROUP m_group; // Graphical object group string m_name_prefix; // Object name prefix string m_name; // Object name long m_chart_id; // Object chart ID long m_object_id; // Object ID long m_zorder; // Priority of a graphical object for receiving the mouse click event int m_subwindow; // Subwindow index int m_shift_y; // Subwindow Y coordinate shift int m_type; // Object type int m_timeframes_visible; // Visibility of an object on timeframes (a set of flags) int m_digits; // Number of decimal places in a quote bool m_visible; // Object visibility bool m_back; // "Background object" flag bool m_selected; // "Object selection" flag bool m_selectable; // "Object availability" flag bool m_hidden; // "Disable displaying the name of a graphical object in the terminal object list" flag datetime m_create_time; // Object creation time
Na seção pública vamos escrever um método para definir o grupo do objeto gráfico:
public: //--- Set the values of the class variables void SetObjectID(const long value) { this.m_object_id=value; } void SetBelong(const ENUM_GRAPH_OBJ_BELONG belong){ this.m_belong=belong; } void SetTypeGraphObject(const ENUM_OBJECT obj) { this.m_type_graph_obj=obj; } void SetTypeElement(const ENUM_GRAPH_ELEMENT_TYPE type) { this.m_type_element=type;} void SetGroup(const ENUM_GRAPH_OBJ_GROUP group){ this.m_group=group; } void SetName(const string name) { this.m_name=name; } void SetChartID(const long chart_id) { this.m_chart_id=chart_id; } void SetDigits(const int value) { this.m_digits=value; }
e o método para retornar o grupo:
//--- Return the values of class variables ENUM_GRAPH_ELEMENT_TYPE TypeGraphElement(void) const { return this.m_type_element; } ENUM_GRAPH_OBJ_BELONG Belong(void) const { return this.m_belong; } ENUM_GRAPH_OBJ_GROUP Group(void) const { return this.m_group; } ENUM_OBJECT TypeGraphObject(void) const { return this.m_type_graph_obj; } datetime TimeCreate(void) const { return this.m_create_time; } string Name(void) const { return this.m_name; } long ChartID(void) const { return this.m_chart_id; } long ObjectID(void) const { return this.m_object_id; } long Zorder(void) const { return this.m_zorder; } int SubWindow(void) const { return this.m_subwindow; } int ShiftY(void) const { return this.m_shift_y; } int VisibleOnTimeframes(void) const { return this.m_timeframes_visible; } int Digits(void) const { return this.m_digits; } bool IsBack(void) const { return this.m_back; } bool IsSelected(void) const { return this.m_selected; } bool IsSelectable(void) const { return this.m_selectable; } bool IsHidden(void) const { return this.m_hidden; } bool IsVisible(void) const { return this.m_visible; }
O método previamente escrito que retorna o sinalizador de visibilidade do objeto no período gráfico especificado será retirado da seção pública da classe:
//--- Return the object visibility flag on a specified timeframe bool IsVisibleOnTimeframe(const ENUM_TIMEFRAMES timeframe) const { return((this.m_timeframes_visible & timeframe)==timeframe); } //--- Return the graphical object type (ENUM_OBJECT) calculated from the object type (ENUM_OBJECT_DE_TYPE) passed to the method ENUM_OBJECT GraphObjectType(const ENUM_OBJECT_DE_TYPE obj_type) const { return ENUM_OBJECT(obj_type-OBJECT_DE_TYPE_GSTD_OBJ-1); }
Primeiro, não está escrito corretamente (não sei o que me levou a escrevê-lo dessa maneira e não verificá-lo...), segundo, já escrevemos uma função de serviço acima que faz a mesma coisa.
Em seguida, declaramos um método que retorna uma descrição do grupo de objeto gráfico:
//--- Return the graphical object type (ENUM_OBJECT) calculated from the object type (ENUM_OBJECT_DE_TYPE) passed to the method ENUM_OBJECT GraphObjectType(const ENUM_OBJECT_DE_TYPE obj_type) const { return ENUM_OBJECT(obj_type-OBJECT_DE_TYPE_GSTD_OBJ-1); } //--- Return the description of the type of the graphical object (1) type, (2) element, (3) affiliation and (4) group string TypeGraphObjectDescription(void); string TypeElementDescription(void); string BelongDescription(void); string GroupDescription(void); //--- The virtual method returning the object type virtual int Type(void) const { return this.m_type; } //--- Constructor/destructor CGBaseObj(); ~CGBaseObj(){;} }; //+------------------------------------------------------------------+
Fora do corpo da classe, vamos escrever sua implementação:
//+------------------------------------------------------------------+ //| Return the description of the graphical object group | //+------------------------------------------------------------------+ string CGBaseObj::GroupDescription(void) { return ( this.Group()==GRAPH_OBJ_GROUP_LINES ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_LINES) : this.Group()==GRAPH_OBJ_GROUP_CHANNELS ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_CHANNELS) : this.Group()==GRAPH_OBJ_GROUP_GANN ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_GANN) : this.Group()==GRAPH_OBJ_GROUP_FIBO ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_FIBO) : this.Group()==GRAPH_OBJ_GROUP_ELLIOTT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_ELLIOTT) : this.Group()==GRAPH_OBJ_GROUP_SHAPES ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_SHAPES) : this.Group()==GRAPH_OBJ_GROUP_ARROWS ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_ARROWS) : this.Group()==GRAPH_OBJ_GROUP_GRAPHICAL? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP_GRAPHICAL) : "Unknown" ); } //+------------------------------------------------------------------+
Aqui, basta retornar a mensagem de texto correspondente, dependendo do valor armazenado na variável m_group e retornado pelo método Group().
Modificamos a classe do objeto gráfico abstrato no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdGraphObj.mqh.
Como algumas propriedades dos objetos serão diferentes para diferentes objetos gráficos, a implementação dos métodos que devolvem essas propriedades também deve ser diferente. Desse modo, faremos métodos virtuais para este tipo de propriedades com uma implementação comum na classe do objeto gráfico abstratos, e para os objetos herdeiros, sobreporemos esta implementação na classe herdada.
Na seção pública da classe vamos escrever três métodos virtuais que retornam uma descrição do tipo de objeto gráfico e outra do preço e do tempo do primeiro ponto de ancoragem do objeto:
//--- Display the description of the object properties in the journal (full_prop=true - all properties, false - supported ones only - implemented in descendant classes) virtual void Print(const bool full_prop=false,const bool dash=false); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object (1) type (ENUM_OBJECT), price coordinate (2) and (3) time virtual string TypeDescription(void) const { return CMessage::Text(MSG_GRAPH_STD_OBJ_ANY); } virtual string PriceDescription(void) const { return ::DoubleToString(this.GetProperty(GRAPH_OBJ_PROP_PRICE),this.m_digits); } virtual string TimeDescription(void) const { return ::TimeToString(this.GetProperty(GRAPH_OBJ_PROP_TIME),TIME_DATE|TIME_MINUTES); } //--- Compare CGStdGraphObj objects by a specified property (to sort the list by an object property) virtual int Compare(const CObject *node,const int mode=0) const; //--- Compare CGStdGraphObj objects with each other by all properties (to search for equal objects) bool IsEqual(CGStdGraphObj* compared_req) const; //--- Default constructor
Nos objetos herdados, substituiremos esses métodos para exibir informações sobre o objeto gráfico específico descrito pela classe herdeira.
Ao construtor de classe paramétrico protegido adicionamos um novo parâmetro formal - um grupo de um objeto gráfico padrão, e, no construtor padrão, escrevemos imediatamente o valor para o grupo igual a -1:
//--- Default constructor CGStdGraphObj(){ this.m_type=OBJECT_DE_TYPE_GSTD_OBJ; m_group=WRONG_VALUE; } protected: //--- Protected parametric constructor CGStdGraphObj(const ENUM_OBJECT_DE_TYPE obj_type, const ENUM_GRAPH_OBJ_BELONG belong, const ENUM_GRAPH_OBJ_GROUP group, const long chart_id, const string name); public: //+--------------------------------------------------------------------+ //|Methods of simplified access and setting graphical object properties| //+--------------------------------------------------------------------+
No final da lista de métodos para acesso simplificado às propriedades da classe escrevemos os métodos que retornam os sinalizadores de visibilidade do objeto no período gráfico especificado. Cada período gráfico tem seu próprio método. E declaramos um método que retorna uma descrição da visibilidade do objeto em todos os períodos gráficos:
//--- Symbol for the Chart object string Symbol(void) const { return this.GetProperty(GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL); } void SetChartObjSymbol(const string symbol) { if(::ObjectSetString(CGBaseObj::ChartID(),CGBaseObj::Name(),OBJPROP_SYMBOL,symbol)) this.SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL,symbol); } //--- Return the flags indicating object visibility on timeframes bool IsVisibleOnTimeframeM1(void) const { return IsVisibleOnTimeframe(PERIOD_M1, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM2(void) const { return IsVisibleOnTimeframe(PERIOD_M2, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM3(void) const { return IsVisibleOnTimeframe(PERIOD_M3, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM4(void) const { return IsVisibleOnTimeframe(PERIOD_M4, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM5(void) const { return IsVisibleOnTimeframe(PERIOD_M5, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM6(void) const { return IsVisibleOnTimeframe(PERIOD_M6, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM10(void) const { return IsVisibleOnTimeframe(PERIOD_M10,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM12(void) const { return IsVisibleOnTimeframe(PERIOD_M12,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM15(void) const { return IsVisibleOnTimeframe(PERIOD_M15,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM20(void) const { return IsVisibleOnTimeframe(PERIOD_M20,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeM30(void) const { return IsVisibleOnTimeframe(PERIOD_M30,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH1(void) const { return IsVisibleOnTimeframe(PERIOD_H1, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH2(void) const { return IsVisibleOnTimeframe(PERIOD_H2, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH3(void) const { return IsVisibleOnTimeframe(PERIOD_H3, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH4(void) const { return IsVisibleOnTimeframe(PERIOD_H4, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH6(void) const { return IsVisibleOnTimeframe(PERIOD_H6, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH8(void) const { return IsVisibleOnTimeframe(PERIOD_H8, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeH12(void) const { return IsVisibleOnTimeframe(PERIOD_H12,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeD1(void) const { return IsVisibleOnTimeframe(PERIOD_D1, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeW1(void) const { return IsVisibleOnTimeframe(PERIOD_W1, (int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } bool IsVisibleOnTimeframeMN1(void) const { return IsVisibleOnTimeframe(PERIOD_MN1,(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES)); } //--- Return the description of the object visibility on timeframes string VisibleOnTimeframeDescription(void); }; //+------------------------------------------------------------------+
No código de implementação do construtor paramétrico protegido, escrevemos nas propriedades do objeto a definição do valor passado nos parâmetros do grupo ao qual pertence o objeto gráfico:
//+------------------------------------------------------------------+ //| Protected parametric constructor | //+------------------------------------------------------------------+ CGStdGraphObj::CGStdGraphObj(const ENUM_OBJECT_DE_TYPE obj_type, const ENUM_GRAPH_OBJ_BELONG belong, const ENUM_GRAPH_OBJ_GROUP group, const long chart_id,const string name) { //--- Set the object (1) type, type of graphical (2) object, (3) element, (4) subwindow affiliation and (5) index, as well as (6) chart symbol Digits this.m_type=obj_type; CGBaseObj::SetChartID(chart_id); CGBaseObj::SetTypeGraphObject(CGBaseObj::GraphObjectType(obj_type)); CGBaseObj::SetTypeElement(GRAPH_ELEMENT_TYPE_STANDART); CGBaseObj::SetBelong(belong); CGBaseObj::SetGroup(group); CGBaseObj::SetSubwindow(chart_id,name); CGBaseObj::SetDigits((int)::SymbolInfoInteger(::ChartSymbol(chart_id),SYMBOL_DIGITS)); //--- Save integer properties //--- properties inherent in all graphical objects but not present in a graphical object this.m_long_prop[GRAPH_OBJ_PROP_CHART_ID] = CGBaseObj::ChartID(); // Chart ID this.m_long_prop[GRAPH_OBJ_PROP_WND_NUM] = CGBaseObj::SubWindow(); // Chart subwindow index this.m_long_prop[GRAPH_OBJ_PROP_TYPE] = CGBaseObj::TypeGraphObject(); // Graphical object type (ENUM_OBJECT) this.m_long_prop[GRAPH_OBJ_PROP_ELEMENT_TYPE]= CGBaseObj::TypeGraphElement(); // Graphical element type (ENUM_GRAPH_ELEMENT_TYPE) this.m_long_prop[GRAPH_OBJ_PROP_BELONG] = CGBaseObj::Belong(); // Graphical object affiliation this.m_long_prop[GRAPH_OBJ_PROP_GROUP] = CGBaseObj::Group(); // Graphical object group this.m_long_prop[GRAPH_OBJ_PROP_ID] = 0; // Object ID this.m_long_prop[GRAPH_OBJ_PROP_NUM] = 0; // Object index in the list //--- Properties inherent in all graphical objects and present in a graphical object this.m_long_prop[GRAPH_OBJ_PROP_CREATETIME] = ::ObjectGetInteger(chart_id,name,OBJPROP_CREATETIME); // Object creation time this.m_long_prop[GRAPH_OBJ_PROP_TIMEFRAMES] = ::ObjectGetInteger(chart_id,name,OBJPROP_TIMEFRAMES); // Object visibility on timeframes this.m_long_prop[GRAPH_OBJ_PROP_BACK] = ::ObjectGetInteger(chart_id,name,OBJPROP_BACK); // Background object this.m_long_prop[GRAPH_OBJ_PROP_ZORDER] = ::ObjectGetInteger(chart_id,name,OBJPROP_ZORDER); // Priority of a graphical object for receiving the event of clicking on a chart this.m_long_prop[GRAPH_OBJ_PROP_HIDDEN] = ::ObjectGetInteger(chart_id,name,OBJPROP_HIDDEN); // Disable displaying the name of a graphical object in the terminal object list this.m_long_prop[GRAPH_OBJ_PROP_SELECTED] = ::ObjectGetInteger(chart_id,name,OBJPROP_SELECTED); // Object selection this.m_long_prop[GRAPH_OBJ_PROP_SELECTABLE] = ::ObjectGetInteger(chart_id,name,OBJPROP_SELECTABLE); // Object availability this.m_long_prop[GRAPH_OBJ_PROP_TIME] = ::ObjectGetInteger(chart_id,name,OBJPROP_TIME); // First point time coordinate this.m_long_prop[GRAPH_OBJ_PROP_COLOR] = ::ObjectGetInteger(chart_id,name,OBJPROP_COLOR); // Color this.m_long_prop[GRAPH_OBJ_PROP_STYLE] = ::ObjectGetInteger(chart_id,name,OBJPROP_STYLE); // Style this.m_long_prop[GRAPH_OBJ_PROP_WIDTH] = ::ObjectGetInteger(chart_id,name,OBJPROP_WIDTH); // Line width //--- Properties belonging to different graphical objects this.m_long_prop[GRAPH_OBJ_PROP_FILL] = 0; // Object color filling this.m_long_prop[GRAPH_OBJ_PROP_READONLY] = 0; // Ability to edit text in the Edit object this.m_long_prop[GRAPH_OBJ_PROP_LEVELS] = 0; // Number of levels this.m_long_prop[GRAPH_OBJ_PROP_LEVELCOLOR] = 0; // Level line color this.m_long_prop[GRAPH_OBJ_PROP_LEVELSTYLE] = 0; // Level line style this.m_long_prop[GRAPH_OBJ_PROP_LEVELWIDTH] = 0; // Level line width this.m_long_prop[GRAPH_OBJ_PROP_ALIGN] = 0; // Horizontal text alignment in the Edit object (OBJ_EDIT) this.m_long_prop[GRAPH_OBJ_PROP_FONTSIZE] = 0; // Font size this.m_long_prop[GRAPH_OBJ_PROP_RAY_LEFT] = 0; // Ray goes to the left this.m_long_prop[GRAPH_OBJ_PROP_RAY_RIGHT] = 0; // Ray goes to the right this.m_long_prop[GRAPH_OBJ_PROP_RAY] = 0; // Vertical line goes through all windows of a chart this.m_long_prop[GRAPH_OBJ_PROP_ELLIPSE] = 0; // Display the full ellipse of the Fibonacci Arc object this.m_long_prop[GRAPH_OBJ_PROP_ARROWCODE] = 0; // Arrow code for the "Arrow" object this.m_long_prop[GRAPH_OBJ_PROP_ANCHOR] = 0; // Position of the binding point of the graphical object this.m_long_prop[GRAPH_OBJ_PROP_XDISTANCE] = 0; // Distance from the base corner along the X axis in pixels this.m_long_prop[GRAPH_OBJ_PROP_YDISTANCE] = 0; // Distance from the base corner along the Y axis in pixels this.m_long_prop[GRAPH_OBJ_PROP_DIRECTION] = 0; // Gann object trend this.m_long_prop[GRAPH_OBJ_PROP_DEGREE] = 0; // Elliott wave marking level this.m_long_prop[GRAPH_OBJ_PROP_DRAWLINES] = 0; // Display lines for Elliott wave marking this.m_long_prop[GRAPH_OBJ_PROP_STATE] = 0; // Button state (pressed/released) this.m_long_prop[GRAPH_OBJ_PROP_OBJ_CHART_ID] = 0; // Chart object ID (OBJ_CHART). this.m_long_prop[GRAPH_OBJ_PROP_CHART_OBJ_PERIOD] = 0; // Chart object period< this.m_long_prop[GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE] = 0; // Time scale display flag for the Chart object this.m_long_prop[GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE] = 0; // Price scale display flag for the Chart object this.m_long_prop[GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE] = 0; // Chart object scale this.m_long_prop[GRAPH_OBJ_PROP_XSIZE] = 0; // Object width along the X axis in pixels. this.m_long_prop[GRAPH_OBJ_PROP_YSIZE] = 0; // Object height along the Y axis in pixels. this.m_long_prop[GRAPH_OBJ_PROP_XOFFSET] = 0; // X coordinate of the upper-left corner of the visibility area. this.m_long_prop[GRAPH_OBJ_PROP_YOFFSET] = 0; // Y coordinate of the upper-left corner of the visibility area. this.m_long_prop[GRAPH_OBJ_PROP_BGCOLOR] = 0; // Background color for OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL this.m_long_prop[GRAPH_OBJ_PROP_CORNER] = 0; // Chart corner for binding a graphical object this.m_long_prop[GRAPH_OBJ_PROP_BORDER_TYPE] = 0; // Border type for "Rectangle border" this.m_long_prop[GRAPH_OBJ_PROP_BORDER_COLOR] = 0; // Border color for OBJ_EDIT and OBJ_BUTTON //--- Save real properties this.m_double_prop[this.IndexProp(GRAPH_OBJ_PROP_PRICE)] = ::ObjectGetDouble(chart_id,name,OBJPROP_PRICE); // Price coordinate this.m_double_prop[this.IndexProp(GRAPH_OBJ_PROP_LEVELVALUE)] = 0; // Level value this.m_double_prop[this.IndexProp(GRAPH_OBJ_PROP_SCALE)] = 0; // Scale (property of Gann objects and Fibonacci Arcs objects) this.m_double_prop[this.IndexProp(GRAPH_OBJ_PROP_ANGLE)] = 0; // Angle this.m_double_prop[this.IndexProp(GRAPH_OBJ_PROP_DEVIATION)] = 0; // Deviation of the standard deviation channel //--- Save string properties this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_NAME)] = name; // Object name this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_TEXT)] = ::ObjectGetString(chart_id,name,OBJPROP_TEXT); // Object description (the text contained in the object) this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_TOOLTIP)] = ::ObjectGetString(chart_id,name,OBJPROP_TOOLTIP);// Tooltip text this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_LEVELTEXT)] = ""; // Level description this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_FONT)] = ""; // Font this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_BMPFILE)] = ""; // BMP file name for the "Bitmap Level" object this.m_string_prop[this.IndexProp(GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL)]= ""; // Chart object symbol //--- Save basic properties in the parent object this.m_create_time=(datetime)this.GetProperty(GRAPH_OBJ_PROP_CREATETIME); this.m_back=(bool)this.GetProperty(GRAPH_OBJ_PROP_BACK); this.m_selected=(bool)this.GetProperty(GRAPH_OBJ_PROP_SELECTED); this.m_selectable=(bool)this.GetProperty(GRAPH_OBJ_PROP_SELECTABLE); this.m_hidden=(bool)this.GetProperty(GRAPH_OBJ_PROP_HIDDEN); this.m_name=this.GetProperty(GRAPH_OBJ_PROP_NAME); } //+-------------------------------------------------------------------+
No método que exibe no log uma descrição breve do objeto, primeiro imprimimos que se trata de um objeto gráfico padrão:
//+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdGraphObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( CMessage::Text(MSG_GRAPH_ELEMENT_TYPE_STANDART),": ", " \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Ao método que retorna uma descrição da propriedade inteira do objeto, adicionamos a exibição da descrição do grupo ao qual o objeto pertence, e vamos substituir a exibição de algumas propriedades chamando os métodos criados para isso:
//+------------------------------------------------------------------+ //| Return description of object's integer property | //+------------------------------------------------------------------+ string CGStdGraphObj::GetPropertyDescription(ENUM_GRAPH_OBJ_PROP_INTEGER property) { return ( property==GRAPH_OBJ_PROP_ID ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ID)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_TYPE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_TYPE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.TypeDescription() ) : property==GRAPH_OBJ_PROP_ELEMENT_TYPE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ELEMENT_TYPE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+CGBaseObj::TypeElementDescription() ) : property==GRAPH_OBJ_PROP_GROUP ? CMessage::Text(MSG_GRAPH_OBJ_PROP_GROUP)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+CGBaseObj::GroupDescription() ) : property==GRAPH_OBJ_PROP_BELONG ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BELONG)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+CGBaseObj::BelongDescription() ) : property==GRAPH_OBJ_PROP_CHART_ID ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CHART_ID)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_WND_NUM ? CMessage::Text(MSG_GRAPH_OBJ_PROP_WND_NUM)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_CREATETIME ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CREATETIME)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::TimeToString(this.GetProperty(property),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ) : property==GRAPH_OBJ_PROP_TIMEFRAMES ? CMessage::Text(MSG_GRAPH_OBJ_PROP_TIMEFRAMES)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.VisibleOnTimeframeDescription() ) : property==GRAPH_OBJ_PROP_BACK ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BACK)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.IsBack() ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_ZORDER ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ZORDER)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_HIDDEN ? CMessage::Text(MSG_GRAPH_OBJ_PROP_HIDDEN)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.IsHidden() ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_SELECTED ? CMessage::Text(MSG_GRAPH_OBJ_PROP_SELECTED)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.IsSelected() ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_SELECTABLE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_SELECTABLE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.IsSelectable() ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_NUM ? CMessage::Text(MSG_GRAPH_OBJ_PROP_NUM)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_TIME ? CMessage::Text(MSG_GRAPH_OBJ_PROP_TIME)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.TimeDescription() ) : property==GRAPH_OBJ_PROP_COLOR ? CMessage::Text(MSG_GRAPH_OBJ_PROP_COLOR)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::ColorToString((color)this.GetProperty(property),true) ) : property==GRAPH_OBJ_PROP_STYLE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_STYLE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+LineStyleDescription((ENUM_LINE_STYLE)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_WIDTH ? CMessage::Text(MSG_GRAPH_OBJ_PROP_WIDTH)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_FILL ? CMessage::Text(MSG_GRAPH_OBJ_PROP_FILL)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_READONLY ? CMessage::Text(MSG_GRAPH_OBJ_PROP_READONLY)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_LEVELS ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELS)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_LEVELCOLOR ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELCOLOR)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::ColorToString((color)this.GetProperty(property),true) ) : property==GRAPH_OBJ_PROP_LEVELSTYLE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELSTYLE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+LineStyleDescription((ENUM_LINE_STYLE)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_LEVELWIDTH ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELWIDTH)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_ALIGN ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ALIGN)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+AlignModeDescription((ENUM_ALIGN_MODE)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_FONTSIZE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_FONTSIZE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_RAY_LEFT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_RAY_LEFT)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_RAY_RIGHT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_RAY_RIGHT)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_RAY ? CMessage::Text(MSG_GRAPH_OBJ_PROP_RAY)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_ELLIPSE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ELLIPSE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_ARROWCODE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ARROWCODE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_ANCHOR ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ANCHOR)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.AnchorDescription() ) : property==GRAPH_OBJ_PROP_XDISTANCE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_XDISTANCE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_YDISTANCE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_YDISTANCE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_DIRECTION ? CMessage::Text(MSG_GRAPH_OBJ_PROP_DIRECTION)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+GannDirectDescription((ENUM_GANN_DIRECTION)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_DEGREE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_DEGREE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+ElliotWaveDegreeDescription((ENUM_ELLIOT_WAVE_DEGREE)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_DRAWLINES ? CMessage::Text(MSG_GRAPH_OBJ_PROP_DRAWLINES)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_STATE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_STATE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_BUTTON_STATE_PRESSED) : CMessage::Text(MSG_LIB_TEXT_BUTTON_STATE_DEPRESSED)) ) : property==GRAPH_OBJ_PROP_OBJ_CHART_ID ? CMessage::Text(MSG_CHART_OBJ_ID)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_CHART_OBJ_PERIOD ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CHART_OBJ_PERIOD)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+TimeframeDescription((ENUM_TIMEFRAMES)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property) ? CMessage::Text(MSG_LIB_TEXT_YES) : CMessage::Text(MSG_LIB_TEXT_NO)) ) : property==GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_XSIZE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_XSIZE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_YSIZE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_YSIZE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_XOFFSET ? CMessage::Text(MSG_GRAPH_OBJ_PROP_XOFFSET)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_YOFFSET ? CMessage::Text(MSG_GRAPH_OBJ_PROP_YOFFSET)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(string)this.GetProperty(property) ) : property==GRAPH_OBJ_PROP_BGCOLOR ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BGCOLOR)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::ColorToString((color)this.GetProperty(property),true) ) : property==GRAPH_OBJ_PROP_CORNER ? CMessage::Text(MSG_GRAPH_OBJ_PROP_CORNER)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+BaseCornerDescription((ENUM_BASE_CORNER)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_BORDER_TYPE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BORDER_TYPE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+BorderTypeDescription((ENUM_BORDER_TYPE)this.GetProperty(property)) ) : property==GRAPH_OBJ_PROP_BORDER_COLOR ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BORDER_COLOR)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::ColorToString((color)this.GetProperty(property),true) ) : "" ); } //+------------------------------------------------------------------+
No método que retorna uma descrição da propriedade real do objeto, também substituímos a exibição da descrição do preço do ponto de ancoragem por uma chamada de método:
//+------------------------------------------------------------------+ //| Return description of object's real property | //+------------------------------------------------------------------+ string CGStdGraphObj::GetPropertyDescription(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { int dg=(this.m_digits>0 ? this.m_digits : 1); return ( property==GRAPH_OBJ_PROP_PRICE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_PRICE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.PriceDescription() ) : property==GRAPH_OBJ_PROP_LEVELVALUE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELVALUE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::DoubleToString(this.GetProperty(property),dg) ) : property==GRAPH_OBJ_PROP_SCALE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_SCALE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::DoubleToString(this.GetProperty(property),2) ) : property==GRAPH_OBJ_PROP_ANGLE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_ANGLE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::DoubleToString(this.GetProperty(property),2) ) : property==GRAPH_OBJ_PROP_DEVIATION ? CMessage::Text(MSG_GRAPH_OBJ_PROP_DEVIATION)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+::DoubleToString(this.GetProperty(property),2) ) : "" ); } //+------------------------------------------------------------------+
Ao método, que retorna uma descrição indicando que o objeto possui uma propriedade de string, adicionamos umas aspas que delimitarão as propriedades de string exibidas, e para a descrição de dica de balão exibimos uma mensagem de que é gerada automaticamente pelo terminal caso não seja especificada e não seja o caractere de controle "\n" que a desativa:
//+------------------------------------------------------------------+ //| Return description of object's string property | //+------------------------------------------------------------------+ string CGStdGraphObj::GetPropertyDescription(ENUM_GRAPH_OBJ_PROP_STRING property) { return ( property==GRAPH_OBJ_PROP_NAME ? CMessage::Text(MSG_GRAPH_OBJ_PROP_NAME)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+"\""+this.GetProperty(property)+"\"" ) : property==GRAPH_OBJ_PROP_TEXT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_TEXT)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property)=="" ? CMessage::Text(MSG_LIB_PROP_EMPTY) : "\""+this.GetProperty(property)+"\"") ) : property==GRAPH_OBJ_PROP_TOOLTIP ? CMessage::Text(MSG_GRAPH_OBJ_PROP_TOOLTIP)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+(this.GetProperty(property)=="" ? CMessage::Text(MSG_LIB_PROP_AUTO) : this.GetProperty(property)=="\n" ? CMessage::Text(MSG_LIB_PROP_EMPTY) : "\""+this.GetProperty(property)+"\"") ) : property==GRAPH_OBJ_PROP_LEVELTEXT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_LEVELTEXT)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+"\""+this.GetProperty(property)+"\"" ) : property==GRAPH_OBJ_PROP_FONT ? CMessage::Text(MSG_GRAPH_OBJ_PROP_FONT)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+"\""+this.GetProperty(property)+"\"" ) : property==GRAPH_OBJ_PROP_BMPFILE ? CMessage::Text(MSG_GRAPH_OBJ_PROP_BMPFILE)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+"\""+this.GetProperty(property)+"\"" ) : property==GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL ? CMessage::Text(MSG_GRAPH_OBJ_PROP_SYMBOL)+ (!this.SupportProperty(property) ? ": "+CMessage::Text(MSG_LIB_PROP_NOT_SUPPORTED) : ": "+this.GetProperty(property) ) : "" ); } //+------------------------------------------------------------------+
Método que retorna uma descrição indicando a visibilidade do objeto no período gráfico:
//+------------------------------------------------------------------+ //| Return the description of the object visibility on timeframes | //+------------------------------------------------------------------+ string CGStdGraphObj::VisibleOnTimeframeDescription(void) { string res=""; int flags=(int)this.GetProperty(GRAPH_OBJ_PROP_TIMEFRAMES); if(flags==OBJ_NO_PERIODS) return CMessage::Text(MSG_LIB_TEXT_OBJ_NO_PERIODS); if(flags==OBJ_ALL_PERIODS) return CMessage::Text(MSG_LIB_TEXT_OBJ_ALL_PERIODS); for(int i=1;i<=21;i++) { ENUM_TIMEFRAMES timeframe=TimeframeByEnumIndex((uchar)i); if(!IsVisibleOnTimeframe(timeframe,flags)) continue; res+=TimeframeDescription(timeframe)+", "; } ::StringSetCharacter(res,::StringLen(res)-2,' '); ::StringTrimRight(res); return res; } //+------------------------------------------------------------------+
Aqui, da propriedade do objeto obtemos sinalizadores de bits que indicam a visibilidade do objeto no período gráfico.
Se nenhum dos sinalizadores estiver definido, retornamos uma mensagem de que o objeto é invisível em todos os período gráficos.
Por outra parte, se todos os sinalizadores de todos os períodos gráficos estiverem definidos, retornamos uma mensagem de que o objeto é visível em todos eles.
Se apenas parte dos sinalizadores for definida, no ciclo de 1 a 21 obtemos o período gráfico por índice usando a função de serviço TimeframeByEnumIndex(), que escrevemos há muito tempo e que é armazenada no arquivo de funções de serviço.
Se o objeto estiver invisível no período gráfico recebido, vamos para a próxima iteração para obter o próximo período.
Se o objeto for visível, adicionamos sua descrição breve ao valor da variável res com vírgula e espaço no final.
Depois do ciclo substituímos no final da string resultante o caractere de vírgula adicionado na última iteração do loop por um espaço e removemos todos os espaços e caracteres de controle à direita da string. Retornamos a string resultante desde o método.
Todas as modificações de classe estão concluídas, vamos começar a criar classes herdeiras da classe do objeto gráfico abstrato.
Classes herdeiras do objeto gráfico abstrato
Hoje vamos criar classes de vários grupos de objetos gráficos: "Linhas", "Canais", "Gann", "Fibonacci" e "Elliott".
Na pasta \MQL5\Include\DoEasy\Objects\Graph\Standart\ criamos o novo arquivo GStdHLineObj.mqh da classe de linha horizontal StdHLineObj.
A classe deve ser herdada de um objeto gráfico abstrato, e o arquivo da classe pai deve estar integrado na classe gerada:
//+------------------------------------------------------------------+ //| GStdHLineObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Horizontal line" graphical object | //+------------------------------------------------------------------+ class CGStdHLineObj : public CGStdGraphObj { }
Na seção pública da classe, adicionamos um construtor, declaramos três métodos que retornam sinalizadores de propriedades suportadas pelo objeto e métodos para exibir descrições do objeto e suas propriedades:
//+------------------------------------------------------------------+ //| "Horizontal line" graphical object | //+------------------------------------------------------------------+ class CGStdHLineObj : public CGStdGraphObj { private: public: //--- Constructor CGStdHLineObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_HLINE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) {} //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_HLINE); } virtual string TimeDescription(void) const { return ::TimeToString(this.GetProperty(GRAPH_OBJ_PROP_TIME),TIME_DATE|TIME_MINUTES)+" "+ CMessage::Text(MSG_GRAPH_OBJ_TEXT_CLICK_COORD); } }; //+------------------------------------------------------------------+
O nomes dos métodos já deveria deixar esclarecido para que são usados, e já vimos métodos semelhantes muitas vezes em outras classes.
Na lista de inicialização do construtor da classe, ao construtor paramétrico privado da classe pai passamos o tipo de objeto linha horizontal, a pertença como não pertencendo ao programa, o grupo de objetos linhas e os valores do identificador do gráfico e o nome do objeto passado ao construtor da classe:
CGStdHLineObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_HLINE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) {}
O método virtual TypeDescription() devolve uma descrição do tipo de objeto gráfico, retornado pela função de serviço StdGraphObjectTypeDescription() que escrevemos anteriormente e à qual passamos o tipo de objeto linha horizontal:
virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_HLINE); }
O método virtual TimeDescription(), que retorna a descrição de tempo, exibe a hora registrada nas propriedades da linha horizontal. Mas como a linha horizontal não tem referência de tempo, nesta propriedade é inserida a coordenada do cursor do mouse ao clicar no gráfico durante o posicionamento do objeto . Uma mensagem adicional sobre isso é exibida na descrição de tempo apresentada no log:
virtual string TimeDescription(void) const { return ::TimeToString(this.GetProperty(GRAPH_OBJ_PROP_TIME),TIME_DATE|TIME_MINUTES)+" "+ CMessage::Text(MSG_GRAPH_OBJ_TEXT_CLICK_COORD); }
Métodos que retornam os sinalizadores que indicam se o objeto suporta inteiras, reais e de string:
//+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdHLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdHLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdHLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+
A cada método é passada uma propriedade e, depois, se a propriedade estiver na lista de propriedades suportadas, retornamos true; caso contrário, false.
Para cada classe, as listas de propriedades suportadas serão diferentes. Afinal, cada um dos objetos gráficos tem seu próprio conjunto de propriedades. Da mesma forma, os construtores de classes também serão únicos para cada um dos objetos herdeiros do objeto gráfico abstrato.
Método que retorna o nome curto do objeto e exibe no log uma breve descrição do objeto:
//+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdHLineObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdHLineObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Esses métodos (1) retornam uma string que descreve o tipo do objeto gráfico e (2) registram o tipo, o nome, o identificador atribuído ao objeto quando criado e a hora de criação do objeto.
Todas as outras classes que descrevem diferentes tipos de objetos gráficos pertencentes a diferentes grupos deverão ser consideradas em sua totalidade por conta própria.
Classe do objeto "Linha vertical" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdVLineObj.mqh:
//+------------------------------------------------------------------+ //| GStdVLineObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Vertical line" graphical object | //+------------------------------------------------------------------+ class CGStdVLineObj : public CGStdGraphObj { private: public: //--- Constructor CGStdVLineObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_VLINE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY,::ObjectGetInteger(chart_id,name,OBJPROP_RAY)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_VLINE); } virtual string PriceDescription(void) const { return ::DoubleToString(this.GetProperty(GRAPH_OBJ_PROP_PRICE),this.m_digits)+" "+ CMessage::Text(MSG_GRAPH_OBJ_TEXT_CLICK_COORD); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdVLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdVLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdVLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdVLineObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdVLineObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Linha de tendência" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdTrendObj.mqh:
//+------------------------------------------------------------------+ //| GStdTrendObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Trend line" graphical object | //+------------------------------------------------------------------+ class CGStdTrendObj : public CGStdGraphObj { private: public: //--- Constructor CGStdTrendObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_TREND,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_TREND); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdTrendObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdTrendObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Linha de tendência por ângulo" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdTrendByAngleObj.mqh:
//+------------------------------------------------------------------+ //| GStdTrendByAngleObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Trend line by angle" graphical object | //+------------------------------------------------------------------+ class CGStdTrendByAngleObj : public CGStdGraphObj { private: public: //--- Constructor CGStdTrendByAngleObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_TRENDBYANGLE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANGLE,::ObjectGetDouble(chart_id,name,OBJPROP_ANGLE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_TRENDBYANGLE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendByAngleObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendByAngleObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ANGLE : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTrendByAngleObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdTrendByAngleObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdTrendByAngleObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Linhas de ciclo" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdCyclesObj.mqh:
//+------------------------------------------------------------------+ //| GStdCyclesObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Cyclic lines" graphical object | //+------------------------------------------------------------------+ class CGStdCyclesObj : public CGStdGraphObj { private: public: //--- Constructor CGStdCyclesObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_CYCLES,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) { } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_CYCLES); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdCyclesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdCyclesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdCyclesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdCyclesObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdCyclesObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Linha com seta" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdArrowedLineObj.mqh:
//+------------------------------------------------------------------+ //| GStdArrowedLineObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Arrowed line" graphical object | //+------------------------------------------------------------------+ class CGStdArrowedLineObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowedLineObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROWED_LINE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_LINES,chart_id,name) { } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROWED_LINE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowedLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowedLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowedLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdArrowedLineObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowedLineObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Canal equidistante" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdChannelObj.mqh:
//+------------------------------------------------------------------+ //| GStdChannelObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Equidistant channel" graphical object | //+------------------------------------------------------------------+ class CGStdChannelObj : public CGStdGraphObj { private: public: //--- Constructor CGStdChannelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_CHANNEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_CHANNELS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FILL,::ObjectGetInteger(chart_id,name,OBJPROP_FILL)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_CHANNEL); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_FILL : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdChannelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdChannelObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Canal desvio padrão" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdStdDevChannelObj.mqh:
//+------------------------------------------------------------------+ //| GStdStdDevChannelObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Standard deviation channel" graphical object | //+------------------------------------------------------------------+ class CGStdStdDevChannelObj : public CGStdGraphObj { private: public: //--- Constructor CGStdStdDevChannelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_STDDEVCHANNEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_CHANNELS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FILL,::ObjectGetInteger(chart_id,name,OBJPROP_FILL)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_DEVIATION,::ObjectGetDouble(chart_id,name,OBJPROP_DEVIATION)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_STDDEVCHANNEL); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdStdDevChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_FILL : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdStdDevChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_DEVIATION : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdStdDevChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdStdDevChannelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdStdDevChannelObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Canal de regressão linear" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdRegressionObj.mqh:
//+------------------------------------------------------------------+ //| GStdRegressionObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Linear regression channel" graphical object | //+------------------------------------------------------------------+ class CGStdRegressionObj : public CGStdGraphObj { private: public: //--- Constructor CGStdRegressionObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_REGRESSION,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_CHANNELS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FILL,::ObjectGetInteger(chart_id,name,OBJPROP_FILL)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_REGRESSION); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdRegressionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_FILL : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdRegressionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdRegressionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdRegressionObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdRegressionObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Abdrews Pitchfork" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdPitchforkObj.mqh:
//+------------------------------------------------------------------+ //| GStdPitchforkObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Andrews' Pitchfork" graphical object | //+------------------------------------------------------------------+ class CGStdPitchforkObj : public CGStdGraphObj { private: public: //--- Constructor CGStdPitchforkObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_PITCHFORK,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_CHANNELS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_PITCHFORK); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdPitchforkObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdPitchforkObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdPitchforkObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdPitchforkObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdPitchforkObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Linha gann" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdGannLineObj.mqh:
//+------------------------------------------------------------------+ //| GStdGannLineObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Gann line" graphical object | //+------------------------------------------------------------------+ class CGStdGannLineObj : public CGStdGraphObj { private: public: //--- Constructor CGStdGannLineObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_GANNLINE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GANN,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_SCALE,::ObjectGetDouble(chart_id,name,OBJPROP_SCALE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANGLE,::ObjectGetDouble(chart_id,name,OBJPROP_ANGLE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_GANNLINE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ANGLE : case GRAPH_OBJ_PROP_SCALE : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannLineObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdGannLineObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdGannLineObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Leque de gann" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdGannFanObj.mqh:
//+------------------------------------------------------------------+ //| GStdGannFanObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Gann fan" graphical object | //+------------------------------------------------------------------+ class CGStdGannFanObj : public CGStdGraphObj { private: public: //--- Constructor CGStdGannFanObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_GANNFAN,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GANN,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_DIRECTION)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_SCALE,::ObjectGetDouble(chart_id,name,OBJPROP_SCALE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_GANNFAN); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_DIRECTION : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_SCALE : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdGannFanObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdGannFanObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Grade de gann" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdGannGridObj.mqh:
//+------------------------------------------------------------------+ //| GStdGannGridObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Gann grid" graphical object | //+------------------------------------------------------------------+ class CGStdGannGridObj : public CGStdGraphObj { private: public: //--- Constructor CGStdGannGridObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_GANNGRID,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GANN,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_DIRECTION)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_SCALE,::ObjectGetDouble(chart_id,name,OBJPROP_SCALE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_GANNGRID); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannGridObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_DIRECTION : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannGridObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_SCALE : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdGannGridObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdGannGridObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdGannGridObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Níveis de Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdFiboObj.mqh:
//+------------------------------------------------------------------+ //| GStdFiboObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo levels" graphical object | //+------------------------------------------------------------------+ class CGStdFiboObj : public CGStdGraphObj { private: public: //--- Constructor CGStdFiboObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_FIBO,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_FIBO); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdFiboObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdFiboObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Zonas de tempo Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdFiboTimesObj.mqh:
//+------------------------------------------------------------------+ //| GStdFiboTimesObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo Time Zones" graphical object | //+------------------------------------------------------------------+ class CGStdFiboTimesObj : public CGStdGraphObj { private: public: //--- Constructor CGStdFiboTimesObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_FIBOTIMES,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_FIBOTIMES); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboTimesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboTimesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboTimesObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdFiboTimesObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdFiboTimesObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Leque de Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdFiboFanObj.mqh:
//+------------------------------------------------------------------+ //| GStdFiboFanObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo fan" graphical object | //+------------------------------------------------------------------+ class CGStdFiboFanObj : public CGStdGraphObj { private: public: //--- Constructor CGStdFiboFanObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_FIBOFAN,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_FIBOFAN); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboFanObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdFiboFanObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdFiboFanObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Arcos de Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdFiboArcObj.mqh:
//+------------------------------------------------------------------+ //| GStdFiboArcObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo arcs" graphical object | //+------------------------------------------------------------------+ class CGStdFiboArcObj : public CGStdGraphObj { private: public: //--- Constructor CGStdFiboArcObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_FIBOARC,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ELLIPSE,::ObjectGetInteger(chart_id,name,OBJPROP_ELLIPSE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_SCALE,::ObjectGetDouble(chart_id,name,OBJPROP_SCALE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_FIBOARC); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboArcObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : case GRAPH_OBJ_PROP_ELLIPSE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboArcObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_SCALE : case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboArcObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdFiboArcObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdFiboArcObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Canal de Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdFiboChannelObj.mqh:
//+------------------------------------------------------------------+ //| GStdFiboChannelObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo channel" graphical object | //+------------------------------------------------------------------+ class CGStdFiboChannelObj : public CGStdGraphObj { private: public: //--- Constructor CGStdFiboChannelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_FIBOCHANNEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_FIBOCHANNEL); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdFiboChannelObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdFiboChannelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdFiboChannelObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "Extensão de Fibonacci" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdExpansionObj.mqh:
//+------------------------------------------------------------------+ //| GStdExpansionObj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Fibo extension" graphical object | //+------------------------------------------------------------------+ class CGStdExpansionObj : public CGStdGraphObj { private: public: //--- Constructor CGStdExpansionObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_EXPANSION,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_FIBO,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_LEFT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_LEFT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_RAY_RIGHT,::ObjectGetInteger(chart_id,name,OBJPROP_RAY_RIGHT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELS,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELS)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELSTYLE,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELSTYLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELWIDTH,::ObjectGetInteger(chart_id,name,OBJPROP_LEVELWIDTH)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_LEVELTEXT,::ObjectGetString(chart_id,name,OBJPROP_LEVELTEXT)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_EXPANSION); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdExpansionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_LEVELS : case GRAPH_OBJ_PROP_LEVELCOLOR : case GRAPH_OBJ_PROP_LEVELSTYLE : case GRAPH_OBJ_PROP_LEVELWIDTH : case GRAPH_OBJ_PROP_RAY_LEFT : case GRAPH_OBJ_PROP_RAY_RIGHT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdExpansionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdExpansionObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : case GRAPH_OBJ_PROP_LEVELTEXT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdExpansionObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdExpansionObj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "5 ondas de Elliot" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdElliotWave5Obj.mqh:
//+------------------------------------------------------------------+ //| GStdElliotWave5Obj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Elliott 5 waves" graphical object | //+------------------------------------------------------------------+ class CGStdElliotWave5Obj : public CGStdGraphObj { private: public: //--- Constructor CGStdElliotWave5Obj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ELLIOTWAVE5,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ELLIOTT,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_DRAWLINES,::ObjectGetInteger(chart_id,name,OBJPROP_DRAWLINES)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_DEGREE,::ObjectGetInteger(chart_id,name,OBJPROP_DEGREE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ELLIOTWAVE5); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave5Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_DRAWLINES : case GRAPH_OBJ_PROP_DEGREE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave5Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave5Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdElliotWave5Obj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdElliotWave5Obj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Classe do objeto "3 ondas de Elliot" no arquivo \MQL5\Include\DoEasy\Objects\Graph\Standart\GStdElliotWave3Obj.mqh:
//+------------------------------------------------------------------+ //| GStdElliotWave3Obj.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "GStdGraphObj.mqh" //+------------------------------------------------------------------+ //| "Elliott 3 waves" graphical object | //+------------------------------------------------------------------+ class CGStdElliotWave3Obj : public CGStdGraphObj { private: public: //--- Constructor CGStdElliotWave3Obj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ELLIOTWAVE3,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ELLIOTT,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_DRAWLINES,::ObjectGetInteger(chart_id,name,OBJPROP_DRAWLINES)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_DEGREE,::ObjectGetInteger(chart_id,name,OBJPROP_DEGREE)); } //--- Supported object properties (1) real, (2) integer virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property); virtual bool SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property); //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false); //--- Return the object short name virtual string Header(const bool symbol=false); //--- Return the description of the graphical object price (1) type (ENUM_OBJECT) and (2) price coordinate virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ELLIOTWAVE3); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave3Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_INTEGER property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_ID : case GRAPH_OBJ_PROP_TYPE : case GRAPH_OBJ_PROP_ELEMENT_TYPE : case GRAPH_OBJ_PROP_GROUP : case GRAPH_OBJ_PROP_BELONG : case GRAPH_OBJ_PROP_CHART_ID : case GRAPH_OBJ_PROP_WND_NUM : case GRAPH_OBJ_PROP_NUM : case GRAPH_OBJ_PROP_CREATETIME : case GRAPH_OBJ_PROP_TIMEFRAMES : case GRAPH_OBJ_PROP_BACK : case GRAPH_OBJ_PROP_ZORDER : case GRAPH_OBJ_PROP_HIDDEN : case GRAPH_OBJ_PROP_SELECTED : case GRAPH_OBJ_PROP_SELECTABLE : case GRAPH_OBJ_PROP_TIME : case GRAPH_OBJ_PROP_COLOR : case GRAPH_OBJ_PROP_STYLE : case GRAPH_OBJ_PROP_WIDTH : case GRAPH_OBJ_PROP_DRAWLINES : case GRAPH_OBJ_PROP_DEGREE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| real property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave3Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_DOUBLE property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_PRICE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| string property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdElliotWave3Obj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_NAME : case GRAPH_OBJ_PROP_TEXT : case GRAPH_OBJ_PROP_TOOLTIP : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdElliotWave3Obj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdElliotWave3Obj::PrintShort(const bool dash=false,const bool symbol=false) { ::Print ( this.Header(symbol)," \"",CGBaseObj::Name(),"\": ID ",(string)this.GetProperty(GRAPH_OBJ_PROP_ID), " ",::TimeToString(CGBaseObj::TimeCreate(),TIME_DATE|TIME_MINUTES|TIME_SECONDS) ); } //+------------------------------------------------------------------+
Estes são todos os objetos de classes herdeiras do objeto gráfico abstrato previstos para hoje. Como podemos ver, são idênticos, mas diferem nos tipos de propriedades suportadas. Desse modo, todos estes objetos terão apenas as propriedades inerentes a cada um deles. Aqui a vantagem não está apenas na exibição desses dados no log, mas precisamente no fato de que a busca e classificação de objetos na biblioteca leva em conta os sinalizadores que indicam que o objeto tem determinada propriedade. Por isso, ao classificar todos os objetos gráficos na coleção, por exemplo, por ângulo, os objetos que não possuem nenhum ângulo não poderão entrar na lista final, já que não suportam tal propriedade.
Vamos deixar todas as classes acima para realizarmos uma análise independente.
Agora precisamos modificar a classe para gerenciar objetos gráficos localizados no arquivo da classe-coleção de objetos gráficos no caminho \MQL5\Include\DoEasy\Collections\GraphElementsCollection.mqh.
Precisamos ter certeza de que, dependendo do objeto gráfico adicionado ao gráfico, uma nova instância da classe de objeto gráfico padrão seja criada a partir daquelas que criamos hoje. Vamos fazer as modificações necessárias no arquivo.
Hoje incluiremos os arquivos - de todas as classes criadas hoje - no arquivo da classe-coleção de objetos gráficos (em vez do arquivo GStdGraphObj.mqh incluído anteriormente) e declaramos um método público para criar um novo objeto que descreve o objeto gráfico adicionado ao gráfico:
//+------------------------------------------------------------------+ //| GraphElementsCollection.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include "ListObj.mqh" #include "..\Services\Select.mqh" #include "..\Objects\Graph\Form.mqh" #include "..\Objects\Graph\Standart\GStdVLineObj.mqh" #include "..\Objects\Graph\Standart\GStdHLineObj.mqh" #include "..\Objects\Graph\Standart\GStdTrendObj.mqh" #include "..\Objects\Graph\Standart\GStdTrendByAngleObj.mqh" #include "..\Objects\Graph\Standart\GStdCiclesObj.mqh" #include "..\Objects\Graph\Standart\GStdArrowedLineObj.mqh" #include "..\Objects\Graph\Standart\GStdChannelObj.mqh" #include "..\Objects\Graph\Standart\GStdStdDevChannelObj.mqh" #include "..\Objects\Graph\Standart\GStdRegressionObj.mqh" #include "..\Objects\Graph\Standart\GStdPitchforkObj.mqh" #include "..\Objects\Graph\Standart\GStdGannLineObj.mqh" #include "..\Objects\Graph\Standart\GStdGannFanObj.mqh" #include "..\Objects\Graph\Standart\GStdGannGridObj.mqh" #include "..\Objects\Graph\Standart\GStdFiboObj.mqh" #include "..\Objects\Graph\Standart\GStdFiboTimesObj.mqh" #include "..\Objects\Graph\Standart\GStdFiboFanObj.mqh" #include "..\Objects\Graph\Standart\GStdFiboArcObj.mqh" #include "..\Objects\Graph\Standart\GStdFiboChannelObj.mqh" #include "..\Objects\Graph\Standart\GStdExpansionObj.mqh" #include "..\Objects\Graph\Standart\GStdElliotWave5Obj.mqh" #include "..\Objects\Graph\Standart\GStdElliotWave3Obj.mqh" //+------------------------------------------------------------------+ //| Chart object management class | //+------------------------------------------------------------------+ class CChartObjectsControl : public CObject { private: ENUM_TIMEFRAMES m_chart_timeframe; // Chart timeframe long m_chart_id; // Chart ID string m_chart_symbol; // Chart symbol bool m_is_graph_obj_event; // Event flag in the list of graphical objects int m_total_objects; // Number of graphical objects int m_last_objects; // Number of graphical objects during the previous check int m_delta_graph_obj; // Difference in the number of graphical objects compared to the previous check public: //--- Return the variable values ENUM_TIMEFRAMES Timeframe(void) const { return this.m_chart_timeframe; } long ChartID(void) const { return this.m_chart_id; } string Symbol(void) const { return this.m_chart_symbol; } bool IsEvent(void) const { return this.m_is_graph_obj_event; } int TotalObjects(void) const { return this.m_total_objects; } int Delta(void) const { return this.m_delta_graph_obj; } //--- Create a new standard graphical object CGStdGraphObj *CreateNewGraphObj(const ENUM_OBJECT obj_type,const long chart_id, const string name); //--- Check the chart objects void Refresh(void); //--- Constructors CChartObjectsControl(void) { this.m_chart_id=::ChartID(); this.m_chart_timeframe=(ENUM_TIMEFRAMES)::ChartPeriod(this.m_chart_id); this.m_chart_symbol=::ChartSymbol(this.m_chart_id); this.m_is_graph_obj_event=false; this.m_total_objects=0; this.m_last_objects=0; this.m_delta_graph_obj=0; } CChartObjectsControl(const long chart_id) { this.m_chart_id=chart_id; this.m_chart_timeframe=(ENUM_TIMEFRAMES)::ChartPeriod(this.m_chart_id); this.m_chart_symbol=::ChartSymbol(this.m_chart_id); this.m_is_graph_obj_event=false; this.m_total_objects=0; this.m_last_objects=0; this.m_delta_graph_obj=0; } //--- Compare CChartObjectsControl objects by a chart ID (for sorting the list by an object property) virtual int Compare(const CObject *node,const int mode=0) const { const CChartObjectsControl *obj_compared=node; return(this.ChartID()>obj_compared.ChartID() ? 1 : this.ChartID()<obj_compared.ChartID() ? -1 : 0); } }; //+------------------------------------------------------------------+
No método que verifica a mudança no número de objetos no gráfico, da classe de gerenciamento de objetos gráficos, vamos fazer alguns pequenos ajustes no bloco de código para criar um novo objeto que descreve o objeto gráfico adicionado ao gráfico:
//+------------------------------------------------------------------+ //| CChartObjectsControl Check objects on a chart | //+------------------------------------------------------------------+ void CChartObjectsControl::Refresh(void) { //--- Graphical objects on the chart this.m_total_objects=::ObjectsTotal(this.ChartID()); this.m_delta_graph_obj=this.m_total_objects-this.m_last_objects; //--- If the number of objects has changed if(this.m_delta_graph_obj!=0) { //--- Create the string and display it in the journal with the chart ID, its symbol and timeframe string txt=", "+(m_delta_graph_obj>0 ? "Added: " : "Deleted: ")+(string)fabs(m_delta_graph_obj)+" obj"; Print(DFUN,"ChartID=",this.ChartID(),", ",this.Symbol(),", ",TimeframeDescription(this.Timeframe()),txt); } //--- If an object is added to the chart if(this.m_delta_graph_obj>0) { int index=0; datetime time=0; string name=""; //--- find the last added graphical object and write its index for(int j=0;j<this.m_total_objects;j++) { name=::ObjectName(this.ChartID(),j); datetime tm=(datetime)::ObjectGetInteger(this.ChartID(),name,OBJPROP_CREATETIME); if(tm>time) { time=tm; index=j; } } //--- Select the last graphical object by its index name=::ObjectName(this.ChartID(),index); if(name!="") { //--- Create the object of the graphical object class corresponding to the added graphical object type ENUM_OBJECT type=(ENUM_OBJECT)::ObjectGetInteger(this.ChartID(),name,OBJPROP_TYPE); ENUM_OBJECT_DE_TYPE obj_type=ENUM_OBJECT_DE_TYPE(type+OBJECT_DE_TYPE_GSTD_OBJ+1); CGStdGraphObj *obj=this.CreateNewGraphObj(type,this.ChartID(),name); if(obj!=NULL) { //--- Set the object index and affiliation, display its short description and remove the created object obj.SetObjectID(this.m_total_objects); obj.SetBelong(GRAPH_OBJ_BELONG_NO_PROGRAM); obj.Print(); delete obj; } } } //--- save the index of the last added graphical object and the difference with the last check this.m_last_objects=this.m_total_objects; this.m_is_graph_obj_event=(bool)this.m_delta_graph_obj; } //+------------------------------------------------------------------+
Anteriormente, aqui criávamos um novo objeto gráfico abstrato. Agora criamos um objeto do respectivo tipo, utilizando as classes herdeiras criadas hoje. Após criar com sucesso o objeto, adicionar ao mesmo a propriedade de pertença (não pertencente ao programa) e, em vez de exibir uma breve descrição do objeto criado, imprimimos no log uma descrição completa de todas as suas propriedades.
Para selecionar o objeto que desejamos criar, usamos o método que gera um novo objeto gráfico padrão:
//+------------------------------------------------------------------+ //| Create a new standard graphical object | //+------------------------------------------------------------------+ CGStdGraphObj *CChartObjectsControl::CreateNewGraphObj(const ENUM_OBJECT obj_type,const long chart_id,const string name) { CGStdGraphObj *obj=NULL; switch((int)obj_type) { //--- Lines case OBJ_VLINE : return new CGStdVLineObj(chart_id,name); case OBJ_HLINE : return new CGStdHLineObj(chart_id,name); case OBJ_TREND : return new CGStdTrendObj(chart_id,name); case OBJ_TRENDBYANGLE : return new CGStdTrendByAngleObj(chart_id,name); case OBJ_CYCLES : return new CGStdCyclesObj(chart_id,name); case OBJ_ARROWED_LINE : return new CGStdArrowedLineObj(chart_id,name); //--- Channels case OBJ_CHANNEL : return new CGStdChannelObj(chart_id,name); case OBJ_STDDEVCHANNEL : return new CGStdStdDevChannelObj(chart_id,name); case OBJ_REGRESSION : return new CGStdRegressionObj(chart_id,name); case OBJ_PITCHFORK : return new CGStdPitchforkObj(chart_id,name); //--- Gann case OBJ_GANNLINE : return new CGStdGannLineObj(chart_id,name); case OBJ_GANNFAN : return new CGStdGannFanObj(chart_id,name); case OBJ_GANNGRID : return new CGStdGannGridObj(chart_id,name); //--- Fibo case OBJ_FIBO : return new CGStdFiboObj(chart_id,name); case OBJ_FIBOTIMES : return new CGStdFiboTimesObj(chart_id,name); case OBJ_FIBOFAN : return new CGStdFiboFanObj(chart_id,name); case OBJ_FIBOARC : return new CGStdFiboArcObj(chart_id,name); case OBJ_FIBOCHANNEL : return new CGStdFiboChannelObj(chart_id,name); case OBJ_EXPANSION : return new CGStdExpansionObj(chart_id,name); //--- Elliott case OBJ_ELLIOTWAVE5 : return new CGStdElliotWave5Obj(chart_id,name); case OBJ_ELLIOTWAVE3 : return new CGStdElliotWave3Obj(chart_id,name); /* //--- Shapes case OBJ_RECTANGLE : return new CGStdRectangleObj(chart_id,name); case OBJ_TRIANGLE : return new CGStdTriangleObj(chart_id,name); case OBJ_ELLIPSE : return new CGStdEllipseObj(chart_id,name); //--- Arrows case OBJ_ARROW_THUMB_UP : return new CGStdArrowThumbUpObj(chart_id,name); case OBJ_ARROW_THUMB_DOWN : return new CGStdArrowThumbDownObj(chart_id,name); case OBJ_ARROW_UP : return new CGStdArrowUpObj(chart_id,name); case OBJ_ARROW_DOWN : return new CGStdArrowDownObj(chart_id,name); case OBJ_ARROW_STOP : return new CGStdArrowStopObj(chart_id,name); case OBJ_ARROW_CHECK : return new CGStdArrowCheckObj(chart_id,name); case OBJ_ARROW_LEFT_PRICE : return new CGStdArrowLeftPriceObj(chart_id,name); case OBJ_ARROW_RIGHT_PRICE : return new CGStdArrowRightPriceObj(chart_id,name); case OBJ_ARROW_BUY : return new CGStdArrowBuyObj(chart_id,name); case OBJ_ARROW_SELL : return new CGStdArrowSellObj(chart_id,name); case OBJ_ARROW : return new CGStdArrowObj(chart_id,name); //--- Graphical objects case OBJ_TEXT : return new CGStdTextObj(chart_id,name); case OBJ_LABEL : return new CGStdLabelObj(chart_id,name); case OBJ_BUTTON : return new CGStdButtonObj(chart_id,name); case OBJ_CHART : return new CGStdChartObj(chart_id,name); case OBJ_BITMAP : return new CGStdBitmapObj(chart_id,name); case OBJ_BITMAP_LABEL : return new CGStdBitmapLabelObj(chart_id,name); case OBJ_EDIT : return new CGStdEditObj(chart_id,name); case OBJ_EVENT : return new CGStdEventObj(chart_id,name); case OBJ_RECTANGLE_LABEL : return new CGStdRectangleLabelObj(chart_id,name); */ default : return NULL; } } //+------------------------------------------------------------------+
Aqui simplesmente ao método são passados o tipo de objeto que precisa ser criado, o identificador do gráfico ao qual o objeto gráfico foi adicionado e o nome do novo objeto gráfico. Em seguida, dependendo do tipo de objeto gráfico passado ao método, criamos por meio do operador new um novo objeto da devida classe herdeira do objeto gráfico abstrato e retornamos imediatamente o resultado da criação deste novo objeto.
O método retorna o ponteiro para o objeto recém-criado ou NULL em caso de falha. Como podemos ver, nem todos os objetos são criados ainda. Faremos o resto no próximo artigo, junto com as melhorias que definitivamente integraremos nas classes criadas hoje. Na verdade, precisaremos dar acesso a todas as propriedades de todos os pontos de ancoragem do objeto, e não ao primeiro como foi feito nesta fase.
Estamos prontos para o teste.
Teste
Para o teste, vamos pegar o Expert Advisor do artigo anterior e o salvamos na nova pasta \MQL5\Experts\TestDoEasy\Part84\ com o novo nome TestDoEasyPart84.mq5.
Não precisamos fazer nenhuma mudança no EA nesta fase. Mas por uma questão de ordem, nós o salvamos na pasta de artigos correspondente do terminal.
Vamos compilar o Expert Advisor e executá-lo no terminal. Também vamos adicionar alguns objetos gráficos ao gráfico.
O log exibirá descrições completas de todas as propriedades dos objetos adicionados ao gráfico:
O que vem agora?
No próximo artigo, continuaremos a desenvolver as classes herdeiras dos objetos gráficos abstratos e a classe-coleção de objetos gráficos da biblioteca.
Se você tiver dúvidas, comentários e sugestões, pode expressá-los nos comentários ao artigo.
*Artigos desta série:
Gráficos na biblioteca DoEasy (Parte 73): objeto-forma de um elemento gráfico
Gráficos na biblioteca DoEasy (Parte 74): elemento gráfico básico baseado na classe CCanvas
Gráficos na biblioteca DoEasy (Parte 75): métodos para trabalhar com primitivas e texto num elemento gráfico básico
Gráficos na biblioteca DoEasy (Parte 76): objeto Forma e temas de cores predefinidos
Gráficos na biblioteca DoEasy (Parte 77): classe do objeto Sombra
Gráficos na Biblioteca DoEasy (Parte 78): princípios de animação dentro da biblioteca. Corte de imagens
Gráficos na biblioteca DoEasy (Parte 79): classe para o objeto quadro-de-animação e seus objetos herdeiros
Gráficos na biblioteca DoEasy (Parte 80): classe do objeto quadro de animação geométrica
Gráficos na biblioteca DoEasy (Parte 81): integrando gráficos nos objetos da biblioteca
Gráficos na biblioteca DoEasy (Parte 82): refatoração dos objetos da biblioteca e da coleção de objetos gráficos
Gráficos na biblioteca DoEasy (Parte 83): classe abstrata de objetos gráficos padrão