//+------------------------------------------------------------------+
//|                                    i - American_Open_Close_2.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Sashgrin"
#property link      ""

#property indicator_chart_window
//--- input parameters
extern int       смещение_UTC = 3;
extern int       дней_истории = 30;

extern bool Европа_Open = True;
extern bool Америка_Open = True;
extern bool Америка_Level = False;
extern bool Америка_Close = True;
extern bool Америка_Close_1 = False;
extern bool Америка_Level1 = False;

extern color цвет_Amer_Open = DarkBlue;
extern color цвет_Amer_Close = Red;
extern color цвет_Amer_Close2 = Lime;
extern color цвет_Eur_Open = DarkTurquoise;
extern color цвет_Amer_Close3 = Chocolate;

datetime new_bar;
string i_name = "i-Amer_OC";
string  o_name;


datetime T_0, T_1, day_00;
double price;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  for (int i = ObjectsTotal()-1; i >= 0; i--)     
      if ( StringSubstr(ObjectName(i), 0, StringLen(i_name)) == i_name)
         ObjectDelete(ObjectName(i)); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{

if (new_bar == Time[0])   return(0); 
  else   new_bar = Time[0]; 

int limit = дней_истории;

// if (limit>100) limit=100;


int bar_0;

// Euro 8:00 - 16:30
// Amer 14:30 - 21:00 

for (int i=0; i<limit; i++)
{
//===  i - номер дня

day_00 = iTime(NULL, PERIOD_D1, i) ; // начало и-го дня

// открытие Европы
T_0 = day_00 + (7 + смещение_UTC)*60*60 ; 
T_1 = T_0 + 5.5*60*60 ;

bar_0 = iBarShift(NULL, PERIOD_M15, T_0, true);
if ( bar_0 >= 0 ) 
  {
   price = iOpen(NULL, PERIOD_M15, bar_0);
   if (Европа_Open) 
     Draw_Level("_E_Open_" + i, цвет_Eur_Open, price);
   }

// открытие Америки
T_0 = day_00 + (13.5+смещение_UTC)*60*60 ; 
T_1 = T_0 + 5.5*60*60 ; //  + 6.5*60*60 ;

bar_0 = iBarShift(NULL, PERIOD_M15, T_0, true);
if ( bar_0 >= 0 ) 
  {
   price = iOpen(NULL, PERIOD_M15, bar_0);
   if (Америка_Open) 
   {
         Draw_Level("_A_Open_" + i, цвет_Amer_Open, price);
           if (Америка_Level)    
     {
     Draw_Level("_A_Close_" + i + "V", цвет_Amer_Close3, price+34*Point);
               Draw_Level("_A_Close_" + i + "N", цвет_Amer_Close3, price-34*Point);
                    Draw_Level("_A_Close_" + i + "z", цвет_Amer_Close3, price+55*Point);
                         Draw_Level("_A_Close_" + i + "x", цвет_Amer_Close3, price-55*Point);
                              Draw_Level("_A_Close_" + i + "c", цвет_Amer_Close3, price+89*Point);
                                   Draw_Level("_A_Close_" + i + "b", цвет_Amer_Close3, price-89*Point);
                                   }
   }
   }

// закрытие Америки
T_0 = day_00 + (20+смещение_UTC)*60*60 ; 
T_1 = T_0 + 10*60*60 ;
bar_0 = iBarShift(NULL, PERIOD_M15, T_0-15*60, true);
if ( bar_0 >= 0 ) 
  {
   price = iClose(NULL, PERIOD_M15, bar_0);
   if (Америка_Close)
   {
     Draw_Level("_A_Close_" + i, цвет_Amer_Close, price);
     if (Америка_Level1) 
   {
          Draw_Level("_A_Close_" + i + "V", цвет_Amer_Close3, price+34*Point);
               Draw_Level("_A_Close_" + i + "N", цвет_Amer_Close3, price-34*Point);
                    Draw_Level("_A_Close_" + i + "z", цвет_Amer_Close3, price+55*Point);
                         Draw_Level("_A_Close_" + i + "x", цвет_Amer_Close3, price-55*Point);
                              Draw_Level("_A_Close_" + i + "c", цвет_Amer_Close3, price+89*Point);
                                   Draw_Level("_A_Close_" + i + "b", цвет_Amer_Close3, price-89*Point);
    }
    }                   
   }

// закрытие Азии
T_0 = day_00 + (15.5+смещение_UTC)*60*60 ; 
T_1 = T_0 + 9*60*60 ;
bar_0 = iBarShift(NULL, PERIOD_M15, T_0-15*60, true);
if ( bar_0 >= 0 ) 
  {
   price = iClose(NULL, PERIOD_M15, bar_0);
   if (Америка_Close_1) 
     Draw_Level("_A_Close1_" + i, цвет_Amer_Close2, price);
   }



}



return(0);
}

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

void Draw_Level(string name, color цвет, double price1)
{
if (TimeDayOfWeek(T_1)==6)
  T_1 = T_1 + 2*24*60*60;

o_name = i_name + name;
if (ObjectFind(o_name) == -1)
  ObjectCreate(o_name,OBJ_TREND,0,T_0,price1,T_1,price1);   
ObjectSet(o_name,OBJPROP_COLOR, цвет);
ObjectSet(o_name,OBJPROP_STYLE,STYLE_SOLID); // level_style
ObjectSet(o_name,OBJPROP_WIDTH,2);
ObjectSet(o_name, OBJPROP_TIME1, T_0);
ObjectSet(o_name, OBJPROP_TIME2, T_1);
ObjectSet(o_name, OBJPROP_PRICE1, price1);
ObjectSet(o_name, OBJPROP_PRICE2, price1);
ObjectSet(o_name,OBJPROP_RAY,false);
}