#property copyright "Copyright 2018"
#property link      "Roman"
#property version   "1.00"
#property strict

extern double lotAmount = 0.1;
extern double takeProfit = 0;
extern double stopLoss = 0;
extern double minBalanceToTrade = 1;

extern int timeStartHour = 9;
extern int timeStartMin = 0;
extern int timeFinishHour = 22;
extern int timeFinishMin = 52;

string boExpiry = "Roman"; 

string timeStart;
string timeFinish;

int MagicNumber;
int resultBO;

bool buyOrderBool = False;
bool sellOrderBool = False;

int OnInit()
  {
    MagicNumber = encode(); 
    lotAmount = MathAbs(MathMin(lotAmount,1000));  
    
    timeStartHour = MathMin(timeStartHour,23);
    timeStartMin = MathMin(timeStartMin,59);
    
    timeFinishHour = MathMin(timeFinishHour,23);
    timeFinishMin = MathMin(timeFinishMin,59);   
    
    timeStart = IntegerToString(timeStartHour,2,'0') + ":" + IntegerToString(timeStartMin,2,'0');
    timeFinish = IntegerToString(timeFinishHour,2,'0')  + ":" + IntegerToString(timeFinishMin,2,'0') ;
    
	ObjectCreate("ObjName", OBJ_LABEL, 0, 0, 0);
	ObjectSetText("ObjName","EA Test / LOT amount  = "+DoubleToString(lotAmount,2) ,10, "Verdana", Red);
	ObjectSet("ObjName", OBJPROP_CORNER, 0);
	ObjectSet("ObjName", OBJPROP_XDISTANCE, 20);
	ObjectSet("ObjName", OBJPROP_YDISTANCE, 20);

	ObjectCreate("ObjName3", OBJ_LABEL, 0, 0, 0);
	ObjectSetText("ObjName3","Minimum Balance to trade = "+DoubleToString(minBalanceToTrade,2)+" "+AccountCurrency() ,10, "Verdana", Red);
	ObjectSet("ObjName3", OBJPROP_CORNER, 0);
	ObjectSet("ObjName3", OBJPROP_XDISTANCE, 20);
	ObjectSet("ObjName3", OBJPROP_YDISTANCE, 40);

	ObjectCreate("ObjName4", OBJ_LABEL, 0, 0, 0);
	ObjectSetText("ObjName4","Trading TIME FRAME = "+DoubleToString(PeriodSeconds(Period()),0)+"  Seconds" ,10, "Verdana", Red);
	ObjectSet("ObjName4", OBJPROP_CORNER, 0);
	ObjectSet("ObjName4", OBJPROP_XDISTANCE, 20);
	ObjectSet("ObjName4", OBJPROP_YDISTANCE, 60);

	ObjectCreate("ObjName5", OBJ_LABEL, 0, 0, 0);
	ObjectSetText("ObjName5","TimeStart : "+timeStart+" - TimeFinish : "+timeFinish ,10, "Verdana", Red);
	ObjectSet("ObjName5", OBJPROP_CORNER, 0);
	ObjectSet("ObjName5", OBJPROP_XDISTANCE, 20);
	ObjectSet("ObjName5", OBJPROP_YDISTANCE, 80);
   
 
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {

if (Hour()>=timeStartHour && Hour()<= timeFinishHour && Minute()>=timeStartMin && Minute() <= timeFinishMin )  
   { 
    ObjectCreate("ObjName6", OBJ_LABEL, 0, 0, 0);
    ObjectSetText("ObjName6","Expert Advisor TRADING..." ,10, "Verdana", Red);
    ObjectSet("ObjName6", OBJPROP_CORNER, 0);
    ObjectSet("ObjName6", OBJPROP_XDISTANCE, 20);
    ObjectSet("ObjName6", OBJPROP_YDISTANCE, 100);
    
    
    double buffer_3 = iCustom(NULL,PERIOD_CURRENT,"RomanA",2,0);   // >0.0 <-0.0
    double buffer_5 = iCustom(NULL,PERIOD_CURRENT,"RomanB",2,0);   // >0.0 <-0.0
    
 
    bool buyRule    =   (buffer_5 > buffer_3);   // && (buffer_3 != EMPTY_VALUE) && (buffer_0 != EMPTY_VALUE) && (buffer_1 == EMPTY_VALUE);  //(buffer_0 != EMPTY_VALUE); !<1 && !>1
    bool sellRule   =   (buffer_5 < buffer_3);
    
    bool buyExit    =   (buffer_5 < buffer_3);
    bool sellExit   =   (buffer_5 > buffer_3); 
      
   if (AccountFreeMargin() >= minBalanceToTrade)
      {
      if (buyRule && TotalOrdersCount()==0) //  
         {   
          resultBO=OrderSend(NULL,OP_BUY,lotAmount,Ask,0,0,0,boExpiry,MagicNumber,0,Blue);
          buyOrderBool = True;  
          }
      
      
      if (sellRule && TotalOrdersCount()==0) // 
         {   
          resultBO=OrderSend(NULL,OP_SELL,lotAmount,Bid,0,0,0,boExpiry,MagicNumber,0,Red);  
          sellOrderBool = True; 
          }

     if ( (sellExit && sellOrderBool)  && TotalOrdersCount()>0) 
         {   
          CloseCurrentTrade(); 
           sellOrderBool = False;
          }

     if ( (buyExit && buyOrderBool)  && TotalOrdersCount()>0) 
         {   
          CloseCurrentTrade(); 
           buyOrderBool = False;
          }
      }
   }
else
   {
    ObjectCreate("ObjName6", OBJ_LABEL, 0, 0, 0);
    ObjectSetText("ObjName6","Expert Advisor Disabled !" ,10, "Verdana", Red);
    ObjectSet("ObjName6", OBJPROP_CORNER, 0);
    ObjectSet("ObjName6", OBJPROP_XDISTANCE, 20);
    ObjectSet("ObjName6", OBJPROP_YDISTANCE, 100);   
   }
  }

int CloseCurrentTrade()
{
  int result=0;
  bool retrunSelect = false;
  for(int i=0;i<OrdersTotal();i++)
  {
     retrunSelect = OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result = OrderClose( OrderTicket(), OrderLots(),OrderClosePrice(), 50, Red );
   }
  return (result);
}

    
int TotalOrdersCount()
{
  int result=0;
  bool retrunSelect = false;
  for(int i=0;i<OrdersTotal();i++)
  {
     retrunSelect = OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;
   }
  return (result);
}
   
int encode() {    
   string GetSymbol=Symbol();
   int MNSymbol = 0,MNSymbolCalc,MagicNumberLocal;
   for(int a=0;a<6;a++)
   {
   MNSymbolCalc=StringGetChar(GetSymbol, a);
   MNSymbolCalc=((MNSymbolCalc-=1)*(MathPow(10,(a))));
   MNSymbol = MNSymbol+MNSymbolCalc;
   } 
   int MNPeriod=1;   
   int MNEACode=100000;
   MagicNumberLocal=MNSymbol+MNPeriod+MNEACode;
   return MagicNumberLocal;
}
