Клонирование объектов

 

Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?


Или для каждого объекта надо свой обработчик делать?

 
Универсального способа нет.
 
Nikolay Kuznetsov:

Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?

Можно, конечно.

Или для каждого объекта надо свой обработчик делать?

Для каждого типа объекта - свой. Точнее, делается один общий обработчик, который сначала сохраняет параметры, используемые всеми типами объектов, а потом, в зависимости от типа объекта, дополнительно сохраняются параметры, соответствующие типу объекта.

 
А вот зачем сохранять параметры объекта, уничтожать объект и создавать новый с теми же параметрами? Надо пользоваться указателями.
 
Nikolay Kuznetsov:

Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?


Или для каждого объекта надо свой обработчик делать?

Вот например - Тот же объект удалится и появится вновь. (Функция работает как в мт5 так и в мт4)

//+------------------------------------------------------------------+
//|                                                  CreateHline.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
input string InpObjUpName = "UpName"; // : Obj: Follows the price down (Horizontal Line)
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Processing();
  }
//+------------------------------------------------------------------+
//| ProcessingClosSell                                               |
//+------------------------------------------------------------------+
bool Processing(void)
  {
   bool rv=false;
   MqlRates rates[];
   int start_pos=0,count=1;
   if(CopyRates(Symbol(),Period(),start_pos,count,rates)!=count)
     {
      return(true);
     }
   double price=0.0;
   if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price))
      return(false);
   double tp   =price-300*Point();
   double price_line=0.0;
   if(ObjectFind(0,InpObjUpName)>=0)
     {
      long object_type=ObjectGetInteger(0,InpObjUpName,OBJPROP_TYPE);
      if(object_type==OBJ_HLINE)
         price_line=ObjectGetDouble(0,InpObjUpName,OBJPROP_PRICE);
      if(price_line>0.0)
        {
         if((rates[0].open>price_line && rates[0].close<price_line) ||
            (rates[0].open<price_line && rates[0].close>price_line))
           {
            PlaySound("ok.wav");
            ObjectsDeleteAll(0,InpObjUpName);
            CreateHline(0,0,InpObjUpName,tp,clrGold,0,0,1,1,1,1,2);
           }
        }
     }
   return(rv);
  }
//+------------------------------------------------------------------+
//|  Creating a horizontal price level                               |
//+------------------------------------------------------------------+
int CreateHline(long ch_id,int sub_window,
                string name,double price,
                color clr,ENUM_LINE_STYLE style,
                int width,bool back,
                bool selectable,bool selected,
                bool hidden,long z_order)
  {
   int    err = GetLastError();
   string lnName = name;
   err = 0;
   if(ObjectFind(0,lnName)!=-1)
      ObjectDelete(0,lnName);
   if(!ObjectCreate(ch_id,lnName,OBJ_HLINE,sub_window,0,price))
     {
      err = GetLastError();
      Print("Can't create object #", lnName, "# Error(",err,"):", err);
      return(err);
     }
   ObjectSetInteger(ch_id,lnName,OBJPROP_COLOR,clr);
   ObjectSetInteger(ch_id,lnName,OBJPROP_STYLE,style);
   ObjectSetInteger(ch_id,lnName,OBJPROP_WIDTH,width);
   ObjectSetInteger(ch_id,lnName,OBJPROP_BACK,back);
   ObjectSetInteger(ch_id,lnName,OBJPROP_SELECTABLE,selectable);
   ObjectSetInteger(ch_id,lnName,OBJPROP_SELECTED,selected);
   ObjectSetInteger(ch_id,lnName,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(ch_id,lnName,OBJPROP_ZORDER,z_order);
   return(true);
  }
//+------------------------------------------------------------------+
 
О графических объектах разговор что ли?
 
Dmitry Fedoseev #:
О графических объектах разговор что ли?

какие объекты ещё бывают ?

 
SanAlex #:

какие объекты ещё бывают ?

Неопознанные Летательные

 
Dmitry Fedoseev #:

Неопознанные Летательные

это как выглядит? и где можно это увидеть?

В поиске не чего не нашёл. Если только, что Вы имели ввиду НЛО ?

 
SanAlex #:

это как выглядит? и где можно это увидеть?

В поиске не чего не нашёл. Если только, что Вы имели ввиду НЛО ?

ООП он имел ввиду
 
Sergey Gridnev #:
ООП он имел ввиду

Для чего тогда вот эта часть фразы?

произвести некоторую обработку на графике