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

 
TarasBY:

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

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

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

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

 
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;
}
 
tara:


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

 

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

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

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

 
elmucon:

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

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

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

 


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


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

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

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

 
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);
      }
   }  
}
и нет проблем
 

помогите решить проблему с условие 

int OrderOpen_3_3(int cyc)//ok

  {

   double price=0;

   string strh="22";

   double buy=ObjectGet(strh,OBJPROP_PRICE1);

   string strl="21";

   double sell=ObjectGet(strl,OBJPROP_PRICE1);


   int   SP=StrToInteger("3");

   double A=Ask;

   double B=Bid;

   double spread=(A-B);


   if(Hour()<1){return(0);}//4

   if(OrderCount()==0)

     {

      if(spread>=SP*dig_ret*Point){return(0);}

      if(Bid>=buy)

         double ress_=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage*dig_ret,0,0,NULL,magic,0,clrOrange);

      if(spread>=SP*dig_ret*Point){return(0);}

      if(Bid<=sell)

         double res_=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage*dig_ret,0,0,NULL,magic,0,clrDarkViolet);

     }

   return(0);

  }//*/ 

с продажей все отлично работает а во покупка постоянно активируется не зависимо от условия Спасибо

 
QSAW_1.0:

помогите решить проблему с условие 

......

с продажей все отлично работает а во покупка постоянно активируется не зависимо от условия Спасибо

Вам нужно посчитать открытые ордера - отдельно BUY и отдельно SELL

если открытые уже есть , то ... далее Ваш алгоритм

Иначе ордера будут открываться до тех пор, пока истинно выполняется Ваше условие и хватает средств.
Причина обращения: