Вывод текста(например) на экран при загрузки индикатора

 

Здравствуйте, создал изначально нажатую кнопку button с показом содержимого в Oninit .
Если отжать кнопку и сменить ТФ содержимое заново отобразится на экране.
В документации сказано что при смене ТФ oninit по новой загрузит. 
Вопрос, где изначально нужно создать кнопку и содержимое в моем случае?
Спасибо

 
vebster005:

Здравствуйте, создал изначально нажатую кнопку button с показом содержимого в Oninit .
Если отжать кнопку и сменить ТФ содержимое заново отобразится на экране.
В документации сказано что при смене ТФ oninit по новой загрузит. 
Вопрос, где изначально нужно создать кнопку и содержимое в моем случае?
Спасибо

не удаляйте кнопку в OnDeinit или в начале OnInit. Не пересоздавайте если она уже есть.

она сохраняется в шаблоне. Вместе со всеми своими property и состояниями (нажата/отпущена)

при первом запуске индикатора на чарт - кнопки в шаблоне нет, вы её создаёте; при следующих - она уже есть, вы её читаете.

 
Maxim Kuznetsov #:

не удаляйте кнопку в OnDeinit или в начале OnInit. Не пересоздавайте если она уже есть.

она сохраняется в шаблоне. Вместе со всеми своими property и состояниями (нажата/отпущена)

при первом запуске индикатора на чарт - кнопки в шаблоне нет, вы её создаёте; при следующих - она уже есть, вы её читаете.

В  OnDeinit  и так не удаляю

Удаkение происходит только при повторном нажатии на кнопку тобишь в OncharEvent
Далее, и так проверяю есть ли объект, если нет - создаю

2-ю и 3-ю строчку не понял от слова совсем.

Если вы про вариант со скрытия с поля видимости то он не подходит (хоть и работает)

         ObjectSetInteger(0,"primer",OBJPROP_YDISTANCE,7000);
 
vebster005 #:

В  OnDeinit  и так не удаляю

Удаkение происходит только при повторном нажатии на кнопку тобишь в OncharEvent
Далее, и так проверяю есть ли объект, если нет - создаю

2-ю и 3-ю строчку не понял от слова совсем.

Если вы про вариант со скрытия с поля видимости то он не подходит (хоть и работает)

Обрати внимание на

OBJPROP_TIMEFRAMES

Видимость объекта на таймфреймах

набор флагов flags


Это гораздо полезнее чем перемещение за пределы монитора.

Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
 
Alexey Viktorov #:

Обрати внимание на

OBJPROP_TIMEFRAMES

Видимость объекта на таймфреймах

набор флагов flags


Это гораздо полезнее чем перемещение за пределы монитора.

Я прощу прощения, немного не понял что вы советуете, по нажатию на кнопку у меня выводятся примерно 20 кнопок, 20 ценовых меток и подобное

вы советуете мне поставить на всех объектах - невидимость при всех ТФ?

Пожалуйста могли бы вы чуточку больше объяснить

Я отжимаю кнопку, меняю ТФ а у меня она снова нажата и показывается содержимое) хотя фиксацию положения сделал через глобальную переменную

 
Сделал простой пример:

Как исправить?
#property copyright "Copyright 2022"
#property link      "https://www.ya.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window


int nazat = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
      PutButton("BUTON1",33,33,"BUTON1", true);
      

      if(ObjectFind("BUTON2")==0)
      {
         if (nazat == 1) {
            PutButton("BUTON2",33,103,"BUTON2", true); 
         }
      }

      
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text,bool state)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
   ObjectSetInteger(0,name,OBJPROP_STATE,state); 
  }
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {

   if(ObjectGetInteger(0,"BUTON1",OBJPROP_STATE)==true)
      {
         nazat = 1;
         PutButton("BUTON2",33,103,"BUTON2", false);  
      }
   else
      {
            nazat = 0;
         ObjectDelete("BUTON2");
      }   

  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
 
vebster005 #:
Сделал простой пример:

Как исправить?

я-же написал выше - ПРОВЕРЯМ наличие кнопки.

И только если её нет - создаём и оформляем. Вы оформляете в любом случае

 
Maxim Kuznetsov #:

я-же написал выше - ПРОВЕРЯМ наличие кнопки.

И только если её нет - создаём и оформляем. Вы оформляете в любом случае

Спасибо за указание) Сделал - работает.
Если не ошибаюсь вы или Alexey Viktorov писали в прошлых постах что проверка наличия объекта, как то тормозит индикатор или же сам мт4
имеется ввиду что если у меня 30 кнопок и объектов что использовать такую проверку не лучшая идея. Если же это всё же так, то как еще можно сделать?

 
vebster005 #:

Спасибо за указание) Сделал - работает.
Если не ошибаюсь вы или Alexey Viktorov писали в прошлых постах что проверка наличия объекта, как то тормозит индикатор или же сам мт4
имеется ввиду что если у меня 30 кнопок и объектов что использовать такую проверку не лучшая идея. Если же это всё же так, то как еще можно сделать?

"скорость нужна при ловле блох" :-)

внутри OnTick,OnChartEvent,OnCalculate - да, там нужно минимизировать использование таких проверок. Там чем раньше функция завершится тем лучше работает итоговый советник. И в них вы априори знаете есть такой объёкт или нет. Вы его можете запомнить

а в OnInit - там другие требования и обстановка. Вам там не важна скорость, важнее надёжность