Скачать MetaTrader 5

Возможно ли привязать отображение графических объектов к конкретному графику? - страница 5

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Рустам
3597
Рустам  
все пункты плс
Александр
8576
Александр  
Стал шустрее работать )
Рустам
3597
Рустам  
подправил код
Александр
8576
Александр  
в таком виде советник цепляет и другие, совсем левые объекты и правит их значения, по-этому вернул всё как было.
Рустам
3597
Рустам  

В любом случае, нужно перебирать все объекты, если ваши объекты окажутся в конце списка, то цикл до них не доберется.

То что он цепляет другие объекты - это проблема не решенности глобального имени.

Я давно для своих объектов использую вот такую функцию :

#define GlobalParent    "wnd:"   //Префикс имени класса
#define hName           "Header" //Имя главного родителя (заголовка)
#define wName           "Window" //Имя главного окна
//+-----Массив аргументов для функции GetObjectName()----------------+
int     Props[10];                                                      
//              Props[0] = Лево         
//              Props[1] = Верх 
//              Props[2] = Право        
//              Props[3] = Низ  
//              Props[4] = Счетчик по Х 
//              Props[5] = Счетчик по У 
//              Props[6] = Зет индекс (основной)        
//              Props[7] = Зет индекс (дополнительный для объектов из нескольких слоев) 
//              Props[8] = Идентификатор зет индекса последнего (верхнего) слоя в объекте
//              Props[9] = Идентификатор типа объекта
//+------------------------------------------------------------------+
//|           Function  : string GetObjectName(string,int[],{string})|
//|           Copyright © 2012, XrustSolution. mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|                     Собирает полное имя объекта класса Interface |
//+------------------------------------------------------------------+
//|Полное имя объекта должно состоять из :                           |
//|wnd:        = Основной префикс имени                         4 зн |
//|z_0ax:      = Z индекс для опр. порядка отображения окна 1-9 6 зн |10 зн
//|c_30:       = Тип объекта класса (смотреть в списке типов)   5 зн |15 зн
//|lu_xxx_yyy: = Координаты левого верхнего угла               10 зн |25 зн
//|rd_xxx_yyy: = Координаты правого нижнего угла               10 зн |35 зн
//|id_xxx_yyy: = Номера объектов                               10 зн |45 зн
//|#name|parent= Собственное имя обьекта из максимум 15 знаков,    до|60 зн
//|состоящее из имени элемента класса, и имени родительского объекта |
//+------------------------------------------------------------------+
//|Разделители:  типов свойств     = двоеточите(:),                  |
//|              значений свойств  = нижнее подчеркивание(_)         |
//|              имя объекта       = решетка(#)конец описания свойств|
//|              имя родителя      = слеш[|]                         |
//+------------------------------------------------------------------+
string    ObjGetName(string Name,            // Имя объекта
                     int Props[],            // Набор свойств объекта
                     string Parent = "chart" // Имя родителя, по умолчанию = "chart" , то есть основное окно графика
                    ){string out="";
//+------------------------------------------------------------------+
   if(Parent==""){Parent = "chart";}
        out = StringConcatenate(GlobalParent,                                   //
                                "z_" ,Props[6],StringSetChar("",0,Props[7]+97),StringSetChar("",0,Props[8]+97),":",
                                "c_" ,Props[9],":",
                                "lu_",Props[0],"_",Props[1],":",
                                "rd_",Props[2],"_",Props[3],":",
                                "id" ,Props[4],"" ,Props[5],":",
                                "#"  ,Name    ,"|",Parent);
        return(out);
}
//+------------------------------------------------------------------+

которая позволяет загнать в имя объекта всю необходимую о нем информацию, кроме того, она позволяет точно позиционировать (сортировать) их видимость относительно друг друга, изменяя необходимые значения.

Александр
8576
Александр  

Всё дело в том, что прямоугольники мы рисуем руками, а не программно, отсюда функция немного не подойдет.

Исправил код, теперь советник перебирает в цикле все объекты и проверяет их тип на соответствие.

//+------------------------------------------------------------------+
//|                                                 Object Hider.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  int    obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++)
    {
     string obj_name=ObjectName(i);
     string obj_descript=ObjectDescription(obj_name);
     double obj_price1=ObjectGet(obj_name,OBJPROP_PRICE1);
     double obj_price2=ObjectGet(obj_name,OBJPROP_PRICE2);
     if ((ObjectType(obj_name)==OBJ_RECTANGLE && obj_descript!=Symbol() && obj_price1>0) || 
         (ObjectType(obj_name)==OBJ_RECTANGLE && obj_descript==Symbol() && obj_price1<0))
       {
        ObjectSet(obj_name,OBJPROP_PRICE1,obj_price1*(-1));
        ObjectSet(obj_name,OBJPROP_PRICE2,obj_price2*(-1));
        
        Print(i," ",obj_name," ",obj_descript," ",ObjectGet(obj_name,OBJPROP_PRICE1)," ",ObjectGet(obj_name,OBJPROP_PRICE2));
       }         
    }
  WindowRedraw(); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий