//+------------------------------------------------------------------+
//|                                                 Popup Prices.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#define Pref "a"

extern string note="Write 8 pairs to show ranges:";
extern   string symbol1="GBPUSD";
extern   string symbol2="EURUSD";
extern   string symbol3="EURJPY";
extern   string symbol4="USDJPY";
extern   string symbol5="USDCAD";
extern   string symbol6="USDCHF";
extern   string symbol7="NZDUSD";
extern   string symbol8="AUDUSD";
extern string note2="Coordinates:";
extern int X=70;
extern int Y=20;
 int RowStep=12;
 int ColStep=17;
extern int Corner=0; 
 int FSize=10;
//extern int H=0;
 string note3="Colors, two themes:";
 color RectClr=Gray;
extern color TxtClr=White;
extern color High_up_color=Lime;
extern color UpClr=DarkGreen;
extern color DnClr=FireBrick;
extern color High_down_color=Red;
 bool White_Chart_Theme=false;
 color RectClr1=Gray;
 color TxtClr1=Gray;
 color UpClr1=Lime;
 color DnClr1=Red;
 color FlatClr=DodgerBlue;


int TimeX;
double PriceY;

int codeAO, codeAO2, codeAO3, codeAO4, codeAO5, codeAO6, codeao7, codeao8,
    codeAC, codeMACD, 
    codeSTO, codeSTO2, codeSTO3, codeSTO4, codeSTO5, codeSTO6, codesto7, codesto8,
    codecci, codecci2, codecci3, codecci4, codecci5, codecci6, codecci7, codecci8,
    codersi, codersi2, codersi3, codersi4, codersi5, codersi6, codersi7, codersi8,
    codemacd, codemacd2, codemacd3, codemacd4, codemacd5, codemacd6, codemacd7, codemacd8;

color ClrAO, ClrAO2, ClrAO3, ClrAO4, ClrAO5, ClrAO6, clrao7, clrao8, 
      ClrAC, ClrMACD, 
      ClrSTO, ClrSTO2, ClrSTO3, ClrSTO4, ClrSTO5, ClrSTO6, clrsto7, clrsto8,
      clrcci, clrcci2, clrcci3, clrcci4, clrcci5, clrcci6, clrcci7, clrcci8,
      clrrsi, clrrsi2, clrrsi3, clrrsi4, clrrsi5, clrrsi6, clrrsi7, clrrsi8,
      clrmacd, clrmacd2, clrmacd3, clrmacd4, clrmacd5, clrmacd6, clrmacd7, clrmacd8;


//bool Alert_=False;
//color Alert_Clr=Red;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
     ObjectCreate("a",OBJ_LABEL,0,0,0);

      
      if(White_Chart_Theme)
            {
                RectClr=RectClr1;
                TxtClr=TxtClr1;
                UpClr=UpClr1;
                DnClr=DnClr1;
            }
       
       DrawPanel();
      
      
//----

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Delete_My_Obj(Pref);
     ObjectDelete("a");   
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    
   int    counted_bars=IndicatorCounted();
//----
ObjectSetText("a","Popup Prices", 20, "Impact", DodgerBlue);
ObjectSet("a",OBJPROP_XDISTANCE,100);
ObjectSet("a",OBJPROP_YDISTANCE,12);
ObjectSet("a", OBJPROP_CORNER, 0);



 //     if (iAC( NULL , Period(), 1)<iAC( NULL , Period(), 0)) 
  //       {codeAC=217; ClrAC=UpClr;} else
  //       {codeAC=218; ClrAC=DnClr;} /* */
       
  //    if( i0.007( NULL , Period(),  
  //          FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 1)< iMACD( NULL , Period(),  
 //           FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE, MODE_MAIN, 0) ) 
  //        {codeMACD=217; ClrMACD=UpClr;} else
  //       {codeMACD=218; ClrMACD=DnClr;} 
         
          
     /* if(Alert_)
            {
               
               if(codeAO==217 && codeAC==217 && codeMACD==217)
                  {Alert(Symbol()+" "+PeriodToStr(Period())
                  +" : AO, AC and MACD are UP at "+TimeToStr(TimeCurrent(),TIME_MINUTES)); 
                  ObjectDelete(Pref+"Unidirection Alert"); }
               
               if(codeAO==218 && codeAC==218 && codeMACD==218)
                  {Alert(Symbol()+" "+PeriodToStr(Period())
                  +" : AO, AC and MACD are DOWN at "+TimeToStr(TimeCurrent(),TIME_MINUTES) ); 
                  ObjectDelete(Pref+"Unidirection Alert"); }
               
            }
          
      if(ObjectFind(Pref+"Unidirection Alert")<0)
            Alert_=!Alert_;
      if(Alert_)Alert_Clr=UpClr; else Alert_Clr=DnClr;*/ 
      
           
      DrawPanel();
//----


   return(0);
  }
//+------------------------------------------------------------------+
int DrawText( string name, datetime T, double P, string Text, int code=0, color Clr=Green,  int Fsize=10, int Win=0)
   { 
      if (name=="") name="Text_"+T;
      
      int Error=ObjectFind(name);// Запрос 
   if (Error!=Win)// Если объекта в ук. окне нет :(
    { 
      ObjectCreate(name, OBJ_TEXT, Win, T, P);
      }
      
      ObjectSet(name, OBJPROP_TIME1, T);
      ObjectSet(name, OBJPROP_PRICE1, P);
      
      if(code==0)
      ObjectSetText(name, Text ,Fsize,"Impact",Clr);
      else
      ObjectSetText(name, CharToStr(code), Fsize,"Wingdings",Clr);
   return(0);
   }
   
//--------------------------------------
void DrawPanel()
{     if(Y<0) Y=0;
      //if(Y>(WindowPriceMax()-WindowPriceMin())/Point-H)
      // Y=(WindowPriceMax()-WindowPriceMin())/Point-H;
      
     // TimeX=Time[WindowFirstVisibleBar()]+X*Period()*60; 
     // PriceY=WindowPriceMax()-Y*Point;
      
     // DrawRect( Pref+"Rect", TimeX, PriceY, TimeX+TimeW ,PriceY-PriceH, RectClr, 1, "");
      
     // DrawText( Pref+"Allow Hand Moving", TimeX+1*Period()*60, PriceY-1*Point, "", 73, HandClr );
      //DrawText( Pref+"Unidirection Alert", TimeX+1*Period()*60, PriceY-(1+StepS)*Point, "", 37, Alert_Clr );
      
     // DrawText( Pref+"AO", TimeX+4*Period()*60, PriceY-1*Point, "AO", 0,TxtClr );//0, 10, 0
    //  DrawText( Pref+"AC", TimeX+4*Period()*60, PriceY-(1+StepS)*Point, "AC", 0,TxtClr );
     // DrawText( Pref+"MACD", TimeX+3*Period()*60, PriceY-(1+2*StepS)*Point, "MACD", 0,TxtClr );
      
     // DrawText( Pref+"AO direction", TimeX+8*Period()*60, PriceY-1*Point, "", codeAO, ClrAO );
     // DrawText( Pref+"AC direction", TimeX+8*Period()*60, PriceY-(1+StepS)*Point, "", codeAC, ClrAC );
     // DrawText( Pref+"MACD direction", TimeX+8*Period()*60, PriceY-(1+2*StepS)*Point, "", codeMACD, ClrMACD );

       DrawLabels(Pref+"AOl",  Corner, X-50, Y+60, symbol1, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO2",  Corner, X-50, Y+100, symbol2, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO3",  Corner, X-50, Y+140, symbol3, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO4",  Corner, X-50, Y+190, symbol4, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO7",  Corner, X-50, Y+230, symbol5, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO8",  Corner, X-50, Y+270, symbol6, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO9",  Corner, X-50, Y+310, symbol7, 0,TxtClr, 0, 10);
       DrawLabels(Pref+"AO10",  Corner, X-50, Y+350, symbol8, 0,TxtClr, 0, 10);
       
       
       DrawLabels(Pref+"Prices",  Corner, X+30, Y+30, "Price", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"OpenD1",  Corner, X+100, Y+30, "Open D1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"HighD1",  Corner, X+170, Y+30, "High D1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"LowD1",  Corner, X+240, Y+30, "Low D1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"RangesD1",  Corner, X+310, Y+30, "Ranges D1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"OpenW1",  Corner, X+410, Y+30, "Open W1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"HighW1",  Corner, X+480, Y+30, "High W1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"LowW1",  Corner, X+550, Y+30, "Low W1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"RangesW1",  Corner, X+620, Y+30, "Ranges W1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"OpenMN1",  Corner, X+720, Y+30, "Open MN1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"HighMN1",  Corner, X+790, Y+30, "High MN1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"LowMN1",  Corner, X+860, Y+30, "Low MN1", 0,TxtClr, 0, 10);
       DrawLabels(Pref+"RangesMN1",  Corner, X+930, Y+30, "Ranges MN1", 0,TxtClr, 0, 10);


//     DrawLabels(Pref+" ",  Corner, X, Y+RowStep, " ",0, TxtClr, 0, FSize);
//     DrawLabels(Pref+"MACD",  Corner, X, Y+RowStep*2, " ", 0,TxtClr, 0, FSize);
     
       DrawLabels(Pref+"AO direction",  Corner, X-ColStep+60, Y+50, "", codeAO,ClrAO, 0, 20);
       DrawLabels(Pref+"AO2 direction",  Corner, X-ColStep+120, Y+50, "", codeAO2,ClrAO2, 0, 20);
       DrawLabels(Pref+"AO3 direction",  Corner, X-ColStep+180, Y+50, "", codeAO3,ClrAO3, 0, 20);
       DrawLabels(Pref+"AO4 direction",  Corner, X-ColStep+240, Y+50, "", codeAO4,ClrAO4, 0, 20);
       DrawLabels(Pref+"AO9 direction",  Corner, X-ColStep+300, Y+50, "", codeAO5,ClrAO5, 0, 20);
       DrawLabels(Pref+"AO1 direction",  Corner, X-ColStep+360, Y+50, "", codeAO6,ClrAO6, 0, 20);
       DrawLabels(Pref+"AO10 direction",  Corner, X-ColStep+420, Y+50, "", codeao7,clrao7, 0, 20);
       DrawLabels(Pref+"AO11 direction",  Corner, X-ColStep+480, Y+50, "", codeao8,clrao8, 0, 20);
       
       DrawLabels(Pref+"AO5 direction",  Corner, X-ColStep+60, Y+100, "", codeSTO,ClrSTO, 0, 20);
       DrawLabels(Pref+"AO6 direction",  Corner, X-ColStep+120, Y+100, "", codeSTO2,ClrSTO2, 0, 20);
       DrawLabels(Pref+"AO7 direction",  Corner, X-ColStep+180, Y+100, "", codeSTO3,ClrSTO3, 0, 20);
       DrawLabels(Pref+"AO8 direction",  Corner, X-ColStep+240, Y+100, "", codeSTO4,ClrSTO4, 0, 20);
       DrawLabels(Pref+"AO81 direction",  Corner, X-ColStep+300, Y+100, "", codeSTO5,ClrSTO5, 0, 20);
       DrawLabels(Pref+"AO82 direction",  Corner, X-ColStep+360, Y+100, "", codeSTO6,ClrSTO6, 0, 20);
       DrawLabels(Pref+"AO87 direction",  Corner, X-ColStep+420, Y+100, "", codesto7,clrsto7, 0, 20);
       DrawLabels(Pref+"AO88 direction",  Corner, X-ColStep+480, Y+100, "", codesto8,clrsto8, 0, 20);

       DrawLabels(Pref+"cci direction",   Corner, X-ColStep+60, Y+150, "",  codecci, clrcci, 0, 20);
       DrawLabels(Pref+"cci2 direction",  Corner, X-ColStep+120, Y+150, "",  codecci2,clrcci2, 0, 20);
       DrawLabels(Pref+"cci3 direction",  Corner, X-ColStep+180, Y+150, "", codecci3,clrcci3, 0, 20);
       DrawLabels(Pref+"cci4 direction",  Corner, X-ColStep+240, Y+150, "", codecci4,clrcci4, 0, 20);
       DrawLabels(Pref+"cci5 direction",  Corner, X-ColStep+300, Y+150, "", codecci5,clrcci5, 0, 20);
       DrawLabels(Pref+"cci6 direction",  Corner, X-ColStep+360, Y+150, "", codecci6,clrcci6, 0, 20);
       DrawLabels(Pref+"cci57 direction",  Corner, X-ColStep+420, Y+150, "", codecci7,clrcci7, 0, 20);
       DrawLabels(Pref+"cci68 direction",  Corner, X-ColStep+480, Y+150, "", codecci8,clrcci8, 0, 20);

       DrawLabels(Pref+"rsi direction",   Corner, X-ColStep+60, Y+200, "",  codersi, clrrsi, 0, 20);
       DrawLabels(Pref+"rsi2 direction",  Corner, X-ColStep+120, Y+200, "",  codersi2,clrrsi2, 0, 20);
       DrawLabels(Pref+"rsi3 direction",  Corner, X-ColStep+180, Y+200, "", codersi3,clrrsi3, 0, 20);
       DrawLabels(Pref+"rsi4 direction",  Corner, X-ColStep+240, Y+200, "", codersi4,clrrsi4, 0, 20);
       DrawLabels(Pref+"rsi5 direction",  Corner, X-ColStep+300, Y+200, "", codersi5,clrrsi5, 0, 20);
       DrawLabels(Pref+"rsi6 direction",  Corner, X-ColStep+360, Y+200, "", codersi6,clrrsi6, 0, 20);
       DrawLabels(Pref+"rsi57 direction",  Corner, X-ColStep+420, Y+200, "", codersi7,clrrsi7, 0, 20);
       DrawLabels(Pref+"rsi68 direction",  Corner, X-ColStep+480, Y+200, "", codersi8,clrrsi8, 0, 20);

       DrawLabels(Pref+"macdrsi direction",   Corner, X-ColStep+60, Y+250, "",  codemacd, clrmacd, 0, 20);
       DrawLabels(Pref+"macdrsi2 direction",  Corner, X-ColStep+120, Y+250, "",  codemacd2,clrmacd2, 0, 20);
       DrawLabels(Pref+"macdrsi3 direction",  Corner, X-ColStep+180, Y+250, "", codemacd3,clrmacd3, 0, 20);
       DrawLabels(Pref+"macdrsi4 direction",  Corner, X-ColStep+240, Y+250, "", codemacd4,clrmacd4, 0, 20);
       DrawLabels(Pref+"macdrsi5 direction",  Corner, X-ColStep+300, Y+250, "", codemacd5,clrmacd5, 0, 20);
       DrawLabels(Pref+"macdrsi6 direction",  Corner, X-ColStep+360, Y+250, "", codemacd6,clrmacd6, 0, 20);
       DrawLabels(Pref+"macdrsi57 direction",  Corner, X-ColStep+420, Y+250, "", codemacd7,clrmacd7, 0, 20);
       DrawLabels(Pref+"macdrsi68 direction",  Corner, X-ColStep+480, Y+250, "", codemacd8,clrmacd8, 0, 20);

//     DrawLabels(Pref+"AC direction",  Corner, X-ColStep, Y+RowStep, "", codeAC, ClrAC, 0, FSize);
//     DrawLabels(Pref+"MACD direction",  Corner, X-ColStep, Y+RowStep*2, "", codeMACD, ClrMACD, 0, FSize);
      
   

      
      

}

//---------------------------------
int DrawRect( string name, datetime T1, double P1,datetime T2, double P2,
                    color Clr=Green, int Width=1, string Text="", int Win=0)
   { 
      if (name=="") name="Text_"+T1;
      
      int Error=ObjectFind(name);// Запрос 
    if (Error!=Win)// Если объекта в ук. окне нет :(
    {  
      ObjectCreate(name, OBJ_RECTANGLE, 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_BACK, false);
    ObjectSet(name,OBJPROP_STYLE,0);
    ObjectSet(name, OBJPROP_COLOR , Clr);
    ObjectSet(name, OBJPROP_WIDTH , Width);
    ObjectSetText(name,Text);
    

    return(0);
    }
///-----------------------
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);
         }                
        
     }
   }
///=====================
string PeriodToStr(int Per)
   {
      switch(Per)                 // Расчёт  для..     
      {                              // .. различных ТФ     
      case     1: return("M1"); break;// Таймфрейм М1      
      case     5: return("M5"); break;// Таймфрейм М5      
      case    15: return("M15"); break;// Таймфрейм М15      
      case    30: return("M30"); break;// Таймфрейм М30      
      case    60: return("H1"); break;// Таймфрейм H1      
      case   2340: return("H4"); break;// Таймфрейм H4      
      case  1440: return("D1"); break;// Таймфрейм D1      
      case 10080: return("W1"); break;// Таймфрейм W1      
      case 43200: return("МN"); break;// Таймфрейм МN     
      }
 return(0);
 }
//==================================
/*int CalculeH()
   {
      switch(Period())                 // Расчёт  для..     
      {                              // .. различных ТФ     
      case     1: return(15); break;// Таймфрейм М1      
      case     5: return(15); break;// Таймфрейм М5      
      case    15: return(30); break;// Таймфрейм М15      
      case    30: return(45); break;// Таймфрейм М30      
      case    60: return(60); break;// Таймфрейм H1      
      case   2340: return(180); break;// Таймфрейм H4      
      case  1440: return(270); break;// Таймфрейм D1      
      case 10080: return(450); break;// Таймфрейм W1      
      case 43200: return(900); break;// Таймфрейм МN     
      }   
    }*/
    
int DrawLabels(string name, int corn, int iX, int iY, string Text, int code=0, color Clr=Green, int Win=0, int FSize1=10)
   {
     int Error=ObjectFind(name);// Запрос 
   if (Error!=Win)// Если объекта в ук. окне нет :(
    {  
      ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Создание объекта
    }
     
     ObjectSet(name, OBJPROP_CORNER, corn);     // Привязка к углу   
     ObjectSet(name, OBJPROP_XDISTANCE, iX);  // Координата Х   
     ObjectSet(name,OBJPROP_YDISTANCE,iY);// Координата Y   
     ObjectSetText(name,Text,FSize1,"Arial",Clr);
          if(code==0)
      ObjectSetText(name, Text ,FSize1,"Arial",Clr);
      else
      ObjectSetText(name, CharToStr(code), FSize1,"Wingdings",Clr);
   return(0);
   }