Исправьте индикатор

 

Добрый вечер, прошу вас добавить в индикатор функцию при которой бы кнопка(картинка) не меняла своих свойств при смене ТФ
Сейчас индикатор работает так:
Когда вы зальёте индикатор кнопка будет зеленого цвета, далее нажимаете 1 раз, она становится красная, еще 1 раз зеленая и показывается меню, нажимаем еще раз(красная)-->меняем ТФ и она почему то зеленая, хотя была на красном
КОГДА кнопка красная и если поменять ТФ она становится зеленой, а нужно чтобы она оставалась красная

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                                            Copyright 2019, Bdrby |
//|                                                https://www.ya.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Bdrby"
#property link      "https://www.ya.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#resource "Button1.bmp"
#resource "Button2.bmp"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Button(0,"LOGO",0,30,30,"::Button1.bmp","::Button2.bmp",13,13,0,0,false,CORNER_LEFT_UPPER,ANCHOR_CENTER,clrRed,STYLE_SOLID,1,false,false,true,0);

   for(int i=0;i<10;i++)
     {
      Button(0,"check"+(string)i,0,7000,7000,"::Button1.bmp","::Button2.bmp",13,13,0,0,false,CORNER_LEFT_UPPER,ANCHOR_CENTER,clrRed,STYLE_SOLID,1,false,false,true,0);
     }
//---
   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 value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
 
      for(int i=0;i<30;i++)
         if(!ObjectGetInteger(ChartID(),"LOGO",OBJPROP_STATE))
           {
            ObjectSetInteger(ChartID(),"check"+(string)i,OBJPROP_XDISTANCE,30);
            ObjectSetInteger(ChartID(),"check"+(string)i,OBJPROP_YDISTANCE,60+14*i);
           }
      else
        {
         ObjectSetInteger(ChartID(),"check"+(string)i,OBJPROP_XDISTANCE,7000);
         ObjectSetInteger(ChartID(),"check"+(string)i,OBJPROP_YDISTANCE,7000);
        }

     }
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(ChartID(),"LOGO");

  }  
//+------------------------------------------------------------------+
bool Button(const long              chart_ID=0,               // ID графика 
                       const string            name="BmpLabel",          // имя метки 
                       const int               sub_window=0,             // номер подокна 
                       const int               x=0,                      // координата по оси X 
                       const int               y=0,                      // координата по оси Y 
                       const string            file_on="",               // картинка в режиме On 
                       const string            file_off="",              // картинка в режиме Off 
                       const int               width=0,                  // X-координата области видимости 
                       const int               height=0,                 // Y-координата области видимости 
                       const int               x_offset=10,              // смещение области видимости по X 
                       const int               y_offset=10,              // смещение области видимости по Y 
                       const bool              state=false,              // нажата/отжата 
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки  
                       const color             clr=clrRed,               // цвет рамки при выделении 
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // стиль линии при выделении 
                       const int               point_width=1,            // размер точки перемещения 
                       const bool              back=false,               // на заднем плане 
                       const bool              selection=false,          // выделить для перемещений 
                       const bool              hidden=true,              // скрыт в списке объектов 
                       const long              z_order=0)                // приоритет на нажатие мышью 
  {
//--- сбросим значение ошибки 
   ResetLastError();
//--- создадим графическую метку 
 

   if(ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {

      //--- установим картинки для режимов On и Off 
      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on);

      ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off);

      //--- установим координаты метки 
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      //--- установим область видимости изображения; если значения ширины или высоты 
      //--- больше значений ширины и высоты (соответственно) исходного изображения, то 
      //--- оно не рисуется; если значения ширины и высоты меньше размеров изображения, 
      //--- то рисуется та его часть, которая соответствует этим размерам 
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      //--- установим, какая часть изображения должна показываться в области видимости 
      //--- по умолчанию это левая верхняя область изображения; значения позволяют 
      //--- произвести сдвиг от этого угла и отобразить другую часть изображения 
      ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
      ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
      //--- установим, в каком сотоянии находится метка (нажатом или отжатом) 
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      //--- установим угол графика, относительно которого будут определяться координаты точки 
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим способ привязки 
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      //--- установим цвет рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим стиль линии рамки при включенном режиме выделения объекта 
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      //--- установим размер точки привязки, с помощью которой можно перемещать объект 
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
      //--- отобразим на переднем (false) или заднем (true) плане 
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (true) или отключим (false) режим перемещения метки мышью 
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      //--- установим приоритет на получение события нажатия мыши на графике 
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      //--- успешное выполнение 
      return(true);
     }
   return false;
  }
//+------------------------------------------------------------------+
 
vebster005:

Добрый вечер, прошу вас добавить в индикатор функцию при которой бы кнопка(картинка) не меняла своих свойств при смене ТФ
Сейчас индикатор работает так:
Когда вы зальёте индикатор кнопка будет зеленого цвета, далее нажимаете 1 раз, она становится красная, еще 1 раз зеленая и показывается меню, нажимаем еще раз(красная)-->меняем ТФ и она почему то зеленая, хотя была на красном
КОГДА кнопка красная и если поменять ТФ она становится зеленой, а нужно чтобы она оставалась красная

Проблему решил, можно закрывать

 
Не решил, пожалуйста помогите
 

Когда меняется ТФ, OnInit повторно выполняется. А там прописан clrRed.

То есть нужно проверить: если кнопка существует - ничего не менять, пропустить инициализацию кнопки. 

 
Igor Zakharov:

Когда меняется ТФ, OnInit повторно выполняется. А там прописан clrRed.

То есть нужно проверить: если кнопка существует - ничего не менять, пропустить инициализацию кнопки. 

Могли бы вы более точнее написать? Там нету кнопки как таковой, там используются 2 картинки:

Button1.bmp
Button2.bmp

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

 
Суть та же: повторно запущенный OnInit после смены ТФ, сбрасывает всё на начальное состояние.
 
Igor Zakharov:
Суть та же: повторно запущенный OnInit после смены ТФ, сбрасывает всё на начальное состояние.

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

 
Igor Zakharov:
Суть та же: повторно запущенный OnInit после смены ТФ, сбрасывает всё на начальное состояние.

пробывал в калькулятор перенести всё, ничего не изменилось

 
vebster005:

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

Ищите в документации причины деинициализации.

А умный движок форума вам помог найти. Сам поставил ссылку на раздел документации.

 
Alexey Viktorov:

Ищите в документации причины деинициализации.

А умный движок форума вам помог найти. Сам поставил ссылку на раздел документации.

я перепробывал все вариаты удаления, не получается!!!!

 
vebster005:

я перепробывал все вариаты удаления, не получается!!!!

я вам ответил в вашей сторой теме с тем же вопросом
https://www.mql5.com/ru/forum/301045

Убрать смену показателей при смене ТФ
Убрать смену показателей при смене ТФ
  • 2019.01.27
  • www.mql5.com
Добрый вечер, прошу вас добавить в индикатор функцию при которой бы кнопка(картинка) не меняла своих свойств при смене ТФ Сейчас индикатор работает...
Причина обращения: