OBJ_LABEL в зацикленном скрипте

 
Уважаемые разработчики !

Иногда использую зацикленный скрипт для закрытия ордеров по нужной мне цене.
Цена достигает нужного значения, ордер закрывается, бесконечный цикл обрывается.

Перед бесконечным циклом скрипт создает OBJ_LABEL для индикации текущей цены.
Внутри цикла при изменении цены происходит обновление OBJ_LABEL.
После выхода из бесконечного цикла OBJ_LABEL = "ЗАВЕРШЕНО" для индикации конца работы.

Этот последний OBJ_LABEL обладает одной странностью - его невозможно выделить мышкой для удаления ( после полного окончания работы скрипта ).

Удалять его приходится через список всех объектов или ObjectsDeleteAll().

У OBJ_LABEL, созданного скриптом без зацикливания, таких странностей нет.
 
int sleep_time = 50; // задержка выполнения скрипта на определенный интервал ( в миллисекундах )
 
Подобное происходит с лейблами в окне индикатора при изменении размеров окна, когда они смещаются относительно основного графика, я как-то писал об этом. Объект можно выделить, наведя курсор на начало текста.

Попробуйте ткнуть в районе буковки "З". Может, тоже получится
 
To Irtron

Действительно, перед выводом последней надписи "ЗАВЕРШЕНО" изменяется координата вывода по X.

Бесконечный цикл, похоже, ни в чем не виноват. Буду проверять.

Огромное Вам спасибо, Irtron !!!
 
Irtron совершенно прав.

Если после создания OBJ_LABEL изменить координаты вывода по X или Y, выделение модифицированного объекта при помощи мышки становится невозможным.
 
Уважаемые разработчики !

Для индикации работы зацикленного скрипта выводится OBJ_LABEL и изменяется его цвет по ходу выполнения.

Если есть комментарий // Comment ( " ", summa_static ); изменение цвета происходит только после прихода нового тика.

Если нет комментария Comment ( " ", summa_static ); изменение цвета происходит на каждом шаге выполнения бесконечного цикла.

Проверила на двух разных машинах. Windows XP. Build 206. Почему так происходит ? Спасибо.


 static  int  summa_static;

 int       ostatok_int;
 
 color     color_tmp;
 
 int       object_find;
 
 for ( ; ; )  {

 // Comment ( "          ", summa_static );

   summa_static = summa_static + 1;
     
   ostatok_int = MathMod( summa_static, 5 );

        if ( ostatok_int == 0 )  color_tmp = Lime;
   else if ( ostatok_int == 1 )  color_tmp = Red;
   else if ( ostatok_int == 2 )  color_tmp = Yellow;
   else if ( ostatok_int == 3 )  color_tmp = DodgerBlue;
   else if ( ostatok_int == 4 )  color_tmp = Magenta;

   object_find = ObjectFind( "SCRIPT_1" );

   if ( object_find == -1 )  ObjectCreate( "SCRIPT_1", OBJ_LABEL, 0, 0, 0, 0, 0, 0, 0 ); 
       
   ObjectSet( "SCRIPT_1", OBJPROP_CORNER, 1 );
   ObjectSet( "SCRIPT_1", OBJPROP_XDISTANCE, 90 );
   ObjectSet( "SCRIPT_1", OBJPROP_YDISTANCE, 90 );
           
   ObjectSetText( "SCRIPT_1", "CLOSE   BUY", 13, "Microsoft Sans Serif", color_tmp );

   Sleep( 50 );

 }  //  END   for ( ; ; ) {

 
Olga_trader, необходимо использовать функцию WindowRedraw (https://docs.mql4.com/ru/chart_operations/windowredraw) после всех изменений свойств объекта для принудительной перерисовки графика. График перерисовывается сам после прихода тика.
 
To Slawa 25.06.07 16:12

Большое спасибо ! Помогло, буду знать и использовать.
Причина обращения: