Пожалуйста помогите с обновлением текста

 

Добрый день, пожалуйста помогите разобраться
В общем в индикаторе выводится кнопка, (ПЕРЕЙДИТЕ НА М1)по нажатию на которую появляются полосы С ТЕКСТОМ. 

Задача состоит в том что данные хай и лоу минуты рассчитываются в настоящее время,а так же средний атр минуты (периуд 10 минут)
и когда наступил новый бар(тобишь настала новая минута) данные должны обновляться(удаляться старые полоски/текст и рисоваться новые УЖЕ ПО НОВЫМ ДАННЫМ)

Мне подсказали функцию что когда наступает новый бар возвращается true в коде она - isNewBar

так вот, проблема заключается в том что я добился обновления зон(полосок) но! текст не обновляется, хотя процедура точно такая же, я уже голову сломал почему так????
прошу помочь вот с этим, а так же хотел бы узнать ответы на:
1) правильная ли структура(можно ли как то сократить код)
2) обновление происходит с каждой свечой/баром/минутой, а именно меняются хай, лоу и средний атр каждый раз?


ПОЛНЫЙ КОД:

#property copyright "Copyright 2017"
#property link      "http://www.ya.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   PutButton("KNOPKA",20,50,"Kropo4ka");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,0,OBJ_RECTANGLE);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- создадим прямоугольник по заданным координатам
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- установим цвет прямоугольника
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| 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(!ObjectGetInteger(0,"KNOPKA",OBJPROP_STATE,false))
           {
                  if(isNewBar(1) == false)
                  {
                  ObjectDelete("ТНмин");
                  ObjectDelete("ТНмин2");
                  ObjectDelete("мин");
                  ObjectDelete("мин2");
                  }
           }
         else
           {
                  if(isNewBar(1) == true)
                  {
                  
                  datetime t2=0;
                  double Hi=0,Lo=0,ATRM=0;
                  t2=iTime(NULL,PERIOD_M1,0);
                  Hi=iHigh(NULL,PERIOD_M1,0);
                  Lo=iLow(NULL,PERIOD_M1,0);
                  ATRM = (NormalizeDouble(iATR(NULL,PERIOD_M1,10,0)/_Point,0));
                  
                  DrawTXT("мин","текст 1",t2,Lo+(ATRM*_Point),Black);
                  DrawTXT("мин2","текст 2",t2,Hi-(ATRM*_Point)/100*90,Black);
                  PutRect("ТНмин",t2+60,Lo+ATRM*_Point,t2,Lo+(ATRM*_Point)/100*90,Black);
                  PutRect("ТНмин2",t2+60,Hi-ATRM*_Point,t2,Hi-(ATRM*_Point)/100*90,Black);  
                  }
           }
         //+Comment(ATRM*_Point);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CLICK)
     {     
      if(ObjectFind(0,"KNOPKA")==0)
         if(GetState("KNOPKA"))
           {

                  datetime t2=0;
                  double Hi=0,Lo=0,ATRM=0;
                  t2=iTime(NULL,PERIOD_M1,0);
                  Hi=iHigh(NULL,PERIOD_M1,0);
                  Lo=iLow(NULL,PERIOD_M1,0);
                  ATRM = (NormalizeDouble(iATR(NULL,PERIOD_M1,10,0)/_Point,0));
                  
                  DrawTXT("мин","текст 1",t2,Lo+(ATRM*_Point),Black);
                  DrawTXT("мин2","текст 2",t2,Hi-(ATRM*_Point)/100*90,Black);
               PutRect("ТНмин",t2+60,Lo+ATRM*_Point,t2,Lo+(ATRM*_Point)/100*90,Black);
               PutRect("ТНмин2",t2+60,Hi-ATRM*_Point,t2,Hi-(ATRM*_Point)/100*90,Black); 
           }
           else
           {
               ObjectDelete("мин");
               ObjectDelete("мин2");
               ObjectDelete("ТНмин");
               ObjectDelete("ТНмин2");
           }
     }       
  }
  
  
void PutButton(string name,int x,int y,string text)
  {
   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,20);
   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,9);
//--- установим цвет текста
   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,false);
  }  

//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar(int tf)
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
   
//--- текущее время
   datetime lastbar_time=SeriesInfoInteger(_Symbol,tf,SERIES_LASTBAR_DATE);

//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }

//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }


//+---------------------Кнопки показа окн----------------------------+
bool GetState(string aName)
  {
   long value=0;
   ObjectGetInteger(0,aName,OBJPROP_STATE,0,value);
   return  (bool)value;
  }
  
void DrawTXT(string name,string text,datetime time,double price,color clr,ENUM_ANCHOR_POINT ANCHOR_=ANCHOR_LEFT_LOWER,int size=8)
  {
      ObjectCreate(0,name,OBJ_TEXT,0,time,price);
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetString(0,name,OBJPROP_FONT,"Comic Sans MS");
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
  }
 
vebster005:

Добрый день, пожалуйста помогите разобраться
В общем в индикаторе выводится кнопка, (ПЕРЕЙДИТЕ НА М1)по нажатию на которую появляются полосы С ТЕКСТОМ. 

Задача состоит в том что данные хай и лоу минуты рассчитываются в настоящее время,а так же средний атр минуты (периуд 10 минут)
и когда наступил новый бар(тобишь настала новая минута) данные должны обновляться(удаляться старые полоски/текст и рисоваться новые УЖЕ ПО НОВЫМ ДАННЫМ)

Мне подсказали функцию что когда наступает новый бар возвращается true в коде она - isNewBar

так вот, проблема заключается в том что я добился обновления зон(полосок) но! текст не обновляется, хотя процедура точно такая же, я уже голову сломал почему так????
прошу помочь вот с этим, а так же хотел бы узнать ответы на:
1) правильная ли структура(можно ли как то сократить код)
2) обновление происходит с каждой свечой/баром/минутой, а именно меняются хай, лоу и средний атр каждый раз?


ПОЛНЫЙ КОД:

void DrawTXT(string name,string text,datetime time,double price,color clr,ENUM_ANCHOR_POINT ANCHOR_=ANCHOR_LEFT_LOWER,int size=8)
  {

     ObjectDelete(0,name);

      ObjectCreate(0,name,OBJ_TEXT,0,time,price);
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetString(0,name,OBJPROP_FONT,"Comic Sans MS");
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
  }

 
Renat Akhtyamov:

void DrawTXT(string name,string text,datetime time,double price,color clr,ENUM_ANCHOR_POINT ANCHOR_=ANCHOR_LEFT_LOWER,int size=8)
  {

     ObjectDelete(0,name);

      ObjectCreate(0,name,OBJ_TEXT,0,time,price);
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetString(0,name,OBJPROP_FONT,"Comic Sans MS");
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
  }

Либо устанавливать цену и время после создания
 
Aleksei Beliakov:
Либо устанавливать цену и время после создания

Спасибо

 
Renat Akhtyamov:

void DrawTXT(string name,string text,datetime time,double price,color clr,ENUM_ANCHOR_POINT ANCHOR_=ANCHOR_LEFT_LOWER,int size=8)
  {

     ObjectDelete(0,name);

      ObjectCreate(0,name,OBJ_TEXT,0,time,price);
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetString(0,name,OBJPROP_FONT,"Comic Sans MS");
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
  }

Спасибо помогли