Скачать MetaTrader 5

Можно ли получить значение горизонтальной линии? - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
elmucon
637
elmucon  
TarasBY:

Это Вы уже, сударь, "не про жизнь"... - подавляющее большинство авторов (кодов из кодабазы) удаляют объекты (если вообще это делают) при деинициализации очень простым методом:

 - а это следствие того, что никаких префиксов они не используют... Глупо утверждать, что так делают все, но очень редко встретишь автора, уважающего других авторов, возможно "рисующих" на том же графике свои объекты... :(((

ГЫ - в моих совах так ... 

    string DeleteName;
    for (int l = 1; l < 30; l++)
        {
        DeleteName = StringConcatenate (l_name, l);
        if (ObjectFind (DeleteName) != -1) ObjectDelete (DeleteName);
        }

Алексей Тарабанов
7330
Алексей Тарабанов  
elmucon:

ГЫ - в моих совах так ... 


 

 


А у меня и в таком варианте накладки бывают: 

// Удаление созданных графических объектов
void ClearScreen(){
   int Dimension=2*TypesTotal;
   string Name, Pref[];
   Comment("                                                       "+
           "                                                       "+
           "                                                       ");
   ArrayResize(Pref,Dimension);
   Pref[ 0]=NameTangent[0];
   Pref[ 1]=NameTangent[1];
   Pref[ 2]=NameTrend[0];
   Pref[ 3]=NameTrend[1];
   Pref[ 4]=NameBaseLevel[0];
   Pref[ 5]=NameBaseLevel[1];
   Pref[ 6]=NameTrace[0];
   Pref[ 7]=NameTrace[1];
   Pref[ 8]=NameLevel12[0];
   Pref[ 9]=NameLevel12[1];
   Pref[10]=NameLevel22[0];
   Pref[11]=NameLevel22[1];
   Pref[12]=NameBorder[0];
   Pref[13]=NameBorder[1];
   Pref[14]=NameLevel2[0];
   Pref[15]=NameLevel2[1];
   Pref[16]=NameMainLevel12[0];
   Pref[17]=NameMainLevel12[1];
   Pref[18]=NameMainLevel22[0];
   Pref[19]=NameMainLevel22[1];
   Pref[20]=NameSpiralBorder[0];
   Pref[21]=NameSpiralBorder[1];
   Pref[22]=NameMainLevel2[0];
   Pref[23]=NameMainLevel2[1];
   Pref[24]=NameAttention[0];
   Pref[25]=NameAttention[1];
   Pref[26]=NameLevel1[0];
   Pref[27]=NameLevel1[1];
   Pref[28]=NameMainLevel1[0];
   Pref[29]=NameMainLevel1[1];
   Pref[30]=NameSpiral[0];
   Pref[31]=NameSpiral[1];
   Pref[32]=NameSpan[0];
   Pref[33]=NameSpan[1];
   Pref[34]=NameMainLevel0[0];
   Pref[35]=NameMainLevel0[1];
   Pref[36]=NameMainLevel5[0];
   Pref[37]=NameMainLevel5[1];
   Pref[38]=NameMainLevel6[0];
   Pref[39]=NameMainLevel6[1];
   Pref[40]=Name123[0];
   Pref[41]=Name123[1];
   int i, k=ObjectsTotal()-1;
   while( k>=0 ){
      Name=ObjectName(k);
      i=Dimension-1;
      while( i>=0 ){
         if( StringSubstr(Name,0,StringLen(Pref[i]))==Pref[i] ){
            if( !ObjectDelete(Name) ) {
               if( !РежимОтладки ) PlaySound("alert.wav");
               Print("***** "+Name+": ошибка удаления "+GetLastError()+" при очистке экрана");
         }  }
         i--;
      }
      k--;
   }
   return;
}
elmucon
637
elmucon  
tara:


А у меня и в таком варианте накладки бывают: 

 

я у себя не замечал. 

переменная l_name по сути уникальная так как создаётся из названия советника и символа графика на котором он установлен, + порядковый номер, 

ну тут кому как удобно ... ))) 

Алексей Тарабанов
7330
Алексей Тарабанов  
elmucon:

я у себя не замечал. 

переменная l_name по сути уникальная так как создаётся из названия советника и символа графика на котором он установлен, + порядковый номер, 

ну тут кому как удобно ... ))) 

 


Понимаю, но у меня возникли такие проблемы, когда на один график несколько собственных индикаторов с разными параметрами вешать стал. 
keekkenen
1135
keekkenen  
Roger:


Если Вы визуально можете определить эту линию на графике, то и советник сможет.

у вас три линии на графике и какую по вашему советник возьмет, если у него нет явных критериев отбора,

а если советник сам может "визуально" определяет линию, то и чертить ничего не нужно, но это вроде не то, что требуется топикстартеру

keekkenen
1135
keekkenen  
tara:

Понимаю, но у меня возникли такие проблемы, когда на один график несколько собственных индикаторов с разными параметрами вешать стал. 

такой набор массивов это как-то навороченно..


я тоже проще поступаю..

string ind = WindowExpertName();// или какой-то специфический признак

и его использую в именовании объектов.. по задаче таких масса может быть, просто я их делаю чтоб начинались с заданного префикса,

и удаляю по вхождению (начинается имя объекта с него) такого признака там где это нужно ..


void objectsDelete(string search){
   int total = ObjectsTotal() - 1;  
   string name = ""; 

   for (int i = ObjectsTotal() - 1; i >= 0; i--) {
      name = ObjectName(i);
      if (StringFind(name, search) != -1) {
         ObjectDelete(name);
      }
   }  
}
и нет проблем
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий