//+------------------------------------------------------------------+
//|                                       MTF_OverLay Chart(yyr).mq4 Ver.1.10 |
//|                                      Copyright© 2006-2007 S.B.T. |
//|                                     http://sufx.core.t3-ism.net/ |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
//|  This script is free to use/distribute/modify and re-distribute. |
//|                                  (Limited to noncommercial use.)
//|  Thank you for S.B.T.,yangelong redited from your OverLay Chart.mq4        
//+------------------------------------------------------------------+


#property copyright "Copyright© 2006 S.B.T."
#property link      "http://sufx.core.t3-ism.net/"

#property indicator_chart_window
#property indicator_buffers 4

#property indicator_color1 Black//Crimson
#property indicator_color2 Black//LimeGreen
#property indicator_color3 Black//Red
#property indicator_color4 Black//Lime

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 4
#property indicator_width4 4


//--------------------------------

//extern string SubSymbol = "EURUSD";
  extern string SubSymbol = "USDJPY";

//  extern int    OCHDrawRange=80;
  extern int    OCHTimeframe=1;    // 1440   // 10080
  extern bool   OCHMirroring = False;
  extern int    OCHGrid=10;
  extern int    OCHSnapPips=10;
  
  
//extern string  MUPair="EURUSD";
extern string  OCHPair1  = "USDJPY";
extern string  OCHPair2  = "USDCAD";
extern string  OCHPair3  = "AUDUSD";
extern string  OCHPair4  = "GBPUSD";
extern string  OCHPair5  = "USDCHF";
extern string  OCHPair6  = "GBPCAD";
extern string  OCHPair7  = "EURGBP";
extern string  OCHPair8  = "EURJPY";
extern string  OCHPair9  = "EURCHF";
extern string  OCHPair10  = "GBPCHF";
extern string  OCHPair11  = "GBPJPY";
extern string  OCHPair12  = "EURAUD";
extern string  OCHPair13  = "EURGBP";
extern string  OCHPair14  = "EURJPY";
extern string  OCHPair15  = "EURCAD";
extern string  OCHPair16  = "AUDCAD";
extern string  OCHPair17  = "AUDJPY";
extern string  OCHPair18  = "AUDNZD";
extern string  OCHPair19  = "AUDCHF";
extern string  OCHPair20  = "EURDKK";
extern string  OCHPair21  = "EURNZD";
extern string  OCHPair22  = "NZDCHF";
extern string  OCHPair23  = "GBPNZD";
extern string  OCHPair24  = "NZDUSD";
extern string  OCHPair25  = "USDDKK";
extern string  OCHPair26  = "USDMXN";
extern string  OCHPair27  = "USDPLN";
extern string  OCHPair28  = "USDSGD";
extern string  OCHPair29  = "USDZAR";
extern string  OCHPair30  = "USDCZK";  
  
  
  
  
  
  

//----------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

   double OCHPrice[1000];
   string OCHObject[1000];
   datetime OCHTime[1000];




//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+


int init() 

   {

   //IndicatorShortName( "OverLay Chart( " + SubSymbol + " )" );
   IndicatorShortName( "OCH" );

   SetIndexBuffer( 0, ExtMapBuffer1 );
   SetIndexBuffer( 1, ExtMapBuffer2 );
   SetIndexBuffer( 2, ExtMapBuffer3 );
   SetIndexBuffer( 3, ExtMapBuffer4 );

   SetIndexStyle( 0, DRAW_NONE, DRAW_NONE, 1, indicator_color1 );
   SetIndexStyle( 1, DRAW_NONE, DRAW_NONE, 1, indicator_color1 );
   SetIndexStyle( 2, DRAW_NONE, DRAW_NONE, 2, indicator_color1 );
   SetIndexStyle( 3, DRAW_NONE, DRAW_NONE, 2, indicator_color1 );

   SetIndexEmptyValue( 0, 0.0 );
   SetIndexEmptyValue( 1, 0.0 );
   SetIndexEmptyValue( 2, 0.0 );
   SetIndexEmptyValue( 3, 0.0 );

   return( 0 );
   
   }









