Отображение индикатора и объектов на выборочных таймреймах - страница 2

 
Vitaliy Kuznetsov #:

Тут похоже на гифке МТ5. Речь сейчас про МТ4

Вот пример из кодобазы (и таких реально много) - https://www.mql5.com/ru/code/30818

Графика не исчезает


А вы можете в этом г…коде показать функцию OnDeInit() где удаляются объекты созданные индикатором?

Вместо того, чтобы разобраться вы кидаете сцильки на это … © «не сказать ещё хужей»

В mql4 это работает точно так же.
 
Alexey Viktorov #:

А вы можете в этом г…коде показать функцию OnDeInit() где удаляются объекты созданные индикатором?

Вместо того, чтобы разобраться вы кидаете сцильки на это … © «не сказать ещё хужей»

В mql4 это работает точно так же.

Может не лучший пример нашёл, но предложенный вариант - не решение

 
Vitaliy Kuznetsov #:

Может не лучший пример нашёл, но предложенный вариант - не решение

Да что-же ты такой упёртый…

Это сделано на "скорую руку". Оставшиеся объекты создаются в функции init потому и отображаются.

 
Alexey Viktorov #:


На гифке индикатор создаёт одну вертикальную линию и одну горизонтальную.


В OnCalculate?

 
PapaYozh #:


В OnCalculate?

Да.

 

Ну что-ж. Заставьте линию исчезнуть. Исходник в прикреплении

//+------------------------------------------------------------------+
//|                                                     Test_CTR.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   VLineCreate();
return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+
//| 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[]){

return(rates_total);}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   ObjectDelete(0,"VLine");
}

//+------------------------------------------------------------------+ 
//| Создает вертикальную линию                                       | 
//+------------------------------------------------------------------+ 

void VLineCreate(){
   const long            chart_ID=0;        // ID графика 
   const string          name="VLine";      // имя линии 
   const int             sub_window=0;      // номер подокна 
   datetime              time=iTime(NULL,0,0);            // время линии 
   const color           clr=clrRed;        // цвет линии 
   const ENUM_LINE_STYLE style=STYLE_SOLID; // стиль линии 
   const int             width=0;           // толщина линии 
   const bool            back=true;         // на заднем плане 
   const bool            selection=false;   // выделить для перемещений 
   const bool            hidden=false;      // скрыт в списке объектов 
   const long            z_order=0;         // приоритет на нажатие мышью 

   if(ObjectFind(chart_ID,name)==(-1)){
      if(ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)){
         ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
         ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
         ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
         ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
         ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
         ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
         ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
         ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      }
   }
} 
Файлы:
Test_CTR.mq4  7 kb
 
Vitaliy Kuznetsov #:

Тут похоже на гифке МТ5. Речь сейчас про МТ4

Вот пример из кодобазы (и таких реально много) - https://www.mql5.com/ru/code/30818

Графика не исчезает


Это индикатор не удалят объекты даже при отсоединении его от графика. 

Смысл в том, что если показ на таймфрейме отключен, то на нем OnCalculkate() не вызывается. 

Вот от этого надо отталкиваться. В ините и деините надо удалять все, что индикатор мог создать.

А создавать объекты в OnCalculate при prev_calculated==0 и с проверкой их существования.

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

 
Vitaliy Kuznetsov #:

Ну что-ж. Заставьте линию исчезнуть. Исходник в прикреплении


Как-то так, но я не проверял.

//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_chart_window

bool vlineCreated = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   //VLineCreate();
   vlineCreated = false;
return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+
//| 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(!vlineCreated) {
      VLineCreate();
   }
return(rates_total);}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   ObjectDelete(0,"VLine");
   vlineCreated = false;
}

//+------------------------------------------------------------------+ 
//| Создает вертикальную линию                                       | 
//+------------------------------------------------------------------+ 

void VLineCreate(){
   const long            chart_ID=0;        // ID графика 
   const string          name="VLine";      // имя линии 
   const int             sub_window=0;      // номер подокна 
   datetime              time=iTime(NULL,0,0);            // время линии 
   const color           clr=clrRed;        // цвет линии 
   const ENUM_LINE_STYLE style=STYLE_SOLID; // стиль линии 
   const int             width=0;           // толщина линии 
   const bool            back=true;         // на заднем плане 
   const bool            selection=false;   // выделить для перемещений 
   const bool            hidden=false;      // скрыт в списке объектов 
   const long            z_order=0;         // приоритет на нажатие мышью 

   if(ObjectFind(chart_ID,name)==(-1)){
      if(ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)){
         ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
         ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
         ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
         ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
         ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
         ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
         ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
         ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
         vlineCreated = true;
      }
   } else {
      vlineCreated = true;
   }
} 
 
Vitaliy Kuznetsov #:

Ну что-ж. Заставьте линию исчезнуть. Исходник в прикреплении

Засекайте время.

 
Исходник скину в следующем сообщении.
Файлы:
Test_CTR.ex4  7 kb
Причина обращения: