Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?
Можно, конечно.
Или для каждого объекта надо свой обработчик делать?
Для каждого типа объекта - свой. Точнее, делается один общий обработчик, который сначала сохраняет параметры, используемые всеми типами объектов, а потом, в зависимости от типа объекта, дополнительно сохраняются параметры, соответствующие типу объекта.
Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?
Или для каждого объекта надо свой обработчик делать?
Вот например - Тот же объект удалится и появится вновь. (Функция работает как в мт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); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Можно ли сделать универсальный код для клонирования объектов, а именно необходимо получить все параметры объекта, удалит объект, произвести некоторую обработку на графике, воссоздать объект в первоначальном виде?
Или для каждого объекта надо свой обработчик делать?