![DoEasyライブラリのグラフィックス(第85部): グラフィカルオブジェクトコレクション - 新規作成オブジェクトの追加](https://c.mql5.com/i/articles/overlay.png)
DoEasyライブラリのグラフィックス(第85部): グラフィカルオブジェクトコレクション - 新規作成オブジェクトの追加
内容
概念
抽象グラフィカルオブジェクトクラスから派生したオブジェクトクラスはすでにいくつかあります。前回の記事では、Lines、Channels、Gann、Fibo、Elliottの各グループからこのようなオブジェクトを実装しました。ここでは、Shapes、Arrows、GraphicalObjectsグループのオブジェクトクラスを追加します。さらに、グラフィカルオブジェクトコレクションクラスは、手動で作成されたグラフィカルオブジェクトをコレクションリストに追加する機能を備えるようになります。
ライブラリクラスの改善
まず第一に、英単語「Standard」で私が犯した厄介な間違いについてご注意を受けました。最後に「t」でスペルしていたので、スペルが間違っているすべてのファイルを修正し、ライブラリフォルダ名も変更しました。ここにすべてのファイルを載せても意味がありません。Shift+Ctrl+Fを押して必要な単語、ライブラリフォルダを選択し、サブフォルダで検索すると、それらを見つけることができます。
大文字小文字の区別を考慮して単語全体を検索する必要はありません。ライブラリファイルのテキストで「standart」が出現するかどうかを探し、最後の文字を変更するだけです。
これはすでに行っているので、ターミナルのインクルードディレクトリのDoEasyフォルダを以下に添付されているものに置き換えてください。
例として\MQL5\Include\DoEasy\Defines.mqhについて考えましょう。スペルミスを修正し、グラフィカルオブジェクトの整数プロパティを列挙するための定数の名前を修正しました。
//+------------------------------------------------------------------+ //| Data for working with indicators | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Abstract indicator status | //+------------------------------------------------------------------+ enum ENUM_INDICATOR_STATUS { INDICATOR_STATUS_STANDARD, // Standard indicator INDICATOR_STATUS_CUSTOM, // Custom indicator }; //+------------------------------------------------------------------+ //| Indicator group | //+------------------------------------------------------------------+
...
//+------------------------------------------------------------------+ //| List of graphical objects affiliations | //+------------------------------------------------------------------+ enum ENUM_GRAPH_OBJ_BELONG { GRAPH_OBJ_BELONG_PROGRAM, // Graphical object belongs to a program GRAPH_OBJ_BELONG_NO_PROGRAM, // Graphical object does not belong to a program }; //+------------------------------------------------------------------+ //| The list of graphical element types | //+------------------------------------------------------------------+ enum ENUM_GRAPH_ELEMENT_TYPE { GRAPH_ELEMENT_TYPE_STANDARD, // 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 | //+------------------------------------------------------------------+
...
//--- 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_CHART_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 //+------------------------------------------------------------------+ //| Real properties of a standard graphical object | //+------------------------------------------------------------------+
チャートオブジェクトID(OBJ_CHART)定数は、以前は「GRAPH_OBJ_PROP_OBJ_CHART_ID」と呼ばれていたため、チャートオブジェクトのプロパティを説明する列挙定数のリストから削除されていました。これで、それらすべてが統合されました。
誤ったGRAPH_OBJ_PROP_OBJ_CHART_ID定数についての言及は、すべてのライブラリファイルでGRAPH_OBJ_PROP_CHART_OBJ_CHART_IDに置き換えられるようになりました。
\MQL5\Include\DoEasy\Data.mqhに、ライブラリの新しいメッセージインデックスを追加します。
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) MSG_GRAPH_OBJ_TEXT_ANCHOR_TOP, // Arrow anchor point is located at the top MSG_GRAPH_OBJ_TEXT_ANCHOR_BOTTOM, // Arrow anchor point is located at the bottom MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_UPPER, // Anchor point at the upper left corner MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT, // Anchor point at the left center MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_LOWER, // Anchor point at the lower left corner MSG_GRAPH_OBJ_TEXT_ANCHOR_LOWER, // Anchor point at the bottom center MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_LOWER, // Anchor point at the lower right corner MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT, // Anchor point at the right center MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_UPPER, // Anchor point at the upper right corner MSG_GRAPH_OBJ_TEXT_ANCHOR_UPPER, // Anchor point at the upper center MSG_GRAPH_OBJ_TEXT_ANCHOR_CENTER, // Anchor point at the very center of the object MSG_GRAPH_OBJ_FAILED_GET_ADDED_OBJ_LIST, // Failed to get the list of newly added objects MSG_GRAPH_OBJ_FAILED_DETACH_OBJ_FROM_LIST, // Failed to remove a graphical object from the list }; //+------------------------------------------------------------------+
また、新しく追加されたインデックスに対応するテキストも追加します。
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) MSG_GRAPH_OBJ_TEXT_ANCHOR_TOP, // Arrow anchor point is located at the top MSG_GRAPH_OBJ_TEXT_ANCHOR_BOTTOM, // Arrow anchor point is located at the bottom MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_UPPER, // Anchor point at the upper left corner MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT, // Anchor point at the left center MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_LOWER, // Anchor point at the lower left corner MSG_GRAPH_OBJ_TEXT_ANCHOR_LOWER, // Anchor point at the bottom center MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_LOWER, // Anchor point at the lower right corner MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT, // Anchor point at the right center MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_UPPER, // Anchor point at the upper right corner MSG_GRAPH_OBJ_TEXT_ANCHOR_UPPER, // Anchor point at the upper center MSG_GRAPH_OBJ_TEXT_ANCHOR_CENTER, // Anchor point at the very center of the object MSG_GRAPH_OBJ_FAILED_GET_ADDED_OBJ_LIST, // Failed to get the list of newly added objects MSG_GRAPH_OBJ_FAILED_DETACH_OBJ_FROM_LIST, // Failed to remove a graphical object from the list }; //+------------------------------------------------------------------+
異なるグラフィカルオブジェクトの「グラフィカルオブジェクトのアンカーポイントの位置」プロパティは同じですが、異なるオブジェクトの結合方法を指定するための列挙型が異なります。Text、Label、Bitmap、Bitmap LabelにはENUM_ANCHOR_POINT列挙が必要ですが、ArrowオブジェクトにはENUM_ARROW_ANCHORが適用されます。
これを考慮して、このプロパティの抽象グラフィカルオブジェクトのクラスは、これらの列挙型の1つの型ではなく、int型のオブジェクトアンカーポイントを返すメソッドを特徴としています。どのオブジェクトがクラスから派生し、どの列挙型を返す必要があるかがわからないためです。子孫は、必要な結合方法列挙型を返す独自のメソッドを備えています。抽象クラスには、結合方法の説明を表示するための仮想メソッドがあります。
//--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return (string)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR);}
継承された各クラスは、必要な記述型(またはENUM_ARROW_ANCHORまたはENUM_ANCHOR_POINT列挙型からの結合方法)を返す同じ仮想メソッドを持つ必要があります。
結合方法を表示するために必要なメソッドを選択できるようにするには、これらの列挙の値の説明を表示する関数をサービス関数ファイル(\MQL5\Include\DoEasy\Services\DELib.mqh)に追加します。
//+------------------------------------------------------------------+ //| Return the anchor point description | //| for the Arrow graphical object | //+------------------------------------------------------------------+ string AnchorForArrowObjDescription(const ENUM_ARROW_ANCHOR anchor) { return ( anchor==ANCHOR_TOP ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_TOP) : anchor==ANCHOR_BOTTOM ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_BOTTOM) : "Unknown" ); } //+------------------------------------------------------------------+ //| Return the anchor point description for graphical objects | //+------------------------------------------------------------------+ string AnchorForGraphicsObjDescription(const ENUM_ANCHOR_POINT anchor) { return ( anchor==ANCHOR_LEFT_UPPER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_UPPER) : anchor==ANCHOR_LEFT ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT) : anchor==ANCHOR_LEFT_LOWER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_LEFT_LOWER) : anchor==ANCHOR_LOWER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_LOWER) : anchor==ANCHOR_RIGHT_LOWER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_LOWER) : anchor==ANCHOR_RIGHT ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT) : anchor==ANCHOR_RIGHT_UPPER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_RIGHT_UPPER) : anchor==ANCHOR_UPPER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_UPPER) : anchor==ANCHOR_CENTER ? CMessage::Text(MSG_GRAPH_OBJ_TEXT_ANCHOR_CENTER) : "Unknown" ); } //+------------------------------------------------------------------+ //| Return the flag of displaying the graphical | //| object on a specified chart timeframe | //+------------------------------------------------------------------+
ここでは、渡された値に応じて、適切なテキストの説明を受け取ります。
抽象グラフィカルオブジェクトの残りの子孫オブジェクトを追加する
\MQL5\Include\DoEasy\Objects\Graph\Standard\で、抽象グラフィカルオブジェクトの残りの子孫クラスを追加します。
すべてのオブジェクトはCGStdGraphObjクラスから継承されている必要があります。また、クラスファイルは作成されたファイルにインクルードされている必要があります。
以下は、長方形グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdRectangleObj.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" //+------------------------------------------------------------------+ //| Rectangle graphical object | //+------------------------------------------------------------------+ class CGStdRectangleObj : public CGStdGraphObj { private: public: //--- Constructor CGStdRectangleObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_RECTANGLE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_SHAPES,chart_id,name) { //--- Get and save the object properties 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 (ENUM_OBJECT) type description virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_RECTANGLE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdRectangleObj::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 : 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 CGStdRectangleObj::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 CGStdRectangleObj::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 CGStdRectangleObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdRectangleObj::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) ); } //+------------------------------------------------------------------+
このような各クラスのコンストラクタは、クラスによって記述されたグラフィカルオブジェクトタイプに属するオブジェクトプロパティのみを受信して保存します。同様に、メソッドは、そのプロパティのオブジェクトサポートを示すフラグを返し、グラフィカルオブジェクトがサポートするプロパティのみを一覧表示します。
標準のグラフィカルオブジェクトの他のクラスを見て、必要に応じてクラスコードにコメントを追加しましょう。
以下は、三角形グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| CGStdTriangleObj.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" //+------------------------------------------------------------------+ //| Triangle graphical object | //+------------------------------------------------------------------+ class CGStdTriangleObj : public CGStdGraphObj { private: public: //--- Constructor CGStdTriangleObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_TRIANGLE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_SHAPES,chart_id,name) { //--- Get and save the object properties 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_TRIANGLE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTriangleObj::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 : 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 CGStdTriangleObj::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 CGStdTriangleObj::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 CGStdTriangleObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdTriangleObj::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) ); } //+------------------------------------------------------------------+
以下は、楕円形グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdEllipseObj.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" //+------------------------------------------------------------------+ //| Ellipse graphical object | //+------------------------------------------------------------------+ class CGStdEllipseObj : public CGStdGraphObj { private: public: //--- Constructor CGStdEllipseObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ELLIPSE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_SHAPES,chart_id,name) { //--- Get and save the object properties 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ELLIPSE); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdEllipseObj::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 : 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 CGStdEllipseObj::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 CGStdEllipseObj::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 CGStdEllipseObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdEllipseObj::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) ); } //+------------------------------------------------------------------+
以下は、サムズアップグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowThumbUpObj.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" //+------------------------------------------------------------------+ //| Thumb up graphical object | //+------------------------------------------------------------------+ class CGStdArrowThumbUpObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowThumbUpObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_THUMB_UP,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_THUMB_UP); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowThumbUpObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowThumbUpObj::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 CGStdArrowThumbUpObj::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 CGStdArrowThumbUpObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowThumbUpObj::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) ); } //+------------------------------------------------------------------+
クラスコンストラクタで必要なオブジェクトプロパティを記述することに加えて、結合方法を返すメソッドを追加しました。これは、ENUM_ARROW_ANCHOR列挙型を返し、仮想メソッドは、サービス関数のファイルに追加したAnchorForArrowObjDescription()関数によって返される値を使用してアンカーメソッドの説明を返します。
以下は、サムズダウングラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowThumbDownObj.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" //+------------------------------------------------------------------+ //| Thumb down graphical object | //+------------------------------------------------------------------+ class CGStdArrowThumbDownObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowThumbDownObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_THUMB_DOWN,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_THUMB_DOWN); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowThumbDownObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowThumbDownObj::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 CGStdArrowThumbDownObj::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 CGStdArrowThumbDownObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowThumbDownObj::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) ); } //+------------------------------------------------------------------+
以下は、上向き矢印グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowUpObj.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" //+------------------------------------------------------------------+ //| Arrow up graphical object | //+------------------------------------------------------------------+ class CGStdArrowUpObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowUpObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_UP,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_UP); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowUpObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowUpObj::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 CGStdArrowUpObj::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 CGStdArrowUpObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowUpObj::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) ); } //+------------------------------------------------------------------+
以下は、下向き矢印グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowDownObj.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" //+------------------------------------------------------------------+ //| Arrow down graphical object | //+------------------------------------------------------------------+ class CGStdArrowDownObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowDownObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_DOWN,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_DOWN); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowDownObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowDownObj::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 CGStdArrowDownObj::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 CGStdArrowDownObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowDownObj::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) ); } //+------------------------------------------------------------------+
以下は、ストップグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowStopObj.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" //+------------------------------------------------------------------+ //| Stop graphical object | //+------------------------------------------------------------------+ class CGStdArrowStopObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowStopObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_STOP,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_STOP); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowStopObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowStopObj::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 CGStdArrowStopObj::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 CGStdArrowStopObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowStopObj::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) ); } //+------------------------------------------------------------------+
以下は、マークグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowCheckObj.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" //+------------------------------------------------------------------+ //| "Check mark" graphical object | //+------------------------------------------------------------------+ class CGStdArrowCheckObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowCheckObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_CHECK,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_CHECK); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowCheckObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowCheckObj::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 CGStdArrowCheckObj::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 CGStdArrowCheckObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowCheckObj::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) ); } //+------------------------------------------------------------------+
以下は、左価格ラベルグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowLeftPriceObj.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" //+------------------------------------------------------------------+ //| Left price label graphical object | //+------------------------------------------------------------------+ class CGStdArrowLeftPriceObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowLeftPriceObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_LEFT_PRICE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_LEFT_PRICE); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowLeftPriceObj::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 CGStdArrowLeftPriceObj::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 CGStdArrowLeftPriceObj::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 CGStdArrowLeftPriceObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowLeftPriceObj::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) ); } //+------------------------------------------------------------------+
以下は、右価格ラベルグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowRightPriceObj.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" //+------------------------------------------------------------------+ //| Right price label graphical object | //+------------------------------------------------------------------+ class CGStdArrowRightPriceObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowRightPriceObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_RIGHT_PRICE,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_RIGHT_PRICE); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowRightPriceObj::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 CGStdArrowRightPriceObj::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 CGStdArrowRightPriceObj::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 CGStdArrowRightPriceObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowRightPriceObj::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) ); } //+------------------------------------------------------------------+
以下は、買いグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowBuyObj.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" //+------------------------------------------------------------------+ //| Buy graphical object | //+------------------------------------------------------------------+ class CGStdArrowBuyObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowBuyObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_BUY,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Specify the object property CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_TOP); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_BUY); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowBuyObj::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_ANCHOR : 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 CGStdArrowBuyObj::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 CGStdArrowBuyObj::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 CGStdArrowBuyObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowBuyObj::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) ); } //+------------------------------------------------------------------+
以下は、売りグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowSellObj.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" //+------------------------------------------------------------------+ //| Sell graphical object | //+------------------------------------------------------------------+ class CGStdArrowSellObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowSellObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW_SELL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Specify the object property CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_BOTTOM); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW_SELL); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowSellObj::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_ANCHOR : 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 CGStdArrowSellObj::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 CGStdArrowSellObj::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 CGStdArrowSellObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowSellObj::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) ); } //+------------------------------------------------------------------+
以下は、矢印グラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdArrowObj.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" //+------------------------------------------------------------------+ //| Arrow graphical object | //+------------------------------------------------------------------+ class CGStdArrowObj : public CGStdGraphObj { private: public: //--- Constructor CGStdArrowObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_ARROW,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_ARROWS,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ARROWCODE,::ObjectGetInteger(chart_id,name,OBJPROP_ARROWCODE)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ARROW_ANCHOR Anchor(void) const { return (ENUM_ARROW_ANCHOR)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_ARROW); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForArrowObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdArrowObj::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_ANCHOR : case GRAPH_OBJ_PROP_ARROWCODE : 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 CGStdArrowObj::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 CGStdArrowObj::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 CGStdArrowObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdArrowObj::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) ); } //+------------------------------------------------------------------+
以下は、テキストグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdTextObj.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" //+------------------------------------------------------------------+ //| Text graphical object | //+------------------------------------------------------------------+ class CGStdTextObj : public CGStdGraphObj { private: public: //--- Constructor CGStdTextObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_TEXT,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONTSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_FONTSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANGLE,::ObjectGetDouble(chart_id,name,OBJPROP_ANGLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONT,::ObjectGetString(chart_id,name,OBJPROP_FONT)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_TEXT); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdTextObj::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_ANCHOR : case GRAPH_OBJ_PROP_FONTSIZE : 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 CGStdTextObj::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 CGStdTextObj::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_FONT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdTextObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdTextObj::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) ); } //+------------------------------------------------------------------+
以下は、テキストラベルグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdLabelObj.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" //+------------------------------------------------------------------+ //| Text label graphical object | //+------------------------------------------------------------------+ class CGStdLabelObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdLabelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_LABEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANGLE,::ObjectGetDouble(chart_id,name,OBJPROP_ANGLE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONTSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_FONTSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONT,::ObjectGetString(chart_id,name,OBJPROP_FONT)); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) type description virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_LABEL); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdLabelObj::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_CORNER : case GRAPH_OBJ_PROP_ANCHOR : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_FONTSIZE : 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 CGStdLabelObj::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 CGStdLabelObj::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_FONT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdLabelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdLabelObj::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) ); } //+------------------------------------------------------------------+
以下は、ボタングラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdButtonObj.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" //+------------------------------------------------------------------+ //| Button graphical object | //+------------------------------------------------------------------+ class CGStdButtonObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdButtonObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_BUTTON,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_STATE,::ObjectGetInteger(chart_id,name,OBJPROP_STATE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BGCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_BGCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BORDER_COLOR,::ObjectGetInteger(chart_id,name,OBJPROP_BORDER_COLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONTSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_FONTSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONT,::ObjectGetString(chart_id,name,OBJPROP_FONT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_LEFT_UPPER); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_BUTTON); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdButtonObj::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_CORNER : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_STATE : case GRAPH_OBJ_PROP_BGCOLOR : case GRAPH_OBJ_PROP_BORDER_COLOR : case GRAPH_OBJ_PROP_FONTSIZE : 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 CGStdButtonObj::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 CGStdButtonObj::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_FONT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdButtonObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdButtonObj::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) ); } //+------------------------------------------------------------------+
クラスコンストラクタでオブジェクト結合方法プロパティを設定します。一部のグラフィカルオブジェクトの場合、結合は左上隅で厳密に実行されます。したがって、ここではオブジェクトパラメータからこのプロパティを読み取るのではなく、すぐに正しい隅を設定します。強調表示されたクラスコード文字列については後でコメントします。
以下は、チャートグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdChartObj.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" //+------------------------------------------------------------------+ //| Chart graphical object | //+------------------------------------------------------------------+ class CGStdChartObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdChartObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_CHART,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_CHART_ID,::ObjectGetInteger(chart_id,name,OBJPROP_CHART_ID)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_PERIOD,::ObjectGetInteger(chart_id,name,OBJPROP_PERIOD)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE,::ObjectGetInteger(chart_id,name,OBJPROP_DATE_SCALE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE,::ObjectGetInteger(chart_id,name,OBJPROP_PRICE_SCALE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE,::ObjectGetInteger(chart_id,name,OBJPROP_CHART_SCALE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL,::ObjectGetString(chart_id,name,OBJPROP_SYMBOL)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_LEFT_UPPER); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_CHART); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdChartObj::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_CORNER : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_CHART_OBJ_CHART_ID : case GRAPH_OBJ_PROP_CHART_OBJ_DATE_SCALE : case GRAPH_OBJ_PROP_CHART_OBJ_PRICE_SCALE : case GRAPH_OBJ_PROP_CHART_OBJ_CHART_SCALE : case GRAPH_OBJ_PROP_CHART_OBJ_PERIOD : 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 CGStdChartObj::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 CGStdChartObj::SupportProperty(ENUM_GRAPH_OBJ_PROP_STRING property) { switch((int)property) { //--- Supported properties case GRAPH_OBJ_PROP_CHART_OBJ_SYMBOL : 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 CGStdChartObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdChartObj::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) ); } //+------------------------------------------------------------------+
以下は、ビットマップグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdBitmapObj.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" //+------------------------------------------------------------------+ //| Bitmap graphical object | //+------------------------------------------------------------------+ class CGStdBitmapObj : public CGStdGraphObj { private: public: //--- Constructor CGStdBitmapObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_BITMAP,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_XOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_YOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_BITMAP); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdBitmapObj::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_ANCHOR : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_XOFFSET : case GRAPH_OBJ_PROP_YOFFSET : 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 CGStdBitmapObj::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 CGStdBitmapObj::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_BMPFILE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdBitmapObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdBitmapObj::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) ); } //+------------------------------------------------------------------+
以下は、ビットマップラベルグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdBitmapObj.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" //+------------------------------------------------------------------+ //| Bitmap label graphical object | //+------------------------------------------------------------------+ class CGStdBitmapLabelObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdBitmapLabelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_BITMAP_LABEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_XOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_YOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,::ObjectGetInteger(chart_id,name,OBJPROP_ANCHOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_STATE,::ObjectGetInteger(chart_id,name,OBJPROP_STATE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BMPFILE,::ObjectGetString(chart_id,name,OBJPROP_BMPFILE)); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_BITMAP_LABEL); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdBitmapLabelObj::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_STATE : case GRAPH_OBJ_PROP_CORNER : case GRAPH_OBJ_PROP_ANCHOR : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_XOFFSET : case GRAPH_OBJ_PROP_YOFFSET : 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 CGStdBitmapLabelObj::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 CGStdBitmapLabelObj::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_BMPFILE : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdBitmapLabelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdBitmapLabelObj::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) ); } //+------------------------------------------------------------------+
以下は、編集フィールドグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdEditObj.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" //+------------------------------------------------------------------+ //| Edit field graphical object | //+------------------------------------------------------------------+ class CGStdEditObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdEditObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_EDIT,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_READONLY,::ObjectGetInteger(chart_id,name,OBJPROP_READONLY)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ALIGN,::ObjectGetInteger(chart_id,name,OBJPROP_ALIGN)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BGCOLOR,::ObjectGetInteger(chart_id,name,OBJPROP_BGCOLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BORDER_COLOR,::ObjectGetInteger(chart_id,name,OBJPROP_BORDER_COLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONTSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_FONTSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_FONT,::ObjectGetString(chart_id,name,OBJPROP_FONT)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_LEFT_UPPER); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_EDIT); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdEditObj::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_READONLY : case GRAPH_OBJ_PROP_CORNER : case GRAPH_OBJ_PROP_ANCHOR : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_ALIGN : case GRAPH_OBJ_PROP_BORDER_COLOR : case GRAPH_OBJ_PROP_FONTSIZE : case GRAPH_OBJ_PROP_BGCOLOR : 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 CGStdEditObj::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 CGStdEditObj::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_FONT : return true; //--- Other properties are not supported //--- Default is 'false' default: break; } return false; } //+------------------------------------------------------------------+ //| Return the object short name | //+------------------------------------------------------------------+ string CGStdEditObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdEditObj::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) ); } //+------------------------------------------------------------------+
以下は、カレンダーイベントグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdEventObj.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" //+------------------------------------------------------------------+ //| Calendar event graphical object | //+------------------------------------------------------------------+ class CGStdEventObj : public CGStdGraphObj { private: public: //--- Constructor CGStdEventObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_EVENT,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,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_EVENT); } 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 CGStdEventObj::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 : 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 CGStdEventObj::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 CGStdEventObj::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 CGStdEventObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdEventObj::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) ); } //+------------------------------------------------------------------+
以下は、長方形ラベルグラフィカルオブジェクトクラスです。
//+------------------------------------------------------------------+ //| GStdRectangleLabelObj.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" //+------------------------------------------------------------------+ //| Rectangular label graphical object | //+------------------------------------------------------------------+ class CGStdRectangleLabelObj : public CGStdGraphObj { private: void CoordsToTimePrice(void) { int subwnd; datetime time; double price; if(::ChartXYToTimePrice(m_chart_id,(int)this.XDistance(),(int)this.YDistance(),subwnd,time,price)) { this.SetTime(time); this.SetPrice(price); } } public: //--- Constructor CGStdRectangleLabelObj(const long chart_id,const string name) : CGStdGraphObj(OBJECT_DE_TYPE_GSTD_RECTANGLE_LABEL,GRAPH_OBJ_BELONG_NO_PROGRAM,GRAPH_OBJ_GROUP_GRAPHICAL,chart_id,name) { //--- Get and save the object properties CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_XDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YDISTANCE,::ObjectGetInteger(chart_id,name,OBJPROP_YDISTANCE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_XSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YSIZE,::ObjectGetInteger(chart_id,name,OBJPROP_YSIZE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_XOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_XOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_YOFFSET,::ObjectGetInteger(chart_id,name,OBJPROP_YOFFSET)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_CORNER,::ObjectGetInteger(chart_id,name,OBJPROP_CORNER)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BORDER_TYPE,::ObjectGetInteger(chart_id,name,OBJPROP_BORDER_TYPE)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_BORDER_COLOR,::ObjectGetInteger(chart_id,name,OBJPROP_BORDER_COLOR)); CGStdGraphObj::SetProperty(GRAPH_OBJ_PROP_ANCHOR,ANCHOR_LEFT_UPPER); this.CoordsToTimePrice(); } //--- 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); //--- Return the graphical object anchor point position ENUM_ANCHOR_POINT Anchor(void) const { return (ENUM_ANCHOR_POINT)this.GetProperty(GRAPH_OBJ_PROP_ANCHOR); } //--- 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 (ENUM_OBJECT) graphical object type virtual string TypeDescription(void) const { return StdGraphObjectTypeDescription(OBJ_RECTANGLE_LABEL); } //--- Return the description of the graphical object anchor point position virtual string AnchorDescription(void) const { return AnchorForGraphicsObjDescription(this.Anchor()); } }; //+------------------------------------------------------------------+ //| Return 'true' if an object supports a passed | //| integer property, otherwise return 'false' | //+------------------------------------------------------------------+ bool CGStdRectangleLabelObj::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_ANCHOR : case GRAPH_OBJ_PROP_CORNER : case GRAPH_OBJ_PROP_XDISTANCE : case GRAPH_OBJ_PROP_YDISTANCE : case GRAPH_OBJ_PROP_XOFFSET : case GRAPH_OBJ_PROP_YOFFSET : case GRAPH_OBJ_PROP_XSIZE : case GRAPH_OBJ_PROP_YSIZE : case GRAPH_OBJ_PROP_BORDER_COLOR : case GRAPH_OBJ_PROP_BORDER_TYPE : 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 CGStdRectangleLabelObj::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 CGStdRectangleLabelObj::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 CGStdRectangleLabelObj::Header(const bool symbol=false) { return this.TypeDescription(); } //+------------------------------------------------------------------+ //| Display a short description of the object in the journal | //+------------------------------------------------------------------+ void CGStdRectangleLabelObj::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) ); } //+------------------------------------------------------------------+
クラスの構造をよく見ると、クラスはすべて同じですが、それぞれに固有の特性があることがわかります。すべてのオブジェクトプロパティが読み取られ、コンストラクタ内のクラス変数に保存されます。プロパティを変更するための価格や時間がないオブジェクトもありますが、ターミナルによってこれらのプロパティに設定されます(たとえば、「長方形ラベル」の場合、オブジェクトはピクセル単位のチャート座標に設定されます) ただし、その「価格/時間」パラメータは、オブジェクトをインストールするときのチャートのマウスクリック座標に等しい値を特徴としています)。このようなプロパティは、CoordsToTimePrice()プライベートメソッドを使用して値を受け取ります。
これで、抽象グラフィカルオブジェクトの子孫であるすべてのオブジェクトのクラスができました。次に、指定されたパラメータによってリスト内の必要なグラフィカルオブジェクトの検索を実行する機能を実装します。
これらのオブジェクトはすべて、グラフィカルオブジェクトコレクションクラスのリストに保存されます。検索と並べ替えは、\MQL5\Include\DoEasy\Services\Select.mqhのCSelectクラスによって実行されます。ファイルを開き、必要な改善を加えます。
まず、抽象グラフィカルオブジェクトのクラスファイルをインクルードします。
//+------------------------------------------------------------------+ //| Select.mqh | //| Copyright 2020, MetaQuotes Software Corp. | //| https://mql5.com/en/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://mql5.com/en/users/artmedia70" #property version "1.00" //+------------------------------------------------------------------+ //| Include files | //+------------------------------------------------------------------+ #include <Arrays\ArrayObj.mqh> #include "..\Objects\Orders\Order.mqh" #include "..\Objects\Events\Event.mqh" #include "..\Objects\Accounts\Account.mqh" #include "..\Objects\Symbols\Symbol.mqh" #include "..\Objects\PendRequest\PendRequest.mqh" #include "..\Objects\Series\SeriesDE.mqh" #include "..\Objects\Indicators\Buffer.mqh" #include "..\Objects\Indicators\IndicatorDE.mqh" #include "..\Objects\Indicators\DataInd.mqh" #include "..\Objects\Ticks\DataTick.mqh" #include "..\Objects\Book\MarketBookOrd.mqh" #include "..\Objects\MQLSignalBase\MQLSignal.mqh" #include "..\Objects\Chart\ChartObj.mqh" #include "..\Objects\Graph\GCnvElement.mqh" #include "..\Objects\Graph\Standard\GStdGraphObj.mqh" //+------------------------------------------------------------------+
クラス本体の最後で、標準のグラフィカルオブジェクトのプロパティで検索および並べ替えるメソッドを宣言します。
//+------------------------------------------------------------------+ //| Methods of working with standard graphical object data | //+------------------------------------------------------------------+ //--- Return the list of objects with one of (1) integer, (2) real and (3) string properties meeting a specified criterion static CArrayObj *ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property,long value,ENUM_COMPARER_TYPE mode); static CArrayObj *ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property,double value,ENUM_COMPARER_TYPE mode); static CArrayObj *ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_STRING property,string value,ENUM_COMPARER_TYPE mode); //--- Return the graphical object index in the list with the maximum value of the (1) integer, (2) real and (3) string properties static int FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property); static int FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property); static int FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_STRING property); //--- Return the graphical object index in the list with the minimum value of the (1) integer, (2) real and (3) string properties static int FindGraphicStdObjectMin(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property); static int FindGraphicStdObjectMin(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property); static int FindGraphicStdObjectMin(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_STRING property); //--- }; //+------------------------------------------------------------------+
クラス本体の外側で実装しましょう。
//+---------------------------------------------------------------------------+ //| The methods of working with data of the graphical elements on the canvas | //+---------------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Return the list of objects with one integer | //| property meeting the specified criterion | //+------------------------------------------------------------------+ CArrayObj *CSelect::ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property,long value,ENUM_COMPARER_TYPE mode) { if(list_source==NULL) return NULL; CArrayObj *list=new CArrayObj(); if(list==NULL) return NULL; list.FreeMode(false); ListStorage.Add(list); int total=list_source.Total(); for(int i=0; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); if(!obj.SupportProperty(property)) continue; long obj_prop=obj.GetProperty(property); if(CompareValues(obj_prop,value,mode)) list.Add(obj); } return list; } //+------------------------------------------------------------------+ //| Return the list of objects with one real | //| property meeting the specified criterion | //+------------------------------------------------------------------+ CArrayObj *CSelect::ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property,double value,ENUM_COMPARER_TYPE mode) { if(list_source==NULL) return NULL; CArrayObj *list=new CArrayObj(); if(list==NULL) return NULL; list.FreeMode(false); ListStorage.Add(list); for(int i=0; i<list_source.Total(); i++) { CGStdGraphObj *obj=list_source.At(i); if(!obj.SupportProperty(property)) continue; double obj_prop=obj.GetProperty(property); if(CompareValues(obj_prop,value,mode)) list.Add(obj); } return list; } //+------------------------------------------------------------------+ //| Return the list of objects with one string | //| property meeting the specified criterion | //+------------------------------------------------------------------+ CArrayObj *CSelect::ByGraphicStdObjectProperty(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_STRING property,string value,ENUM_COMPARER_TYPE mode) { if(list_source==NULL) return NULL; CArrayObj *list=new CArrayObj(); if(list==NULL) return NULL; list.FreeMode(false); ListStorage.Add(list); for(int i=0; i<list_source.Total(); i++) { CGStdGraphObj *obj=list_source.At(i); if(!obj.SupportProperty(property)) continue; string obj_prop=obj.GetProperty(property); if(CompareValues(obj_prop,value,mode)) list.Add(obj); } return list; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the maximum integer property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property) { if(list_source==NULL) return WRONG_VALUE; int index=0; CGStdGraphObj *max_obj=NULL; int total=list_source.Total(); if(total==0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); long obj1_prop=obj.GetProperty(property); max_obj=list_source.At(index); long obj2_prop=max_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,MORE)) index=i; } return index; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the maximum real property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property) { if(list_source==NULL) return WRONG_VALUE; int index=0; CGStdGraphObj *max_obj=NULL; int total=list_source.Total(); if(total==0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); double obj1_prop=obj.GetProperty(property); max_obj=list_source.At(index); double obj2_prop=max_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,MORE)) index=i; } return index; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the maximum string property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMax(CArrayObj *list_source,ENUM_GRAPH_OBJ_PROP_STRING property) { if(list_source==NULL) return WRONG_VALUE; int index=0; CGStdGraphObj *max_obj=NULL; int total=list_source.Total(); if(total==0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); string obj1_prop=obj.GetProperty(property); max_obj=list_source.At(index); string obj2_prop=max_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,MORE)) index=i; } return index; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the minimum integer property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMin(CArrayObj* list_source,ENUM_GRAPH_OBJ_PROP_INTEGER property) { int index=0; CGStdGraphObj *min_obj=NULL; int total=list_source.Total(); if(total==0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); long obj1_prop=obj.GetProperty(property); min_obj=list_source.At(index); long obj2_prop=min_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,LESS)) index=i; } return index; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the minimum real property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMin(CArrayObj* list_source,ENUM_GRAPH_OBJ_PROP_DOUBLE property) { int index=0; CGStdGraphObj *min_obj=NULL; int total=list_source.Total(); if(total== 0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); double obj1_prop=obj.GetProperty(property); min_obj=list_source.At(index); double obj2_prop=min_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,LESS)) index=i; } return index; } //+------------------------------------------------------------------+ //| Return the object index in the list | //| with the minimum string property value | //+------------------------------------------------------------------+ int CSelect::FindGraphicStdObjectMin(CArrayObj* list_source,ENUM_GRAPH_OBJ_PROP_STRING property) { int index=0; CGStdGraphObj *min_obj=NULL; int total=list_source.Total(); if(total==0) return WRONG_VALUE; for(int i=1; i<total; i++) { CGStdGraphObj *obj=list_source.At(i); string obj1_prop=obj.GetProperty(property); min_obj=list_source.At(index); string obj2_prop=min_obj.GetProperty(property); if(CompareValues(obj1_prop,obj2_prop,LESS)) index=i; } return index; } //+------------------------------------------------------------------+
そのようなメソッドのロジックと目的は第3部で検討したので、ここでは説明しません。
新しく作成されたグラフィカルオブジェクトをコレクションに追加する
チャートオブジェクトの定義の背後にあるロジックは次のとおりです。チャートのグラフィカルオブジェクトを管理するためのオブジェクトは、開いているチャートごとに作成されます。これらのオブジェクトは、チャート上のオブジェクト数の変化を追跡します。オブジェクトの数が増えている間、追加されたオブジェクトを確認し、それらのグラフィカルオブジェクトを作成して、新しく追加されたオブジェクトのリストに配置できます。したがって、開いている各チャートは、新しく追加されたグラフィカルオブジェクトの独自のリストを備えています。
次に、グラフィカルオブジェクトのコレクションクラスで、作成されたすべてのグラフィック管理オブジェクトのリストを受け取り、それぞれに新しく追加されたオブジェクトのリストを表示します。チャートに新しいグラフィカルオブジェクトが含まれている場合、それらを説明するオブジェクトがリストに配置されます。そのリストから、各オブジェクトへのポインタを受け取り、取得します。オブジェクトが正常に取得されると、グラフィカルオブジェクト管理クラスの新しく追加されたオブジェクトのリストから削除され、すぐにコレクションリストに配置されます。配置に失敗した場合、オブジェクトはエラーメッセージとともに削除されます。したがって、リストから削除されたオブジェクトは手動で管理するか、ターミナルサブシステムによって管理される別のリストに配置する必要があるため、メモリリークがなくなります。これはまさに私がしていることです。オブジェクトをコレクションリストに配置し、配置が失敗した場合にそれを削除します。
ロジックは、グラフィカルオブジェクトの説明として作成されたオブジェクトが失われることを意味しますが、ライブラリは、チャートへのグラフィカルオブジェクトの追加について通知することも、管理することもできません。ただし、これはオブジェクトをメモリに残すよりは優れています。
そのようなオブジェクトを保存するロジックはおそらくさらに改善することになると思いますが、これを行うには、まず、削除されたオブジェクトをコレクションリストに配置できなかった理由を見つける必要があります。最も可能性の高い原因は、メモリ不足です。この場合、オブジェクトを保存しようとすると失敗します。したがって、ここではそのようなオブジェクトを削除します。
まず、グラフィカルオブジェクトコレクションクラスのファイル(\MQL5\Include\DoEasy\Collections\GraphElementsCollection.mqh)は、現在の記事で作成された標準グラフィカルオブジェクトの残りのクラスをすべて受け取ります。
//+------------------------------------------------------------------+ //| 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\Standard\GStdVLineObj.mqh" #include "..\Objects\Graph\Standard\GStdHLineObj.mqh" #include "..\Objects\Graph\Standard\GStdTrendObj.mqh" #include "..\Objects\Graph\Standard\GStdTrendByAngleObj.mqh" #include "..\Objects\Graph\Standard\GStdCiclesObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowedLineObj.mqh" #include "..\Objects\Graph\Standard\GStdChannelObj.mqh" #include "..\Objects\Graph\Standard\GStdStdDevChannelObj.mqh" #include "..\Objects\Graph\Standard\GStdRegressionObj.mqh" #include "..\Objects\Graph\Standard\GStdPitchforkObj.mqh" #include "..\Objects\Graph\Standard\GStdGannLineObj.mqh" #include "..\Objects\Graph\Standard\GStdGannFanObj.mqh" #include "..\Objects\Graph\Standard\GStdGannGridObj.mqh" #include "..\Objects\Graph\Standard\GStdFiboObj.mqh" #include "..\Objects\Graph\Standard\GStdFiboTimesObj.mqh" #include "..\Objects\Graph\Standard\GStdFiboFanObj.mqh" #include "..\Objects\Graph\Standard\GStdFiboArcObj.mqh" #include "..\Objects\Graph\Standard\GStdFiboChannelObj.mqh" #include "..\Objects\Graph\Standard\GStdExpansionObj.mqh" #include "..\Objects\Graph\Standard\GStdElliotWave5Obj.mqh" #include "..\Objects\Graph\Standard\GStdElliotWave3Obj.mqh" #include "..\Objects\Graph\Standard\GStdRectangleObj.mqh" #include "..\Objects\Graph\Standard\GStdTriangleObj.mqh" #include "..\Objects\Graph\Standard\GStdEllipseObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowThumbUpObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowThumbDownObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowUpObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowDownObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowStopObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowCheckObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowLeftPriceObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowRightPriceObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowBuyObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowSellObj.mqh" #include "..\Objects\Graph\Standard\GStdArrowObj.mqh" #include "..\Objects\Graph\Standard\GStdTextObj.mqh" #include "..\Objects\Graph\Standard\GStdLabelObj.mqh" #include "..\Objects\Graph\Standard\GStdButtonObj.mqh" #include "..\Objects\Graph\Standard\GStdChartObj.mqh" #include "..\Objects\Graph\Standard\GStdBitmapObj.mqh" #include "..\Objects\Graph\Standard\GStdBitmapLabelObj.mqh" #include "..\Objects\Graph\Standard\GStdEditObj.mqh" #include "..\Objects\Graph\Standard\GStdEventObj.mqh" #include "..\Objects\Graph\Standard\GStdRectangleLabelObj.mqh" //+------------------------------------------------------------------+ //| Chart object management class | //+------------------------------------------------------------------+
グラフィカルオブジェクト管理クラスのprivateセクションで、新しく追加されたグラフィカルオブジェクトのリストを宣言し、チャートに最後に追加されたグラフィカルオブジェクトの名前を返すメソッドを宣言します。
クラスのpublicセクションで、新しく追加されたオブジェクトのリストを返すメソッドを記述します。クラスコンストラクタで、リストをクリアし、ソートされたリストフラグをそれに設定します。
//+------------------------------------------------------------------+ //| Chart object management class | //+------------------------------------------------------------------+ class CChartObjectsControl : public CObject { private: CArrayObj m_list_new_graph_obj; // List of added graphical objects 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 //--- Return the name of the last graphical object added to the chart string LastAddedGraphObjName(void); 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); //--- Return the list of newly added objects CArrayObj *GetListNewAddedObj(void) { return &this.m_list_new_graph_obj;} //--- Check the chart objects void Refresh(void); //--- Constructors CChartObjectsControl(void) { this.m_list_new_graph_obj.Clear(); this.m_list_new_graph_obj.Sort(); 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_list_new_graph_obj.Clear(); this.m_list_new_graph_obj.Sort(); 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); } }; //+------------------------------------------------------------------+
以前は、グラフィカルオブジェクト管理クラスのRefresh()メソッドで、次のメソッドでチャートに追加された最後のグラフィカルオブジェクトを探していました。
//--- 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!="") {
これで、このコード全体が別のメソッドで設定されます。したがって、コードブロックは現在次のようになります。
//--- If an object is added to the chart if(this.m_delta_graph_obj>0) { //--- find the last added graphical object, select it and write its name string name=this.LastAddedGraphObjName(); if(name!="") {
チャートに最後に追加されたオブジェクトの名前を受け取った場合は、それを説明するオブジェクトを作成し、そのプロパティを設定してジャーナルに送信し、すぐにオブジェクトを削除しました。
//--- 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; } }
次に、新しく追加されたオブジェクトのリストにオブジェクトを保存します。
//+------------------------------------------------------------------+ //| 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) { //--- find the last added graphical object, select it and write its name string name=this.LastAddedGraphObjName(); 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) return; //--- Set the object affiliation and add the created object to the list of new objects obj.SetBelong(GRAPH_OBJ_BELONG_NO_PROGRAM); if(this.m_list_new_graph_obj.Search(obj)==WRONG_VALUE) { this.m_list_new_graph_obj.Add(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; } //+------------------------------------------------------------------+
これで、チャートに追加されたグラフィカルオブジェクトのリストが、チャートを開くために新しく追加された各オブジェクトの後に、グラフィカルオブジェクト管理クラスの各オブジェクトに作成されます。次に、グラフィカルオブジェクトコレクションクラスで、グラフィカルオブジェクト管理のために各オブジェクトを表示し、作成されたグラフィカルオブジェクトを説明するすべての既存のオブジェクトをリストから取得して、コレクションリストに配置できるようにします。
新しい標準のグラフィカルオブジェクトを作成するメソッドで、今日実装したオブジェクト作成のために残りのすべての文字列をアンコメントします。
//+------------------------------------------------------------------+ //| CChartObjectsControl | //| 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; } } //+------------------------------------------------------------------+
クラス本体の外で、チャートに追加された最後のグラフィカルオブジェクトの名前を返すメソッドを記述します。
//+------------------------------------------------------------------+ //| CChartObjectsControl | //| Return the name of the last graphical object | //| added to the chart (th object becomes selected) | //+------------------------------------------------------------------+ string CChartObjectsControl::LastAddedGraphObjName(void) { int index=0; datetime time=0; for(int i=0;i<this.m_total_objects;i++) { string name=::ObjectName(this.ChartID(),i); datetime tm=(datetime)::ObjectGetInteger(this.ChartID(),name,OBJPROP_CREATETIME); if(tm>time) { time=tm; index=i; } } return ::ObjectName(this.ChartID(),index); } //+------------------------------------------------------------------+
ここでは、すべてのチャートオブジェクトをループして、グラフィカルオブジェクトの最大作成時間を探し、見つかったインデックスでオブジェクトを選択し(グラフィカルオブジェクトは端末リストに名前で格納されているため、インデックスが最大にならない場合があります)、その名前を返します。
ライブラリが作成および追跡できるグラフィカルオブジェクトには、標準のものとCCanvasクラスを使用して作成されたものの2種類があるため、グラフィカルオブジェクトコレクションには2つのリスト(標準のリスト)があります。 グラフィカルオブジェクトとキャンバス上のオブジェクトのリスト。これらのプロパティはまったく異なり、同じオブジェクトプロパティの列挙型にパラメータを格納することは不適切だと思います。
クラスのprivateセクションで、新しいリスト(キャンバス上のすべてのグラフィック要素のリスト)を宣言して、キャンバス上のすべてのグラフィカルオブジェクトをインクルードします。すべてのグラフィカルオブジェクトのリストをすでに宣言しているので、これを使用して標準のグラフィカルオブジェクトを格納します。
//+------------------------------------------------------------------+ //| Collection of graphical objects | //+------------------------------------------------------------------+ class CGraphElementsCollection : public CBaseObj { private: CArrayObj m_list_charts_control; // List of chart management objects CListObj m_list_all_canv_elm_obj; // List of all graphical elements on canvas CListObj m_list_all_graph_obj; // List of all graphical objects bool m_is_graph_obj_event; // Event flag in the list of graphical objects int m_total_objects; // Number of graphical objects int m_delta_graph_obj; // Difference in the number of graphical objects compared to the previous check //--- Return the flag indicating the graphical element object in the list of graphical objects bool IsPresentGraphElmInList(const int id,const ENUM_GRAPH_ELEMENT_TYPE type_obj); //--- Return the pointer to the object of managing objects of the specified chart CChartObjectsControl *GetChartObjectCtrlObj(const long chart_id); //--- Create a new object of managing graphical objects of a specified chart and add it to the list CChartObjectsControl *CreateChartObjectCtrlObj(const long chart_id); //--- Update the list of graphical objects by chart ID CChartObjectsControl *RefreshByChartID(const long chart_id); //--- Return the first free ID of the graphical (1) object and (2) element on canvas long GetFreeGraphObjID(void); long GetFreeCanvElmID(void); //--- Add a graphical object to the collection bool AddGraphObjToCollection(const string source,CChartObjectsControl *obj_control); public:
チャートIDによってグラフィカルオブジェクトのリストを更新するprivateメソッドは、グラフィカルオブジェクトを管理するためのオブジェクトへのポインタを返すようになりました。新しく作成されたオブジェクトのリストにアクセスするには、これが必要になります。
ここでは、さらに3つの宣言されたメソッドがあります。最初の空きグラフィカルオブジェクトIDを返すメソッドとキャンバス上の要素、およびグラフィカルオブジェクトをコレクションに追加するメソッドです。
クラスのpublicセクションで、GetList()メソッドを2つのメソッドに置き換えます。標準のグラフィカルオブジェクトのコレクションリストを返すためのメソッドと、キャンバス上のグラフィカル要素のコレクションリストを返すためのメソッドです。
public: //--- Return itself CGraphElementsCollection *GetObject(void) { return &this; } //--- Return the full collection list of standard graphical objects "as is" CArrayObj *GetListGraphObj(void) { return &this.m_list_all_graph_obj; } //--- Return the full collection list of graphical elements on canvas "as is" CArrayObj *GetListCanvElm(void) { return &this.m_list_all_canv_elm_obj;} //--- Return the list by selected (1) integer, (2) real and (3) string properties meeting the compared criterion CArrayObj *GetList(ENUM_CANV_ELEMENT_PROP_INTEGER property,long value,ENUM_COMPARER_TYPE mode=EQUAL) { return CSelect::ByGraphCanvElementProperty(this.GetListCanvElm(),property,value,mode); } CArrayObj *GetList(ENUM_CANV_ELEMENT_PROP_DOUBLE property,double value,ENUM_COMPARER_TYPE mode=EQUAL){ return CSelect::ByGraphCanvElementProperty(this.GetListCanvElm(),property,value,mode); } CArrayObj *GetList(ENUM_CANV_ELEMENT_PROP_STRING property,string value,ENUM_COMPARER_TYPE mode=EQUAL){ return CSelect::ByGraphCanvElementProperty(this.GetListCanvElm(),property,value,mode); } CArrayObj *GetList(ENUM_GRAPH_OBJ_PROP_INTEGER property,long value,ENUM_COMPARER_TYPE mode=EQUAL) { return CSelect::ByGraphicStdObjectProperty(this.GetListGraphObj(),property,value,mode); } CArrayObj *GetList(ENUM_GRAPH_OBJ_PROP_DOUBLE property,double value,ENUM_COMPARER_TYPE mode=EQUAL) { return CSelect::ByGraphicStdObjectProperty(this.GetListGraphObj(),property,value,mode); } CArrayObj *GetList(ENUM_GRAPH_OBJ_PROP_STRING property,string value,ENUM_COMPARER_TYPE mode=EQUAL) { return CSelect::ByGraphicStdObjectProperty(this.GetListGraphObj(),property,value,mode); } //--- Return the number of new graphical objects, (3) the flag of the occurred change in the list of graphical objects int NewObjects(void) const { return this.m_delta_graph_obj; } bool IsEvent(void) const { return this.m_is_graph_obj_event; } //--- Constructor CGraphElementsCollection(); //--- 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); //--- Create the list of chart management objects and return the number of charts int CreateChartControlList(void); //--- Update the list of (1) all graphical objects, (2) on the specified chart, fill in the data on the number of new ones and set the event flag void Refresh(void); void Refresh(const long chart_id); }; //+------------------------------------------------------------------+
1つのクラスに2つのコレクションリストが含まれるようになったため、標準のグラフィカルオブジェクトは、選択したオブジェクトプロパティによってリストを返すメソッドを受け取ります。
チャートIDによってグラフィカルオブジェクトのリストを更新するprivateメソッドは、グラフィカルオブジェクトを管理するためのオブジェクトへのポインタを返すようになりました。
//+------------------------------------------------------------------+ //| Update the list of graphical objects by chart ID | //+------------------------------------------------------------------+ CChartObjectsControl *CGraphElementsCollection::RefreshByChartID(const long chart_id) { //--- Get the pointer to the object for managing graphical objects CChartObjectsControl *obj=GetChartObjectCtrlObj(chart_id); //--- If there is no such an object in the list, create a new one and add it to the list if(obj==NULL) obj=this.CreateChartObjectCtrlObj(chart_id); //--- If the pointer to the object is not valid, leave the method if(obj==NULL) return NULL; //--- Update the list of graphical objects on a specified chart obj.Refresh(); return obj; } //+------------------------------------------------------------------+
すべてのグラフィカルオブジェクトのリストを更新するメソッドは、イベントがある場合、グラフィカルオブジェクト管理クラスから新しく追加されたオブジェクトのリストを受け取り、リストからオブジェクトを取得してコレクションリストに追加します。
//+------------------------------------------------------------------+ //| Update the list of all graphical objects | //+------------------------------------------------------------------+ void CGraphElementsCollection::Refresh(void) { //--- Declare variables to search for charts long chart_id=0; int i=0; //--- In the loop by all open charts in the terminal (no more than 100) while(i<CHARTS_MAX) { //--- Get the chart ID chart_id=::ChartNext(chart_id); if(chart_id<0) break; //--- Get the pointer to the object for managing graphical objects //--- and update the list of graphical objects by chart ID CChartObjectsControl *obj_ctrl=this.RefreshByChartID(chart_id); //--- If failed to get the pointer, move on to the next chart if(obj_ctrl==NULL) continue; //--- If the number of objects on the chart changes if(obj_ctrl.IsEvent()) { //--- If a graphical object is added to the chart if(obj_ctrl.Delta()>0) { //--- Get the list of added graphical objects and move them to the collection list //--- (if failed to move the object to the collection, move on to the next object) if(!AddGraphObjToCollection(DFUN_ERR_LINE,obj_ctrl)) continue; } //--- If the graphical object has been removed else if(obj_ctrl.Delta()<0) { } //--- otherwise else { } } //--- Increase the loop index i++; } } //+------------------------------------------------------------------+
メソッドロジックはコードコメントで簡単に説明されており、問題が発生することはありません。
以下は、グラフィカルオブジェクトの最初の空きIDとキャンバス上のグラフィック要素を返すメソッドです。
//+------------------------------------------------------------------+ //| Return the first free graphical object ID | //+------------------------------------------------------------------+ long CGraphElementsCollection::GetFreeGraphObjID(void) { int index=CSelect::FindGraphicStdObjectMax(this.GetListGraphObj(),GRAPH_OBJ_PROP_ID); CGStdGraphObj *obj=this.m_list_all_graph_obj.At(index); return(obj!=NULL ? obj.ObjectID()+1 : 1); } //+------------------------------------------------------------------+ //| Return the first free ID | //| of the graphical element on canvas | //+------------------------------------------------------------------+ long CGraphElementsCollection::GetFreeCanvElmID(void) { int index=CSelect::FindGraphCanvElementMax(this.GetListCanvElm(),CANV_ELEMENT_PROP_ID); CGCnvElement *obj=this.m_list_all_canv_elm_obj.At(index); return(obj!=NULL ? obj.ID()+1 : 1); } //+------------------------------------------------------------------+
ここで、最も高いIDを持つオブジェクトインデックスを取得し、検出されたIDによってリストから同じIDを持つオブジェクトを取得して、そのID値+1を返します。オブジェクトがリストに見つからない場合は、コレクションにオブジェクトがないため、1を返します。1のIDが最初のIDに割り当てられます。
以下は、グラフィカルオブジェクトをコレクションに追加するメソッドです。
//+------------------------------------------------------------------+ //| Add a graphical object to the collection | //+------------------------------------------------------------------+ bool CGraphElementsCollection::AddGraphObjToCollection(const string source,CChartObjectsControl *obj_control) { //--- Get the list of the last added graphical objects from the class for managing graphical objects CArrayObj *list=obj_control.GetListNewAddedObj(); //--- If failed to obtain the list, inform of that and return 'false' if(list==NULL) { CMessage::ToLog(DFUN_ERR_LINE,MSG_GRAPH_OBJ_FAILED_GET_ADDED_OBJ_LIST); return false; } //--- If the list is empty, return 'false' if(list.Total()==0) return false; //--- Declare the variable for storing the result bool res=true; //--- In the loop by the list of newly added standard graphical objects, for(int i=0;i<list.Total();i++) { //--- retrieve the next object from the list and CGStdGraphObj *obj=list.Detach(i); //--- if failed to get the object, inform of that, add 'false' to the resulting variable and move on to the next one if(obj==NULL) { CMessage::ToLog(source,MSG_GRAPH_OBJ_FAILED_DETACH_OBJ_FROM_LIST); res &=false; continue; } //--- if failed to add the object to the collection list, inform of that, //--- remove the object, add 'false' to the resulting variable and move on to the next one if(!this.m_list_all_graph_obj.Add(obj)) { CMessage::ToLog(source,MSG_LIB_SYS_FAILED_OBJ_ADD_TO_LIST); delete obj; res &=false; continue; } //--- The object has been successfully retrieved from the list of newly added graphical objects and introduced into the collection - //--- find the next free object ID, write it to the property and display the short object description in the journal else { obj.SetObjectID(this.GetFreeGraphObjID()); obj.PrintShort(); } } //--- Return the result of adding the object to the collection return res; } //+------------------------------------------------------------------+
メソッドロジックはコードコメントで詳細に説明されており、説明は不要です。ご質問がある場合は、下のコメント欄でお気軽にお問い合わせください。コレクションに追加されたオブジェクトの簡単な説明は、テスト目的でジャーナルに一時的に表示されます。
これで、コレクションに標準のグラフィカルオブジェクトを追加する機能の作成が完了しました。
検証
テストを実行するには、前の記事のEAを使用して、\MQL5\Experts\TestDoEasy\Part85\にTestDoEasyPart85.mq5として保存します。EAに変更はありません。
EAをコンパイルし、チャート上で起動して、さまざまなグラフィカルオブジェクトをさまざまなチャートに追加するだけです。それらの作成に関する短いグメッセージが操作ロに表示されます。
新しく追加されたグラフィカルオブジェクトを簡単に説明するには、データが不十分である可能性があります。
後で、さまざまなグラフィカルオブジェクトの簡単な説明に表示される情報を少し拡張します。
次の段階
次の記事では、グラフィカルオブジェクトと標準のグラフィカルオブジェクトを記述するオブジェクトのコレクションクラスの開発を続けます。
質問や提案はコメント欄にお願いします。
**連載のこれまでの記事:
DoEasyライブラリのグラフィックス(第73部): グラフィック要素のフォームオブジェクト
DoEasyライブラリのグラフィックス(第74部): CCanvasクラスを使用した基本的グラフィック要素
DoEasyライブラリのグラフィックス(第75部): 基本的なグラフィック要素でプリミティブとテキストを処理するメソッド
DoEasyライブラリのグラフィックス(第76部): フォームオブジェクトと事前定義されたカラースキーム
DoEasyライブラリのグラフィックス(第77部): 影オブジェクトクラス
DoEasyライブラリのグラフィックス(第78部): ライブラリのアニメーションの原則イメージスライス
DoEasyライブラリのグラフィックス(第79部): 「アニメーションフレーム」オブジェクトクラスとその子孫オブジェクト
DoEasyライブラリのグラフィックス(第80部): 「幾何学的アニメーションフレーム」オブジェクトクラス
DoEasyライブラリのグラフィックス(第81部): ライブラリオブジェクトへのグラフィックの統合
DoEasyライブラリのグラフィックス(第82部): ライブラリオブジェクトのリファクタリングとグラフィカルオブジェクトのコレクション
DoEasyライブラリのグラフィックス(第83部): 抽象標準グラフィカルオブジェクトのクラス
DoEasyライブラリのグラフィックス(第84部): 抽象標準グラフィカルオブジェクトの子孫クラス
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/9964
![より優れたプログラマー(第05部): より速い開発者になる方法](https://c.mql5.com/2/43/speed__1.png)
![DoEasyライブラリのグラフィックス(第84部): 抽象標準グラフィカルオブジェクトの子孫クラス](https://c.mql5.com/2/43/MQL5-avatar-doeasy-library3-2__3.png)
![多層パーセプトロンとバックプロパゲーションアルゴリズム(第II部): Pythonでの実装とMQL5との統合](https://c.mql5.com/2/42/Sem_tqtulo.png)
![MetaTrader5でのビッド・アスク・スプレッド分析](https://c.mql5.com/2/43/bid-ask-spread.png)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索