Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2275

 

Уважаемые, есть код

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(_UninitReason!=3){
   ObjectsDeleteAll(0,"C_Label");
   EventKillTimer();}
   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(ObjectFind(0,"C_Label")!=0)
     {
      if(ArrayResize(m_pixels,200*200)>0)
        {
         ArrayInitialize(m_pixels,ColorToARGB(C'50,50,50',175));
         if(ResourceCreate("::C_Label",m_pixels,200,200,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
           {
            if(ObjectCreate(0,"C_Label",OBJ_BITMAP_LABEL,0,0,0))
              {
               ObjectSetInteger(0,"C_Label",OBJPROP_XDISTANCE,2);
               ObjectSetInteger(0,"C_Label",OBJPROP_YDISTANCE,2);
               ObjectSetString(0,"C_Label",OBJPROP_BMPFILE,"::C_Label");
               ObjectSetInteger(0,"C_Label",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
               ObjectSetInteger(0,"C_Label",OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
              }
           }
        }
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

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

Билды одинаковые, брокеры разные.

Подскажите, пожалуйста, как это вылечить?

 
Tretyakov Rostyslav #:

Уважаемые, есть код

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

Билды одинаковые, брокеры разные.

Подскажите, пожалуйста, как это вылечить?

может так?

            if(ObjectCreate(0,"C_Label",OBJ_BITMAP_LABEL,0,0,0))
              {
               ObjectSetInteger(0,"C_Label",OBJPROP_XDISTANCE,20);
               ObjectSetInteger(0,"C_Label",OBJPROP_YDISTANCE,20);
               ObjectSetString(0,"C_Label",OBJPROP_BMPFILE,"::C_Label");
               ObjectSetInteger(0,"C_Label",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
               ObjectSetInteger(0,"C_Label",OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
               ObjectSetInteger(0,"C_Label",OBJPROP_SELECTABLE,true);
               ObjectSetInteger(0,"C_Label",OBJPROP_SELECTED,false);
              }
           }
 
Vitaly Muzichenko #:

может так?

Я не это имел ввиду?

Tretyakov Rostyslav #:
в одном терминале при смене ТФ или символа он остается на месте, а другом удаляется и создается в начальных координатах.
 
Tretyakov Rostyslav #:

Я не это имел ввиду?

проверка времени компиляции есть в подопытном индикаторе?, что-бы убедиться, что одна версия во всех терминалах

например в Терминале если открыты свойства эксперта или индикатора, то компилировать в этот момент его бесполезно

Print("Date compile - ",__DATETIME__," v",EXPERT_VERSION);

2023.09.24 15:11:19.795 NL_Multi (EURUSD,H1)    Date compile - 2023.09.22 18:26:40 v1.23
 
lynxntech #:

проверка времени компиляции есть в подопытном индикаторе?, что-бы убедиться, что одна версия во всех терминалах

например в Терминале если открыты свойства эксперта или индикатора, то компилировать в этот момент его бесполезно

Возможно я не правильно задал вопрос...

У меня в одном терминале срабатывает

if(_UninitReason!=3)
а в другом нет. Это можно как-то вылечить?
 
Tretyakov Rostyslav #:

Возможно я не правильно задал вопрос...

У меня в одном терминале срабатывает

а в другом нет. Это можно как-то вылечить?

на ум приходит, только - в одном из терминалов какой-то индикатор грохает все объекты без разбору и при старте не находит

 
lynxntech #:

на ум приходит, только - в одном из терминалов какой-то индикатор грохает все объекты без разбору и при старте не находит

"Семен Семеныч"))))

Благодарю Вас.

 
Tretyakov Rostyslav #:

Возможно я не правильно задал вопрос...

У меня в одном терминале срабатывает

а в другом нет. Это можно как-то вылечить?

Когда-то обсуждался вопрос очерёдности выполнения OnInit() и OnDeInit() и выяснили, что в индикаторах при переключении ТФ может сначала отработать  OnInit() для индикатора с новым ТФ, а потом OnDeInit() «старого ТФ». Вот и вся беда отсюда.

 
Alexey Viktorov #:

Когда-то обсуждался вопрос очерёдности выполнения OnInit() и OnDeInit() и выяснили, что в индикаторах при переключении ТФ может сначала отработать  OnInit() для индикатора с новым ТФ, а потом OnDeInit() «старого ТФ». Вот и вся беда отсюда.

это скорее всего было про хендлы, которые не удаляли при закрытии, объекты тут не причем

 
Alexey Viktorov #:

Когда-то обсуждался вопрос очерёдности выполнения OnInit() и OnDeInit() и выяснили, что в индикаторах при переключении ТФ может сначала отработать  OnInit() для индикатора с новым ТФ, а потом OnDeInit() «старого ТФ». Вот и вся беда отсюда.

У меня из-за копипаста получился одинаковый префикс в двух индикаторах...моя невнимательность.

Причина обращения: