TAACH_Chanels





//+------------------------------------------------------------------+
//|                                             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);
   }



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar


Indicator Curves created:


Indicators Used:

Fractals


Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen