//+------------------------------------------------------------------+
//|                                             ChanelByFractals.mq4 |
//|                                                      Denis Orlov |
//|                                    http://denis-or-love.narod.ru |
//|                  Ïîñòðîåíèå êàíàëîâ è ôèáî-óðîâíåé ïî ôðàêòàëàì  |
//|                                  
//+------------------------------------------------------------------+
#property copyright "Denis Orlov"
#property link      "http://denis-or-love.narod.ru"
#property indicator_separate_window
#include <WinUser32.mqh>
#property indicator_level1 0
#property indicator_minimum -25
#property indicator_maximum 15
#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor Coral
#property show_inputs 
//extern string On_Off?="Âûêëþ÷àòåëü:";
//extern bool On_Off=True;
//extern string ChanelMin?="Ìèíèìàëüíàÿ øèðèíà êàíàëà:";
//extern int ChanelMin=0;
//extern string Bar?="Ðàñ÷èòàòü îò êàêîãî áàðà:";
//extern int Bar=0;
//extern string Shift?="Çàïàçäûâàíèå êàíàëîâ:";
//extern 
int Shift=0;
//extern string Long?="Äëèííà êàíàëîâ:";
//extern 
int Long=3;
//extern string Save_Chanels?="Ñîõðàíèòü ñòàðûõ êàíàëîâ:";
//extern int Save_Chanels=3;
bool ByLowFraclals=True;
string MX;//ñòðîêîâàÿ ìàòðèöà äëÿ ïðîâåðêè ïàíåëè
int PX=100,PYH=0,PYL=15, PYTresh=3, FSize=14;//ïàðàìåòðû ïàíåëè
int EraserX=500, ShowChX=200, 
FiboX=310, AddLevelX=370, ShiftX=235, LongX=275, ChanelMinX=275, stepX=15;
int per;
int ChanelN=0;//òåêóùèé êàíàë äëÿ ïåðåíîñà âïåðåä
datetime BH1T, BL1T;
bool Fibo,AddLevel,Fibo_old,AddLevel_old;
bool initDone=False;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorShortName("Control Panel");
   
   int Win=WindowFind("Control Panel");
   
   DrawLabels("All", 1, PX, PYH, "All_On", Red,Win, FSize);
   DrawLabels("Help", 1, PX-60, PYL, "Help", SaddleBrown,Win, FSize);
   DrawLabels("Eraser", 1, PX+EraserX, PYL, "Del", Red,Win, FSize);
  
  
   for(int i=0;i<=9;i++)
      {
       if(i==0)
       DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYH, i, Green,Win, FSize);
         else
       DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYL, i, Red, Win, FSize);
      }
      
   DrawLabels("Shift", 1, PX+ShiftX, PYH, Shift, Blue ,Win, FSize);   
   //DrawLabels("ChanelMin", 1, PX+ChanelMinX, PYH, ChanelMin, Blue ,Win, FSize); 
   DrawLabels("Long", 1, PX+LongX, PYH+(Long-1)*3, Long, Blue ,Win, FSize); 
   DrawLabels("Fibo", 1, PX+FiboX, PYL, "FIBO", Red ,Win, FSize); 
   DrawLabels("AddLevel", 1, PX+AddLevelX, PYL, "Levels", Red ,Win, FSize); 
      
   //Panel();
  // AlertHelp();
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    Delete_My_Obj("Chanels_Line");
    Delete_My_Obj("On_Off");
    Delete_My_Obj("Digit");
   return(0);
  }
//----  
int start()
  {
   if(initDone==False)
      {
         init(); initDone=True;
      }
//----
  Panel();
  
 // if(On_Off!=True) return; 
  if (per == Time[0]) return; // îäèí ðàç â áàð
     per = Time[0];
      //----
     //for(int i=0; i<=9;i++) 
        // if(ObjectGet("Digit "+i,OBJPROP_PRICE1)>0)
        // {
           //DrawChanel(i);
         //}
  
//----
   return(0);
  }
void Panel()
   {
      int Win=WindowFind("Control Panel");
      
      
       if(ObjectGet("Eraser",OBJPROP_YDISTANCE)<=PYTresh) 
       {
        // DrawLabels("Eraser", 1, PX+EraserX, PYTresh, "Del", Green,Win, FSize);
        DrawLabels("Eraser", 1, PX+EraserX, PYL, "Del", Red,Win, FSize);
         Delete_My_Obj("Chanels_Line");
         DrawLabels("All", 1, PX, PYH, "All_On", Red,Win, FSize);
       }  
      
      int y=ObjectGet("Fibo",OBJPROP_YDISTANCE);
       if(y<=PYTresh) {Fibo=True; color clr=Green; y=PYH; }
       else {Fibo=False; clr=Red;  y=PYL;}   
   DrawLabels("Fibo", 1, PX+FiboX, y, "FIBO", clr ,Win, FSize);
   
    y=ObjectGet("AddLevel",OBJPROP_YDISTANCE);
       if(y<=PYTresh) {AddLevel=True; clr=Green; y=PYH;}
       else {AddLevel=False; clr=Red;  y=PYL;} 
   DrawLabels("AddLevel", 1, PX+AddLevelX, y, "Levels", clr ,Win, FSize);
   
   if (Fibo_old!=Fibo || AddLevel_old!=AddLevel)
      {
         Fibo_old=Fibo; AddLevel_old=AddLevel;
         for(int i=0;i<=9;i++)
            {
             y=ObjectGet("ShowChanel "+i,OBJPROP_YDISTANCE); 
                if(y<=PYTresh)
                DrawAddLines(i);       
            }
         
      }
    
   //=========All, Help
     /* y=ObjectGet("On_Off",OBJPROP_YDISTANCE);
      if(y<=PYTresh) 
       {
         On_Off=True; DrawLabels("On_Off", 1, PX+0, PYH, "OFF", Green,Win, FSize);
       }
       else
       {
         On_Off=False; DrawLabels("On_Off", 1, PX+0, PYL, "ON", Red,Win, FSize);
       }
       
       if(On_Off!=True) return; */
       y=ObjectGet("All",OBJPROP_YDISTANCE);
      if(y>=PYL)
         {
           DrawLabels("All", 1, PX, PYL, "All", SaddleBrown,Win, FSize);
         }
         else  
      if(y<=PYTresh) 
       {
         DrawLabels("All", 1, PX, PYH, "All_On", Green,Win, FSize);
         for( i=0;i<=9;i++)
            {
             if(i==0)
             DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYH, i, Green,Win, FSize);
               else
             DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYL, i, Red, Win, FSize);
            }
         DrawLabels("All", 1, PX, PYL, "All", SaddleBrown,Win, FSize);
       }
       else
       {
         DrawLabels("All", 1, PX, PYL, "All_Off", Red,Win, FSize);
         for( i=0;i<=9;i++)
            {
             if(i!=0)
             DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYH, i, Green,Win, FSize);
               else
             DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, PYL, i, Red, Win, FSize);
            }
            
          DrawLabels("All", 1, PX, PYL, "All", SaddleBrown,Win, FSize);
       }
       
     if(ObjectGet("Help",OBJPROP_YDISTANCE)<=PYTresh) 
       {
         DrawLabels("Help", 1, PX-60, PYL, "Help", SaddleBrown,Win, FSize);
         AlertHelp();
       }  
     //=========All, Help 
     
      string mx="";
      
      for(i=0;i<=9;i++)
      {
       y=ObjectGet("ShowChanel "+i,OBJPROP_YDISTANCE);
       if(y<=PYTresh) {mx=mx+"1"; clr=Green; y=PYH;} 
          else {mx=mx+"0"; clr=Red; y=PYL;}
       DrawLabels("ShowChanel "+i, 1, PX+ShowChX-i*stepX, y, i, clr,Win, FSize); 
      }
 
    Shift=StrToInteger( ObjectDescription("Shift") );
    DrawLabels("Shift", 1, PX+ShiftX, PYH, Shift, Blue ,Win, FSize); 
    
    //ChanelMin=StrToInteger( ObjectDescription("ChanelMin") );
    //DrawLabels("ChanelMin", 1, PX+ChanelMinX, PYH, ChanelMin, Blue ,Win, FSize);
    Long=MathRound(ObjectGet("Long",OBJPROP_YDISTANCE)/3)+1;
    DrawLabels("Long", 1, PX+LongX, PYH+(Long-1)*3, Long, Blue ,Win, FSize); 
    
    mx=mx+Shift+Long;//+ChanelMin;  
    
      if(MX!=mx)
         { 
            MX="";
            for(i=0;i<=9;i++)
               {
                y=ObjectGet("ShowChanel "+i,OBJPROP_YDISTANCE);
                
                if(y<=PYTresh)
                  {
                  DrawChanel(i);
                  DrawAddLines(i);
                  MX=MX+"1"; 
                  }
                  else
                  {
                  Delete_My_Obj("Chanels_LineH "+i);
                  Delete_My_Obj("Chanels_LineL "+i);
                  MX=MX+"0";  
                  }  
               }
         MX=MX+Shift+Long;//+ChanelMin; 
         }
       
      /* bool ResFound=False;
      for(int i=0;i<=9;i++)
      {
       int t=12,p=-4;
       if(i>4){t=22; p=-14;}
       if( ObjectGet("Digit "+i,OBJPROP_PRICE1)>0) 
         {
          color clr=Green; Save_Chanels=i; ResFound=True;
            for(int j=i-1;j>=0;j--)
                  {
                   t=12;p=-4;
                   if(j>4){t=22; p=-14;}
                   DrawArrows("Digit "+j, Time[t-j*2], p, 139+j, Red, Win, 
                  "Çíà÷åíèå äëÿ Save_Chanels");
                 // break;
                   }
         }
         else
         {
           clr=Red; 
         }
         t=12;
       if(i>4)t=22;
       DrawArrows("Digit "+i, Time[t-i*2], ObjectGet("Digit "+i,OBJPROP_PRICE1), 139+i, clr, Win, 
       "Çíà÷åíèå äëÿ Save_Chanels");
      } 
      if(ResFound!=True)
         {Save_Chanels=0;
            t=12;p=10;
   DrawArrows("Digit "+0, Time[t], p, 139, Green, Win, 
       "Çíà÷åíèå äëÿ Save_Chanels");
         for(i=1;i<=9;i++)
            {
             p=-4;
             if(i>4){t=22; p=-14;}
             DrawArrows("Digit "+i, Time[t-i*2], p, 139+i, Red, Win, 
             "Çíà÷åíèå äëÿ Save_Chanels");
            }
         }*/
         
        
   }
   
   
int FindFractByNumber(int FractN)
   {
   double Fr=0;     // çíà÷åíèå ôðàêòàëîâ
   int BarN=1; // íîìåðà áàðîâ,òàê ÷òîáû ïîèñê íà÷àòü ñî 2-ãî(1 è 0 äëÿ ïðîâåðêè ôðàêòàëüíîñòè)
  
  for(int i=0;i<=FractN;i++)//ñ÷åò÷èê ïîèñêà
    {
       Fr=0; 
      while(Fr==0)      //ïîèñê ñëåä.ôðàêòàëà îò BarN
        {  
           BarN++;//áåðåì ñëåä. áàð
           Fr=iFractals(NULL,0,MODE_LOWER,BarN);
           if(Fr==0)
           Fr=iFractals(NULL,0,MODE_UPPER,BarN);
        }
    }
      return(BarN);
   }
   
int DrawChanel(int FracN)
   {
      double FH1=0, FH3=0, FL1=0, FL3=0, F13;    // íîìåðà ôðàêòàëîâ
  int  BH1, BH3, BL1, BL3, SR, bar2; //=Bar+2              // íîìåðà áàðîâ
  
  SR=FindFractByNumber(FracN+Shift);//
  
  while(FL3==0 || FH3==0)                       //ïîèñê ôðàêòàëîâ
  {
    F13=iFractals(NULL,0,MODE_LOWER,SR);
    if (F13!=0) 
    {
      while(iLow(NULL,0,SR)==iLow(NULL,0,SR+1)) SR++;
      if      (FL1==0){BL1=SR; FL1=F13;}
      else if (FL3==0){BL3=SR; FL3=F13;}
    }
    F13=iFractals(NULL,0,MODE_UPPER,SR);
    if (F13!=0) 
    {
      while(iHigh(NULL,0,SR)==iHigh(NULL,0,SR+1)) SR++;
      
      if      (FH1==0){BH1=SR; FH1=F13;}
      else if (FH3==0){BH3=SR; FH3=F13;}
    }
    
    SR++; 
  }
    //if( (High[BH1]-Low[BL1])/Point<ChanelMin ) return;
    
    /*if(BH1T==iTime(NULL,0,BH1) && BL1T==iTime(NULL,0,BL1)) return;
    else
     {
       BH1T=iTime(NULL,0,BH1); BL1T=iTime(NULL,0,BL1);
     }
  
   if(Save_Chanels==0)//(Delete_Old_Lines)
      Delete_My_Obj("ChanelByFractals");
      else
      {
       ChanelN++; 
       if(ChanelN>Save_Chanels+1) ChanelN=1;        
      }*/
      
   string nameH="Chanels_LineH "+FracN,//ChanelN
         nameL="Chanels_LineL "+FracN;//ChanelN
         
       Delete_My_Obj(nameH);
       Delete_My_Obj(nameL);
       
   if(BL1<BH1) ByLowFraclals=True; else ByLowFraclals=False;
   
         
   if(ByLowFraclals)
      {
    datetime t2=iTime(NULL,0,BL1)+(iTime(NULL,0,BL1)-iTime(NULL,0,BL3))*Long;
    double p2=iLow(NULL,0,BL1)+(iLow(NULL,0,BL1)-iLow(NULL,0,BL3))*Long;
    
    DrawTrends(nameL, iTime(NULL,0,BL3),iLow(NULL,0,BL3),t2,p2,Green,2,"");  
    
   /* ObjectCreate(nameL, OBJ_TREND, 0,0,0,0,0);//ñîçäàíèå òðåíäîâîé ëèíèè
    ObjectSet(nameL, OBJPROP_TIME1 ,iTime(NULL,0,BL3));
    ObjectSet(nameL, OBJPROP_PRICE1,iLow(NULL,0,BL3));
    ObjectSet(nameL, OBJPROP_TIME2 ,t2);
    ObjectSet(nameL, OBJPROP_PRICE2,p2);
    ObjectSet(nameL, OBJPROP_RAY   , false);
    ObjectSet(nameL, OBJPROP_COLOR   , Green);
    ObjectSet(nameL, OBJPROP_WIDTH   , 2);*/
    
   // Alert(TrendLToBar(nameL, BH1)+"; "+BH1+"; "+BarOfTrendL(nameL, BH3)+"; "+BH3);
    
    if (iHigh(NULL,0,BH1)>=iHigh(NULL,0,BH3) || iTime(NULL,0,BH3)<iTime(NULL,0,BL3)) 
      bar2=BH1; else bar2=BH3;//(BL3>=BH3 && BH3>=BL1)
    datetime t1=iTime(NULL,0,bar2)-(iTime(NULL,0,BL1)-iTime(NULL,0,BL3));
    double p1=iHigh(NULL,0,bar2)-(iLow(NULL,0,BL1)-iLow(NULL,0,BL3));
    t2=iTime(NULL,0,bar2)+(iTime(NULL,0,BL1)-iTime(NULL,0,BL3))*Long;
    p2=iHigh(NULL,0,bar2)+(iLow(NULL,0,BL1)-iLow(NULL,0,BL3))*Long;
 
    DrawTrends(nameH, t1,p1,t2,p2,Red,1,"") ; 
    /*ObjectCreate(nameH, OBJ_TREND, 0,0,0,0,0);//ñîçäàíèå òðåíäîâîé ëèíèè
    ObjectSet(nameH, OBJPROP_TIME1 ,t1);
    ObjectSet(nameH, OBJPROP_TIME2 ,t2);
    ObjectSet(nameH, OBJPROP_PRICE1,p1);
    ObjectSet(nameH, OBJPROP_PRICE2,p2);
    ObjectSet(nameH, OBJPROP_RAY   , false);
    ObjectSet(nameH, OBJPROP_COLOR   , Red);*/
    
    }
    
 if(ByLowFraclals!=True)
      {
     t2=iTime(NULL,0,BH1)+(iTime(NULL,0,BH1)-iTime(NULL,0,BH3))*Long;
     p2=iHigh(NULL,0,BH1)+(iHigh(NULL,0,BH1)-iHigh(NULL,0,BH3))*Long; 
     
     DrawTrends(nameH,iTime(NULL,0,BH3),iHigh(NULL,0,BH3),t2,p2,Red,2,""); 
   /*ObjectCreate(nameH, OBJ_TREND, 0,0,0,0,0);//ñîçäàíèå òðåíäîâîé ëèíèè
    ObjectSet(nameH, OBJPROP_TIME1 ,iTime(NULL,0,BH3));
    ObjectSet(nameH, OBJPROP_PRICE1,iHigh(NULL,0,BH3));
    ObjectSet(nameH, OBJPROP_TIME2 ,t2);
    ObjectSet(nameH, OBJPROP_PRICE2,p2);
    ObjectSet(nameH, OBJPROP_RAY   , false);
    ObjectSet(nameH, OBJPROP_COLOR   , Red);
    ObjectSet(nameH, OBJPROP_WIDTH   , 2);*/
    
   if (iLow(NULL,0,BL1)<=iLow(NULL,0,BL3) || iTime(NULL,0,BL3)<iTime(NULL,0,BH3)) 
      bar2=BL1; else bar2=BL3;//(BH3>=BL3 && BL3>=BH1)
     t1=iTime(NULL,0,bar2)-(iTime(NULL,0,BH1)-iTime(NULL,0,BH3));
     p1=iLow(NULL,0,bar2)-(iHigh(NULL,0,BH1)-iHigh(NULL,0,BH3));
     t2=iTime(NULL,0,bar2)+(iTime(NULL,0,BH1)-iTime(NULL,0,BH3))*Long;
     p2=iLow(NULL,0,bar2)+(iHigh(NULL,0,BH1)-iHigh(NULL,0,BH3))*Long;
     
     DrawTrends(nameL, t1,p1,t2,p2,Green,1,"");  
     /*ObjectCreate(nameL, OBJ_TREND, 0,0,0,0,0);//ñîçäàíèå òðåíäîâîé ëèíèè
    ObjectSet(nameL, OBJPROP_TIME1 ,t1);
    ObjectSet(nameL, OBJPROP_TIME2 ,t2);
    ObjectSet(nameL, OBJPROP_PRICE1,p1);
    ObjectSet(nameL, OBJPROP_PRICE2,p2);
    ObjectSet(nameL, OBJPROP_RAY   , false);
    ObjectSet(nameL, OBJPROP_COLOR   , Green);*/
     }
   }
//+------------------------------------------------------------------+
int DrawAddLines(int ChanelN)
   { 
      string nameH="Chanels_LineH "+ChanelN, nameL="Chanels_LineL "+ChanelN;
       if (ObjectFind(nameH)<0) return;
       
      datetime 
      th1=ObjectGet(nameH, OBJPROP_TIME1),
      th2=ObjectGet(nameH, OBJPROP_TIME2),
      tl1=ObjectGet(nameL, OBJPROP_TIME1),
      tl2=ObjectGet(nameL, OBJPROP_TIME2), tf1,tf2;
      
      double
      ph1=ObjectGet(nameH, OBJPROP_PRICE1),
      ph2=ObjectGet(nameH, OBJPROP_PRICE2),
      pl1=ObjectGet(nameL, OBJPROP_PRICE1),
      pl2=ObjectGet(nameL, OBJPROP_PRICE2), pf1,pf2;
      
      int leftbar=TimeToBar(th1);
      double ChanelW=TrendLToBar(nameH, leftbar)-TrendLToBar(nameL, leftbar);
      
      bool LowBase=ObjectGet(nameL, OBJPROP_WIDTH)>ObjectGet(nameH, OBJPROP_WIDTH);
      
      Comment(ChanelW);
         
      if(AddLevel) 
      {
         if(LowBase)
            {
            DrawTrends(nameL+" -90%", tl1,pl1-ChanelW*0.9,tl2,pl2-ChanelW*0.9,Green,1,"");
         ObjectSet(nameL+" -90%",OBJPROP_STYLE,2);
            DrawTrends(nameL+" -100%", tl1,pl1-ChanelW,tl2,pl2-ChanelW,Green,1,"");
         ObjectSet(nameL+" -100%",OBJPROP_STYLE,1);
         DrawTrends(nameL+" -10%", tl1,pl1-ChanelW*0.1,tl2,pl2-ChanelW*0.1,Red,1,"");
         ObjectSet(nameL+" -10%",OBJPROP_STYLE,2);
            }
            else
            {
            DrawTrends(nameH+" +90%", th1,ph1+ChanelW*0.9,th2,ph2+ChanelW*0.9,Red,1,"");
         ObjectSet(nameH+" +90%",OBJPROP_STYLE,2); 
            DrawTrends(nameH+" +100%", th1,ph1+ChanelW,th2,ph2+ChanelW,Red,1,"");
         ObjectSet(nameH+" +100%",OBJPROP_STYLE,1); 
         DrawTrends(nameH+" +10%", th1,ph1+ChanelW*0.1,th2,ph2+ChanelW*0.1,Green,1,"");
         ObjectSet(nameH+" +10%",OBJPROP_STYLE,2);
            }
         
         DrawTrends(nameH+" -10%", th1,ph1-ChanelW*0.1,th2,ph2-ChanelW*0.1,Red,1,"");
         ObjectSet(nameH+" -10%",OBJPROP_STYLE,2);
         DrawTrends(nameH+" 50%", th1,ph1-ChanelW*0.5,th2,ph2-ChanelW*0.5,Red,1,"");
         ObjectSet(nameH+" 50%",OBJPROP_STYLE,2) ;
         DrawTrends(nameL+" +10%", tl1,pl1+ChanelW*0.1,tl2,pl2+ChanelW*0.1,Green,1,"");
         ObjectSet(nameL+" +10%",OBJPROP_STYLE,2);
         
      }
      else
      {
         Delete_My_Obj(nameH+" ");
         Delete_My_Obj(nameL+" ");
      }
      
      if(Fibo)
      {  
         
         
         if(LowBase)
            {
            color clr=Red; //levclr=Red; 
            string fiboname=nameL+"Fibo";
            tf1=tl1; tf2=tl2; pf1=pl1; 
            //pf2=pl2;
            
            if(pl1<pl2)
            //double fiboLev=0.382; else fiboLev=-0.382; 
            pf2=pl2-((pl2-pl1)/61.8*23.6); else pf2=pl2-((pl1-pl2)/38.2*23.6);
            }
            else
            {
            clr=Green; //levclr=Green; 
            fiboname=nameH+"Fibo";
            tf1=th1; tf2=th2; pf1=ph1; 
            //pf2=ph2;  
            
            if(ph1<ph2)
            //fiboLev=-0.382; else fiboLev=0.382;
            pf2=ph2+((ph2-ph1)/38.2*23.6); else pf2=ph2+((ph1-ph2)/61.8*23.6); 
            }
     DrawTrends(fiboname, tf1,pf1,tf2,pf2,clr,1,"");
  /* ObjectCreate(fiboname,OBJ_FIBOFAN,0,tf1,pf1,tf2,pf2);
   ObjectSet(fiboname,OBJPROP_STYLE,0);
   ObjectSet(fiboname,OBJPROP_COLOR, clr);
   ObjectSet(fiboname,OBJPROP_LEVELCOLOR, levclr);
   ObjectSet(fiboname,OBJPROP_FIBOLEVELS,1);
   ObjectSet(fiboname,OBJPROP_FIRSTLEVEL+0,fiboLev);*/
      }
      else
      {
         Delete_My_Obj(nameH+"Fibo");
         Delete_My_Obj(nameL+"Fibo");
      }
     
   }
//---------------
//--------------
int DrawLabels(string name, int corn, int X, int Y, string Text, color Clr=Green, int Win=0, int FSize=10)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Ñîçäàíèå îáúåêòà
    }
     
     ObjectSet(name, OBJPROP_CORNER, corn);     // Ïðèâÿçêà ê óãëó   
     ObjectSet(name, OBJPROP_XDISTANCE, X);  // Êîîðäèíàòà Õ   
     ObjectSet(name,OBJPROP_YDISTANCE,Y);// Êîîðäèíàòà Y   
     ObjectSetText(name,Text,FSize,"Arial",Clr);
   }
//---------------
//------------------------------------- 
int DrawTrends(string name, datetime T1, double P1, datetime T2, double P2, color Clr, int W=1, string Text="", bool ray=false, int Win=0)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name, OBJ_TREND, Win,T1,P1,T2,P2);//ñîçäàíèå òðåíäîâîé ëèíèè
    }
     
    ObjectSet(name, OBJPROP_TIME1 ,T1);
    ObjectSet(name, OBJPROP_PRICE1,P1);
    ObjectSet(name, OBJPROP_TIME2 ,T2);
    ObjectSet(name, OBJPROP_PRICE2,P2);
    ObjectSet(name, OBJPROP_RAY , ray);
    ObjectSet(name, OBJPROP_COLOR , Clr);
    ObjectSet(name, OBJPROP_WIDTH , W);
    ObjectSetText(name,Text);
   // WindowRedraw();
   }  
//-------------------------------------
void Delete_My_Obj(string Prefix)
   {//Alert(ObjectsTotal());
   for(int k=ObjectsTotal()-1; k>=0; k--)  // Ïî êîëè÷åñòâó âñåõ îáúåêòîâ 
     {
      string Obj_Name=ObjectName(k);   // Çàïðàøèâàåì èìÿ îáúåêòà
      string Head=StringSubstr(Obj_Name,0,StringLen(Prefix));// Èçâëåêàåì ïåðâûå ñèì
      if (Head==Prefix)// Íàéäåí îáúåêò, ..
         {
         ObjectDelete(Obj_Name);
         //Alert(Head+";"+Prefix);
         }                
        
     }
   }
//-------------------------------------    
//-------------------------------------   
double TrendLToBar(string name, int BarN)
   {
         datetime T1=ObjectGet(name,OBJPROP_TIME1), T2=ObjectGet(name,OBJPROP_TIME2);
         double P1=ObjectGet(name,OBJPROP_PRICE1), P2=ObjectGet(name,OBJPROP_PRICE2);
     double Step=(P2-P1)/(T2-T1),
            Res=P1+((Time[BarN]-T1)*Step); 
     return(Res);
   }   
int TimeToBar(datetime T)
   {  
     int i=0;
     while(Time[i]>=T) i++;
     if(T-Time[i]<Time[i-1]-T)
      return(i); else return(i-1); 
   }
//-------------------------------------    
//-------------------------------------  
void AlertHelp()
   {
      string text=
      "*****"+"ÑÏÐÀÂÊÀ ÏÎ ÈÍÄÈÊÀÒÎÐÓ TAACH_CHANELS."+"*****\n"+
      "\t"+"Àâòîð :"+"\t"+"Äåíèñ Îðëîâ"+"\n"+
      "\t"+"http://denis-or-love.narod.ru"+"\n"+
      "\t"+"http://vkontakte.ru/club3368806"+"\n"+"\n"+
      
      "\t"+"ÎÏÈÑÀÍÈÅ."+"\n"+
      "Ïîñòðîåíèå êàíàëîâ è ôèáî-óðîâíåé ïî ôðàêòàëàì ïî ìåòîäó \"ÒÀÀ×\" Ñ.×óâàøîâà."+"\n"+"\n"+
      
      "Âñå ôóíêöèè êðîìå Shift óïðàâëÿþòñÿ âûäåëåíèåì(äâîéíûì ùåë÷êîì)"+"\n"+
      "è ñäâèãàíèåì ââåðõ-âíèç ïî Control Panel."+"\n"+"\n"+
      
      "Del :"+"\t"+"Î÷èñòèòü ãðàôèê îò îáúåêòîâ èíäèêàòîðà"+"\n"+
      "Levels:"+"\t"+"Íàðèñîâàòü/Ñòåðåòü äîáàâî÷íûå óðîâíè êàíàëîâ."+"\n"+
      "FIBO :"+"\t"+"Íàðèñîâàòü/Ñòåðåòü ôèáî-óðîâåíü îò ðàáî÷åé ëèíèè êàíàëà."+"\n"+
      "Long :"+"\t"+"Èçìåíèòü äëèííó ëèíèé êàíàëîâ."+"\n"+
      "Shift :"+"\t"+"Ñäâèã êàíàëîâ ïî ôðàêòàëàì âëåâî."+"\n"+
      "\t"+"(óïðàâëÿåòñÿ ÷åðåç ñâîéñòâî îáúåêòà \"Òåêñò\")"+"\n"+
      "0-9 :"+"\t"+"Íàðèñîâàòü/Ñòåðåòü óêàçàííûé êàíàë."+"\n"+
      "All :"+"\t"+"Íàðèñîâàòü/Ñòåðåòü ÂÑÅ êàíàëû êðîìå ïåðâîãî."+"\n"+
      "\t"+"(íàâåðõ ÍÅ äî óïîðà/íàâåðõ äî óïîðà)"+"\n"+"\n"+
      
      "\t"+"*****\n"+
      "\t"+"ÏÎËÜÇÓÉÒÅÑÜ È ÏÐÎÖÂÅÒÀÉÒÅ!"+"\n"+"\n"+
      
      "\t"+"Âñå ìîè èíäèêàòîðû :"+"\n"+
      "\t"+"http://codebase.mql4.com/ru/author/denis_orlov";
      
      //MessageBox(text, "ÑÏÐÀÂÊÀ ÏÎ ÈÍÄÈÊÀÒÎÐÓ",MB_OK|MB_ICONINFORMATION );
      Alert(text);
   }
             
            
            
            
            
Comments