//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

  int deinit() 

  {
  
   //-----------------------------------------
   // for(int i=OCHDrawRange; i>-1; i--) ObjectDelete( "OCH" + i );

   ObjectsDeleteAll();
   return(0);
     
   }





//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start() {
   int _BarsCount;
   double _CurRangeHigh, _CurRangeLow, _CurRangeCenter;
   double _SubRangeHigh, _SubRangeLow, _SubRangeCenter;
   double _SubPoint, _SubDigit;
   double _SubOpen, _SubHigh, _SubLow, _SubClose;
   double _PipsRatio;
   double _GridPips, _GridPrice;
   int _i;
   datetime _SubTime;
   int OCHDrawRange=80;


   //Initialize Buffers
	RefreshRates();

   ArrayInitialize( ExtMapBuffer1, 0.0 );
   ArrayInitialize( ExtMapBuffer2, 0.0 );
   ArrayInitialize( ExtMapBuffer3, 0.0 );
   ArrayInitialize( ExtMapBuffer4, 0.0 );


   //Calculate Visible Bars
   _BarsCount = BarsPerWindow() + 1;
   int _FirstBar = FirstVisibleBar();
   int _LastBar = _FirstBar - _BarsCount + 1;
   if ( _LastBar < 0 ) {
      _LastBar = 0;
      _BarsCount = _FirstBar + 1;  // BarsCount 41    FirstBar40
   }

   //Print("BarsCount - "+_BarsCount+"    LastBar - "+_LastBar);


   ObjectsDeleteAll();

   //---------------------------------------------------- Start Pairs Display

 	for( int i=1; i<12; i++) 
   {  
   
   //Sleep(1);
   
   if (i==1) SubSymbol=OCHPair1;
   if (i==2) SubSymbol=OCHPair2;
   if (i==3) SubSymbol=OCHPair3;
   if (i==4) SubSymbol=OCHPair4;
   if (i==5) SubSymbol=OCHPair5;
   if (i==6) SubSymbol=OCHPair6;
   if (i==7) SubSymbol=OCHPair7;
   if (i==8) SubSymbol=OCHPair8;
   if (i==9) SubSymbol=OCHPair9;
   if (i==10) SubSymbol=OCHPair10;
   if (i==11) SubSymbol=OCHPair11;
   if (i==12) SubSymbol=OCHPair12;
   if (i==13) SubSymbol=OCHPair13;
   if (i==14) SubSymbol=OCHPair14;
   if (i==15) SubSymbol=OCHPair15;
   if (i==16) SubSymbol=OCHPair16;
   if (i==17) SubSymbol=OCHPair17;
   if (i==18) SubSymbol=OCHPair18;
   if (i==19) SubSymbol=OCHPair19;
   if (i==20) SubSymbol=OCHPair20;
   if (i==21) SubSymbol=OCHPair21;
   if (i==22) SubSymbol=OCHPair22;
   if (i==23) SubSymbol=OCHPair23;
   if (i==24) SubSymbol=OCHPair24;
   if (i==25) SubSymbol=OCHPair25;
   if (i==26) SubSymbol=OCHPair26;
   if (i==27) SubSymbol=OCHPair27;
   if (i==28) SubSymbol=OCHPair28;
   if (i==29) SubSymbol=OCHPair29;
   if (i==30) SubSymbol=OCHPair30;
   
 
	for( _i=OCHDrawRange+1; _i>=0; _i--) 
   {  
   
   
   
   

       //------------------------------------------------------------Calculate Chart Ratio
       _CurRangeHigh = High[Highest(NULL, 0, MODE_HIGH, _BarsCount, _LastBar)];
       _CurRangeLow = Low[Lowest(NULL, 0, MODE_LOW, _BarsCount, _LastBar)];
       _CurRangeCenter = ( _CurRangeHigh + _CurRangeLow ) / 2;

       if ( OCHMirroring ) {
          _SubRangeHigh = iLow( SubSymbol, OCHTimeframe, Lowest( SubSymbol, OCHTimeframe, MODE_LOW, _BarsCount, _LastBar ) );
          _SubRangeLow = iHigh( SubSymbol, OCHTimeframe, Highest( SubSymbol, OCHTimeframe, MODE_HIGH, _BarsCount, _LastBar ) );
       } else {
          _SubRangeHigh = iHigh( SubSymbol, OCHTimeframe, Highest( SubSymbol, OCHTimeframe, MODE_HIGH, _BarsCount, _LastBar ) );
          _SubRangeLow = iLow( SubSymbol, OCHTimeframe, Lowest( SubSymbol, OCHTimeframe, MODE_LOW, _BarsCount, _LastBar ) );
       }

       _SubRangeCenter = ( _SubRangeHigh + _SubRangeLow ) / 2;
       _SubPoint = MarketInfo( SubSymbol, MODE_POINT );
       _SubDigit = MarketInfo( SubSymbol, MODE_DIGITS );

       _PipsRatio = ( _CurRangeHigh - _CurRangeLow )  / ( _SubRangeHigh - _SubRangeLow );

       _GridPips = ( _SubRangeHigh - _SubRangeLow ) / OCHGrid;
       _GridPips = MathRound( ( _SubRangeHigh - _SubRangeLow ) / OCHGrid / ( _SubPoint * OCHSnapPips ) ) * ( _SubPoint * OCHSnapPips );


       //--------------------------------------------------------------------










         _SubOpen  = iOpen( SubSymbol, OCHTimeframe, _i ) - _SubRangeCenter;
         _SubHigh  = iHigh( SubSymbol, OCHTimeframe, _i ) - _SubRangeCenter;
         _SubLow   =  iLow( SubSymbol, OCHTimeframe, _i ) - _SubRangeCenter;
         _SubClose =iClose( SubSymbol, OCHTimeframe, _i ) - _SubRangeCenter;
         _SubTime  = iTime( SubSymbol, OCHTimeframe, _i );
         //Print(_SubTime);
         
         //----------------------------------------------
         if ( _SubOpen < _SubClose ) 
         {
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
         } else {
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
         }

         ExtMapBuffer4[_i] = _CurRangeCenter + _SubClose * _PipsRatio;
         ExtMapBuffer3[_i] = _CurRangeCenter + _SubOpen * _PipsRatio;
         //-----------------------------------------------
         
         
         OCHObject[_i]=(SubSymbol+_i);
          OCHPrice[_i]=_CurRangeCenter + _SubOpen * _PipsRatio;
           OCHTime[_i]=_SubTime;
         
         
         //--------------------------
         if(!ObjectCreate(OCHObject[_i],OBJ_TRIANGLE,0,0,0,0,0))
       
         {
           Print("OCH Error - Code #",GetLastError());
           return(0);

         }else{
         

            ObjectCreate(OCHObject[_i],OBJ_TRIANGLE,0,0,0,0,0);
         
            //Print("Time -"+TimeLocal()+" Map Buffer "+ExtMapBuffer3[_i]);
            
            //ObjectSet(OCHObject[_i],OBJPROP_TIME1,Time[_i]);ObjectSet(OCHObject[_i],OBJPROP_TIME2,Time[_i+1]);
            //ObjectSet(OCHObject[_i],OBJPROP_PRICE1,ExtMapBuffer3[_i]);ObjectSet(OCHObject[_i],OBJPROP_PRICE2,ExtMapBuffer4[_i+1]);
            //ObjectSet(OCHObject[_i],OBJPROP_COLOR,trendcol);
            ObjectSet(OCHObject[_i],OBJPROP_WIDTH,1);
            //ObjectSet(OCHObject[_i],OBJPROP_STYLE,STYLE_SOLID);
         

                // ObjectCreate(OCHObject[_i],OBJ_TREND,0,0,0,0,0);
                //ObjectCreate(OCHObject[_i],OBJ_ARROW,0,0,0,0,0);
                ObjectSet(OCHObject[_i],OBJPROP_ARROWCODE,167);
                //OBJPROP_STYLE
                
                ObjectSet(OCHObject[_i],OBJPROP_TIME1,Time[_i]);
                ObjectSet(OCHObject[_i],OBJPROP_PRICE1,OCHPrice[_i]);
                
                
                ObjectSet(OCHObject[_i],OBJPROP_TIME2,Time[_i+1]);  
                ObjectSet(OCHObject[_i],OBJPROP_PRICE2,OCHPrice[_i+1]);
                
                ObjectSet(OCHObject[_i],OBJPROP_TIME3,Time[_i]);  
                ObjectSet(OCHObject[_i],OBJPROP_PRICE3,(OCHPrice[_i]+0.0001));                
                
                
                //ObjectSet(OCHObject[_i],OBJPROP_STYLE,STYLE_SOLID);
                //ObjectSet(OCHObject[_i],OBJPROP_WIDTH,3);
                //ObjectSet(OCHObject[_i],OBJPROP_COLOR, Blue);
   
                ObjectSetText(OCHObject[_i],SubSymbol );
           
           
           // ObjectCreate(OCHObject[_i],OBJ_TREND,0,0,0,0,0);
          //  ObjectSet(OCHObject[_i],OBJPROP_TIME1,Time[_i]);
          //  ObjectSet(OCHObject[_i],OBJPROP_TIME2,Time[_i+1]);
          //  ObjectSet(OCHObject[_i],OBJPROP_PRICE1,High[_i]);
          //  ObjectSet(OCHObject[_i],OBJPROP_PRICE2,High[_i+1]);
          //  //ObjectSet(OCHObject[_i],OBJPROP_COLOR,Blue);
          //  ObjectSet(OCHObject[_i],OBJPROP_WIDTH,1);
                
                
                
                if (i==1) ObjectSet(OCHObject[_i],OBJPROP_COLOR, White);
                if (i==2) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Red);
                if (i==3) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Blue);
                if (i==4) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Lime);
                if (i==5) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Pink);
                if (i==6) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Magenta);
                if (i==7) ObjectSet(OCHObject[_i],OBJPROP_COLOR, MediumSeaGreen);
                if (i==8) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Yellow);
                if (i==9) ObjectSet(OCHObject[_i],OBJPROP_COLOR, Orange);
                if (i==10) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Tan);
                if (i==11) ObjectSet(OCHObject[_i],OBJPROP_COLOR,SteelBlue);
                if (i==12) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Gold);
                if (i==13) ObjectSet(OCHObject[_i],OBJPROP_COLOR,DodgerBlue);
                if (i==14) ObjectSet(OCHObject[_i],OBJPROP_COLOR,MediumSeaGreen);
                if (i==15) ObjectSet(OCHObject[_i],OBJPROP_COLOR,DarkOrange);
                if (i==16) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Gold);
                if (i==17) ObjectSet(OCHObject[_i],OBJPROP_COLOR,SeaGreen);
                if (i==18) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Tan);
                if (i==19) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Brown);
                if (i==20) ObjectSet(OCHObject[_i],OBJPROP_COLOR,FireBrick);
                if (i==21) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Lime);
                if (i==22) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Magenta);
                if (i==23) ObjectSet(OCHObject[_i],OBJPROP_COLOR,White);
                if (i==24) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Orange);
                if (i==25) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Red);
                if (i==26) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Yellow);
                if (i==27) ObjectSet(OCHObject[_i],OBJPROP_COLOR,MediumSeaGreen);
                if (i==28) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Tan);
                if (i==29) ObjectSet(OCHObject[_i],OBJPROP_COLOR,DodgerBlue);   //glitched grid
                if (i==30) ObjectSet(OCHObject[_i],OBJPROP_COLOR,Crimson);
                
                //    FireBrick     Brown    PaleVioletRed    DodgerBlue
                //  MediumSeaGreen     OliveDrab    CornflowerBlue
                //
                
        }  
      }
 
      //-------------------------------------------------------------------------------------------- 
       
       
 
 
   } //-------- End PairsDisplay
 
 
   

   return(0);
}

//+------------------------------------------------------------------+

