474 
Первый вариант, реализованный в эксперте strings.mq4, несколько более информативен, 
поэтому в данном случае предпочтение отдано ему (с точки зрения алгоритма, 
реализованного в программе, эти варианты равнозначны). 
В последующих строках пользовательской функции Create() создаётся объект с 
вычисленным именем His_Name, содержащим сведения о времени открытия бара, и со 
свойствами, соответствующими номеру линии Line, а также с цветом в зависимости от 
характеристик бара. Для каждого объекта указывается также значение текстового 
описания: "Объект создан экспертом". 
Вызов функции Create() осуществляется в программе в двух местах - из специальной 
функции init() для первоначального создания объектов, и из специальной функции start(), 
в случае необходимости ещё раз создать объект, случайно удалённый или изменённый 
пользователем. Имена объектов в функции start() (блоки 4-5-6) формируются так же, как и 
в других местах программы. 
В блоке 6-7 определяется первая координата исследуемого объекта. Если при этом объект 
не найден, то он создаётся с помощью Create(). А если объект существует, то 
определяются другие его координаты и вычисляется, соответствуют ли его свойства 
характеристикам бара (блок 7-8). При обнаружении любого несоответствия объект 
удаляется и создаётся вновь (с тем же именем), но уже с правильными свойствами. 
При исполнении функции deinit() решается ещё одна задача: из всей совокупности 
объектов, имеющихся в окне финансового инструмента, необходимо удалить только те, 
которые созданы экспертом. Это делается в два этапа: на первом этапе в массив 
Name_Del[] запоминаются имена всех объектов, которые необходимо удалить, а затем, в 
отдельном цикле, все эти объекты удаляются. Общее количество всех объектов в окне (в 
том числе, созданных программой и установленных пользователем вручную) вычисляется 
с помощью функции ObjectsTotal(): 
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов 
Количество раскрашиваемых баров  устанавливается пользователем во внешней 
переменной, т.е. заранее неизвестно, сколько графических объектов придётся удалять. 
Поэтому строковый массив, несущий имена удаляемых объектов, объявляется с 
количеством элементов равным 1, а затем размер массива программно изменяется - 
количество его элементов увеличивается до общего количества объектов. 
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива