ObjectsTotal(OBJ_TRIANGLE)

 

Пишу 

   int i_ObjectsTotal = ObjectsTotal();
   int i_TotalTriangle   = ObjectsTotal(OBJ_TRIANGLE);

 В списке объектов вижу треугольники,

 но i_TotalTriangle = 0, всегда !

Пишу

   string gs_TriangleName[2];
   gs_TriangleName[0] = "";
   gs_TriangleName[1] = "";
   string gs_RectangleName   = "";
   
   int j = 0;
   for (int i = 0; i < i_ObjectsTotal; i++)
   {
      if (ObjectType(ObjectName(i)) == OBJ_TRIANGLE)
      {
         gs_TriangleName[j] = ObjectName(i);
         j++; 
      }
   }
   string gs_TriangleLeftName  = gs_TriangleName[0];
   string gs_TriangleRightName = gs_TriangleName[1];
   if (gs_TriangleLeftName != "")
   {
      Print("gs_TriangleLeftName=",gs_TriangleLeftName);
      Print("gs_TriangleRightName=",gs_TriangleRightName);
   }

 имена треугольников распечатываются...

треугольники рисуются всем известным индикатором ZUP_v92.ex4 

какие идеи ? 

Файлы:
zup_v92.ex4  381 kb
 
more:

Пишу 

 В списке объектов вижу треугольники,

 но i_TotalTriangle = 0, всегда !

Пишу

 имена треугольников распечатываются...

треугольники рисуются всем известным индикатором ZUP_v92.ex4 

какие идеи ? 

Да, есть такая фишка в новом MQL4 )))

Дело в том, что  у ObjectsTotal теперь существует перегруженная версия. Она по набору параметров до боли напоминает компилятору старую функцию, а в списке перегрузок идет первой. В итоге компилятор во многих случаях выбирает новую версию:

int  ObjectsTotal(
   long  chart_id,          // идентификатор графика
   int   sub_window=-1,     // индекс окна
   int   type=-1            // тип объекта
   );

 Получается, что Вы в первом параметре передаете не тип объекта, а ID чарта. Такого ID, скорее всего, нет. Вот и получаете 0 объектов.

Чтобы этого избежать, помогите компилятору выбрать нужный тип функции:

ObjectsTotal((int)OBJ_TRIANGLE);
 
Scriptong:

Да, есть такая фишка в новом MQL4 )))

Дело в том, что  у ObjectsTotal теперь существует перегруженная версия. Она по набору параметров до боли напоминает компилятору старую функцией, а в списке перегрузок идет первой. В итоге компилятор во многих случаях выбирает новую версию:

 Получается, что Вы в первом параметре передаете не тип объекта, а ID чарта. Такого ID, скорее всего, нет. Вот и получаете 0 объектов.

Чтобы этого избежать, помогите компилятору выбрать нужный тип функции:

 

Интересно и много таких тонкостей?
 
gfm73:
Интересно и много таких тонкостей?
Как и в любом другом деле)). Знания и умения приходят только с опытом. Просто прочитав документацию или учебник, профессионалом не стать.
 
Scriptong:
Как и в любом другом деле)). Знания и умения приходят только с опытом. Просто прочитав документацию или учебник, профессионалом не стать.

спасибо, друг...

но фактически это ведь ошибка в компиляторе... 

 
Scriptong:
Как и в любом другом деле)). Знания и умения приходят только с опытом. Просто прочитав документацию или учебник, профессионалом не стать.

 

Согласен, но все же, верно подметил  more это все же ошибка, а если это специфическая тонкость, то зачем писать одноименные функции и процедуры, а потом ломать голову как же правильно их использовать.

 
more:

спасибо, друг...

но фактически это ведь ошибка в компиляторе... 

Дело в том, что я уже сталкивался именно с этой проблемой и описывал в одной из тем, связанных с новостями о билдах МТ4 (не помню, в какой именно). Мне ответили, что это вовсе не ошибка. Все так и останется.

Чтобы избежать подобных ошибок в будущем, взял для себя правило: использовать те функции, которые совместимы с MQL5 (если они есть в MQL4, конечно). К примеру, все функции, связанные с построением графических объектов, начинаю с указания ID чарта.

 

P. S. Нашел, где писал об этом - https://forum.mql4.com/ru/65341/page47#1000196. Оказалось, что никто ничего не ответил, да и ситуация была обратная указанной. Поэтому подумал, что разработчики не признают это в качестве ошибки. Хотя, если так подумать, то при компиляции старых экспертов (до 600-го билда) получим ошибки выполнения.

 
Scriptong:

Дело в том, что я уже сталкивался именно с этой проблемой и описывал в одной из тем, связанных с новостями о билдах МТ4 (не помню, в какой именно). Мне ответили, что это вовсе не ошибка. Все так и останется.

Чтобы избежать подобных ошибок в будущем, взял для себя правило: использовать те функции, которые совместимы с MQL5 (если они есть в MQL4, конечно). К примеру, все функции, связанные с построением графических объектов, начинаю с указания ID чарта.

 

P. S. Нашел, где писал об этом - https://forum.mql4.com/ru/65341/page47#1000196. Оказалось, что никто ничего не ответил, да и ситуация была обратная указанной. Поэтому подумал, что разработчики не признают это в качестве ошибки. Хотя, если так подумать, то при компиляции старых экспертов (до 600-го билда) получим ошибки выполнения.

 

В любом случае спасибо за информацию. 

 
Scriptong:

Дело в том, что я уже сталкивался именно с этой проблемой и описывал в одной из тем, связанных с новостями о билдах МТ4 (не помню, в какой именно). Мне ответили, что это вовсе не ошибка. Все так и останется.

Чтобы избежать подобных ошибок в будущем, взял для себя правило: использовать те функции, которые совместимы с MQL5 (если они есть в MQL4, конечно). К примеру, все функции, связанные с построением графических объектов, начинаю с указания ID чарта.

 

P. S. Нашел, где писал об этом - https://forum.mql4.com/ru/65341/page47#1000196. Оказалось, что никто ничего не ответил, да и ситуация была обратная указанной. Поэтому подумал, что разработчики не признают это в качестве ошибки. Хотя, если так подумать, то при компиляции старых экспертов (до 600-го билда) получим ошибки выполнения.

проблема в том, что и эта версия в МТ4 не работает:

 int i_TotalTriangle   = ObjectsTotal(ChartID(),0,OBJ_TRIANGLE);

 
more:

проблема в том, что и эта версия в МТ4 не работает:

 int i_TotalTriangle   = ObjectsTotal(ChartID(),0,OBJ_TRIANGLE);

Проверил такой код:

   Alert("Треугольников old = ", ObjectsTotal((int)OBJ_TRIANGLE));
   Alert("Треугольников new = ", ObjectsTotal(0, 0, OBJ_TRIANGLE));

 Результат:

 

 
Scriptong:

Проверил такой код:

 Результат:

 

спасибо, буду у себя смотреть...