Вопросы по коду. - страница 8

 
gnesnyi #:

Алексей, спасибо! В документации этого нюанса нет.

Обожаю писать код - ломаешь голову целый день, потом добавил два слова и счастлив как ребенок:)

Как же нет, если вот он:

ObjectName

Возвращает имя объекта по порядковому номеру в списке объектов.

string ObjectName(
int object_index // номер в списке объектов
);

Параметры

object_index

[in] Порядковый номер в списке объектов. Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().



https://docs.mql4.com/ru/objects/objectname

Видите, тут ObjestsTotal без параметров? 

ObjectName - Графические объекты - Справочник MQL4
ObjectName - Графические объекты - Справочник MQL4
  • docs.mql4.com
ObjectName - Графические объекты - Справочник MQL4
 
PapaYozh #:

Как же нет, если вот он:

ObjectName

Возвращает имя объекта по порядковому номеру в списке объектов.

string ObjectName(
int object_index // номер в списке объектов
);

Параметры

object_index

[in] Порядковый номер в списке объектов. Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().



https://docs.mql4.com/ru/objects/objectname

Видите, тут ObjestsTotal без параметров? 

Именно этот вариант  ObjectName() и не возвращает имя объекта если количество объектов получено по типу

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

А вот второго варианта  ObjectName() в документации mql4 нету.

 
Alexey Viktorov #:

Именно этот вариант  ObjectName() и не возвращает имя объекта если количество объектов получено по типу

А вот второго варианта  ObjectName() в документации mql4 нету.

Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().


ObjectTotal, как можно заметить, без параметров.

 
PapaYozh #:

Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().


ObjectTotal, как можно заметить, без параметров.

Но есть ещё и с параметрами даже в документации mql4

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

именно этот вариант был использован в проблемном коде в паре ObjectName(i) без других параметров.. 

Конечно можно было сказать типа, «не заморачивай голову пятёркой…» и всё будет работать… Но у меня иной подход и я советовал использовать функции mql5. А вперемешку они не всегда работают.

Получилось так, что вы посоветовали тот вариант который был изначально с проблемой.

ObjectsTotal - Графические объекты - Справочник MQL4
ObjectsTotal - Графические объекты - Справочник MQL4
  • docs.mql4.com
ObjectsTotal - Графические объекты - Справочник MQL4
 
Alexey Viktorov #:

Но есть ещё и с параметрами даже в документации mql4

именно этот вариант был использован в проблемном коде в паре ObjectName(i) без других параметров.. 

Конечно можно было сказать типа, «не заморачивай голову пятёркой…» и всё будет работать… Но у меня иной подход и я советовал использовать функции mql5. А вперемешку они не всегда работают.

Получилось так, что вы посоветовали тот вариант который был изначально с проблемой.

Опять Вы начинаете морочить голову. Я посоветовал обратиться к справке и увидеть, что надо получать количество объектов через ObjectsTotal() БЕЗ ПАРАМЕТРОВ.

 
PapaYozh #:

Опять Вы начинаете морочить голову. Я посоветовал обратиться к справке и увидеть, что надо получать количество объектов через ObjectsTotal() БЕЗ ПАРАМЕТРОВ.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы по коду.

Alexey Viktorov, 2022.05.17 16:12

Но есть ещё и с параметрами даже в документации mql4

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

именно этот вариант был использован в проблемном коде в паре ObjectName(i) без других параметров.. 

Конечно можно было сказать типа, «не заморачивай голову пятёркой…» и всё будет работатьНо у меня иной подход и я советовал использовать функции mql5. А вперемешку они не всегда работают.

Получилось так, что вы посоветовали тот вариант который был изначально с проблемой.

Я нигде не сказал, что ваш вариант не будет работать, но лучше привыкать к новому языку. Благо есть возможность использовать mql5 при написании на mql4.


зы: Только представьте, что объектов на графике стопицот, а нужных только три. И пользуясь функциями mql4 надо будет в цикле перебирать 100500 объектов, вместо трёх пользуясь функциями mql5. Ну ведь очевидная выгода при незначительном напряжении мозга…
 

Не могу решить вот такую задачу:

Требуется найти на графике объекты определенного цвета и удалить их все.

for(int i=0;  i<ObjectsTotal(); i++) {                                        

                     if(ObjectGet(ObjectName(i), OBJPROP_COLOR)==clrDodgerBlue) { 

                        Print(" Имя объекта - ", ObjectName(i));                    

                        ObjectDelete(0,ObjectName(i));

                        }

                  }  

Через такой циклы удаляет объекты только через один. Дайте идею, пожалуйста.

 
gnesnyi #:

Не могу решить вот такую задачу:

Требуется найти на графике объекты определенного цвета и удалить их все.

for(int i=0;  i<ObjectsTotal(); i++) {                                        

                     if(ObjectGet(ObjectName(i), OBJPROP_COLOR)==clrDodgerBlue) { 

                        Print(" Имя объекта - ", ObjectName(i));                    

                        ObjectDelete(0,ObjectName(i));

                        }

                  }  

Через такой циклы удаляет объекты только через один. Дайте идею, пожалуйста.

Цикл крутите в обратную сторону от больших к меньшим.

 
Dmitry Fedoseev #:

Цикл крутите в обратную сторону от больших к меньшим.

Работает, спасибо за подсказку. Правда если просто  крутить в обратную сторону, то вообще ничего не удаляет.

А вот если, зная что объектов не более 10 написать так, то работает:

for(int i=OrdersTotal()+10; i>=0; i--) {                                        

                     if(ObjectGet(ObjectName(i), OBJPROP_COLOR)==clrDodgerBlue) {                    

                        ObjectDelete(0,ObjectName(i)); }}

Хотя кривой вариант какой-то.

 
gnesnyi #:

Работает, спасибо за подсказку. Правда если просто  крутить в обратную сторону, то вообще ничего не удаляет.

А вот если, зная что объектов не более 10 написать так, то работает:

for(int i=OrdersTotal()+10; i>=0; i--) {                                        

                     if(ObjectGet(ObjectName(i), OBJPROP_COLOR)==clrDodgerBlue) {                    

                        ObjectDelete(0,ObjectName(i)); }}

Хотя кривой вариант какой-то.


Не нужно там +10

Причина обращения: