Странное поведение панели.

 

Добрый день.

Панель мультивалютная, мультитаймфреймовая.

Ниже код который генерирует текст

extern int ATR_Period=20;
extern double ATR_Multiplier=1.4;
extern int Deviation_Period=20;
extern ENUM_MA_METHOD Deviation_Method=0;
extern ENUM_APPLIED_PRICE Deviation_Price=0;
extern double Deviation_Multiplier=2;
extern int Text_Digits=2;
string SetTextSquise(string symbol,ENUM_TIMEFRAMES tf)
{
  string text="";
  int bars=iBars(symbol,tf);
  double atr=5, dev=1;
  return("5");
  if(bars>ATR_Period)  atr=iATR(symbol,tf,ATR_Period,0)*ATR_Multiplier;
  else atr=0;
  if(bars>Deviation_Period) dev=iStdDev(symbol,tf,Deviation_Period,0,Deviation_Method,Deviation_Price,0)*Deviation_Multiplier;
  double value=0;
  if(dev!=0) value=atr/dev;
  text=DoubleToStr(value,Text_Digits);
  return(text);
}

Если в параметрах подать 14 инструментов при заблокированном операторе return("5"); получется следующая картинка :

если добавить на один инструмент больше то рисуется табличка с одним инструментом больше:

но когда срабатывает таймер все исчезает :

Если отблокировать оператор return("5");  то картинка следующая :

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

Спасибо.

 
Piotr Storozenko:

Добрый день.

Панель мультивалютная, мультитаймфреймовая.

Ниже код который генерирует текст

Если в параметрах подать 14 инструментов при заблокированном операторе return("5"); получется следующая картинка :

если добавить на один инструмент больше то рисуется табличка с одним инструментом больше:

но когда срабатывает таймер все исчезает :

Если отблокировать оператор return("5");  то картинка следующая :

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

Спасибо.

Как вариант, Я бы собрал количество доступных баров по всем символам в массив, далее выбрал минимальное значение с массива и его уже использовал для int bars=MinCount;

P.S. Ну и конечно проверка на запрашиваемое значение, может нужно искать по 500 барам, а минимальное получилось 550, то через сравнение используем 500, ну а если запросили 500, но по одному символу всего 480, то и используем для всех:  int bars= 480;