графический объект, свойства

 

Доброе время суток !

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

заданные свойства нужные значения принирмают, а во всех следующих цвет и ширина стантадртные. В чем дело ?


extern bool gamm96 = true,gamm08 = true,gamm04 = true;

int Period_L  = PERIOD_W1; 

double PriceL;

long currChart,prevChart=ChartFirst(); 

string nameSym ="", nameLineH="Lag_LineH", nameLineV="Lag_LineV" ;  

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

//---

    

    int i=0,limit=100; 

    while(i<limit)// наверняка не больше 100 открытых графиков 

     { 

      

      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график 

      

      if(currChart<0) break;          // достигли конца списка графиков 

      nameSym = ChartSymbol(prevChart);

     Alert("sym = ",nameSym);

      if (gamm96) 

      {

         PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.96,0,0,0), Digits);

         ChartBringToTop(clrRed,2); 

      }    

      if (gamm08)    

      {

         PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.8,0,0,0), Digits);

         ChartBringToTop(clrLightPink,2); 

      }   

      if (gamm04)    

      {

         PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.4,0,0,0), Digits);

         ChartBringToTop(clrBlueViolet,1.9); 

      }   

       

      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext() 

      i++;// не забудем увеличить счетчик 

     }

       ChartBringToTop(clrBlueViolet,1.9); 

  }

//+------------------------------------------------------------------+


void ChartBringToTop(int _color,double mWidth)   // const long chart_ID=0)

  {


//-------------- наличие горизонтальной линии

      nameLineH = nameSym + IntegerToString(_color) + "Н_" + TimeToStr(TimeCurrent());  


      ObjectCreate(prevChart,nameLineH,OBJ_HLINE, 0,Time[0],PriceL);                

      

      ObjectFind(nameLineH); 

      ObjectSet(nameLineH,OBJPROP_WIDTH,mWidth);

      ObjectSet(nameLineH, OBJPROP_COLOR, _color);

        

   }   

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
Choose a suitable trading strategy and subscribe to it with a few clicks. All Signals are provided with detailed statistics and informative charts. Become a trading signal provider and sell subscriptions to thousands of traders around the world. With the Signals service, your successful strategy can generate income with a small start-up budget...
 
Worh:

Доброе время суток !

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

заданные свойства нужные значения принирмают, а во всех следующих цвет и ширина стантадртные. В чем дело ?

ObiectSet не имеет возможности указывать ID графика. А потому работает только с текущим графиком. Для задания ID графика нужно использовать ObjectSetInteger, ObjectSetDouble и ObjectSetString.

P. S. Код вставляйте через кнопку SRC. Вот так будет выглядеть:

extern bool gamm96 = true,gamm08 = true,gamm04 = true;

int Period_L  = PERIOD_W1; 

double PriceL;

long currChart,prevChart=ChartFirst(); 

string nameSym ="", nameLineH="Lag_LineH", nameLineV="Lag_LineV" ;  
 
Ihor Herasko:

ObiectSet не имеет возможности указывать ID графика. А потому работает только с текущим графиком. Для задания ID графика нужно использовать ObjectSetInteger, ObjectSetDouble и ObjectSetString.

P. S. Код вставляйте через кнопку SRC. Вот так будет выглядеть:


Спасибо большое !

то что надо !

Уважаемый Ihor !

а еще вот такое не получается - при определеном событии надо нарисовать на текущем графике линию (а елси линия существует то передвинуть),

но открывается НОВЫЙ график и на нем рисуется линия

void ChartBringToTop(int _color,double mWidth)   // const long chart_ID=0)

  {

   long tempIdGrafik=ChartOpen(nameSym,PERIOD_W1);   //Period_L

//-------------- наличие горизонтальной линии

      string nameLineH = nameSym+IntegerToString(_color) + "Н_";  



      if (ObjectFind(tempIdGrafik,nameLineH)<0)

      {

         ObjectCreate(tempIdGrafik,nameLineH,OBJ_HLINE, 0,Time[0],PriceL);                

         ObjectSet(nameLineH,OBJPROP_WIDTH,mWidth);

         ObjectSet(nameLineH, OBJPROP_COLOR, _color);

      }

      else

      {

         ObjectMove(tempIdGrafik,nameLineH,0,Time[0],PriceL);

      }   

   }  
 
Worh:

а еще вот такое не получается - при определеном событии надо нарисовать на текущем графике линию (а елси линия существует то передвинуть),

но открывается НОВЫЙ график и на нем рисуется линия


Так а зачем же Вы пишите:

long tempIdGrafik=ChartOpen(nameSym,PERIOD_W1);   //Period_L

открыть график? Уберите эту строку и не будет открываться новый график. Ну а на место ID нужно поставить 0, если интересует именно текущий график.

 
Ihor Herasko:

Так а зачем же Вы пишите:

открыть график? Уберите эту строку и не будет открываться новый график. Ну а на место ID нужно поставить 0, если интересует именно текущий график.


еще раз спасибо !