//+------------------------------------------------------------------+
//|                                       Operaciones periodicas.mq4 |
//|                                                     Pablo Patiño |
//|                                          pablo_indie@hotmail.com |
//+------------------------------------------------------------------+
#property copyright "Pablo Patiño"
#property link      "pablo_indie@hotmail.com"

extern string strtipo="Tipo de orden Comprar/Vender";
extern string tipoorden="Comprar";
extern string strop="Número de órdenes a abrir";
extern int op=2;
extern string SLstr="StopLoss en pips";
extern int SLex=0;
extern string STstr="Take Profit en pips";
extern int TPex=0;
extern string strLotes="Lotes a comprar por operación";
extern double Lotes=0.1;
extern string Hora_apertura="16:00";
extern string Hora_cierre="11:30";
string Estado;

int TO;
int numero_EAs;
double Precio;
int coloracion;
string aabrir;
string EstadoMM;
double SL;
double TP;

datetime haperturaconv;
datetime hcierreconv;

int init ()
   {
   //-------------------------------------CGV CHECK
   int numero_EAs=GlobalVariableGet("numEA");
   numero_EAs++;
   GlobalVariableSet("numEA",numero_EAs);
   
   //-------------------------------------PROCESOS INTERNOS
   
   double Digitos;
   switch(Digits)
{
case 0:Digitos=0.1;break;
case 1:Digitos=1;break;
case 2:Digitos=10;break;
case 3:Digitos=100;break;
case 4:Digitos=1000;break;
case 5:Digitos=10000;break;
case 6:Digitos=100000;break;
default:break;
}

   if (tipoorden=="Compra")
         {TO=OP_BUY;Precio=Ask;coloracion=Green;if (SLex!=0){SL=Ask-(SLex/Digitos);if(TPex!=0){TP=Ask+(TPex/Digitos);}}}
   else 
      if (tipoorden=="Vender")
         {TO=OP_SELL;Precio=Bid;coloracion=Red;if (SLex!=0){SL=Bid+(SLex/Digitos);if(TPex!=0){TP=Bid-(SLex/Digitos);}}}
         
//-----MONITORIZACIóN
haperturaconv=StrToTime(Hora_apertura);
hcierreconv=StrToTime(Hora_cierre);

string Testerror="test";
datetime Errortiming=StrToTime(Testerror);
        
   if (haperturaconv!=Errortiming||hcierreconv!=Errortiming)
         {Estado="Operación "+tipoorden+" programada a las "+TimeHour(Hora_apertura)+":"+TimeMinute(Hora_apertura)+"\ncon cierre a las "+TimeHour(Hora_cierre)+":"+TimeMinute(Hora_cierre)+".";}
   else  {Estado="Datos inválidos para procesar fecha de apertura o cierre.\n"+"Revisar datos externos y cambiar por formato 00:00";aabrir="Se abrirán "+op+" operaciones";}
   

  
   }

int start()
   {
 int opvinc;
 double Lotesvinc;
//----------------------------------CHECK MM-------------------------------------------------
 if (GlobalVariableCheck("MMactivated")==true){int opGV=GlobalVariableGet("opxEA");opvinc=opGV;double LotesGV=GlobalVariableGet("LotesEAs");Lotesvinc=LotesGV;EstadoMM="Money Management activado    EA"+DoubleToStr(GlobalVariableGet("numEA"),0);}
  else {EstadoMM="";Lotesvinc=Lotes;opvinc=op;}

//----------------------------------CONVERSIóN DE DATOS------------------------------------------------

haperturaconv=StrToTime(Hora_apertura);
hcierreconv=StrToTime(Hora_cierre);

//----------------------------------PROTOCOLO APERTURA OPERACIONES----------------------------------------
if (TimeHour(TimeLocal())==TimeHour(haperturaconv)&&TimeMinute(TimeLocal())==TimeMinute(haperturaconv))
   {
   int a;
   for (;OrdersTotal()<opvinc;)
      {
      OrderSend(Symbol(),TO,Lotesvinc,Precio,5,SL,TP,NULL,0,0,coloracion);Estado=OrdersTotal()+" operaciones abiertas correctamente";aabrir="";}
   }
//----------------------------------PROTOCOLO CIERRE OPERACIONES----------------------------------------  
if (TimeHour(TimeLocal())==TimeHour(hcierreconv)&&TimeMinute(TimeLocal())==TimeMinute(hcierreconv))
   {
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
            {if (OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,White)==true)
                  {Estado="Operaciones cerradas correctamente";aabrir="";}
               else 
                  {Estado="Error cerrando operaciones "+GetLastError();}
             }
   else {Estado="Todas las operaciones cerradas";}     
                  
    }
               
   
Comment ("\nÓRDENES PERIÓDICAS\n"+
EstadoMM+
"\n"+
"\n"+""+Estado+
"\n"+aabrir+
"\n"+"Hora Local:   "+"     "+TimeToStr (TimeLocal(),TIME_MINUTES)+
"\n"+"Hora Servidor:   "+TimeToStr (TimeCurrent(),TIME_MINUTES)+
"\n"+"\n"+"Se abrirán "+opvinc+" operaciones de "+DoubleToStr(Lotesvinc,2)+" Lotes cada una."
);
  
  
   

   }
   
int deinit()
{

int restarop=GlobalVariableGet("numEA");
restarop--;
GlobalVariableSet("numEA",restarop);

if (restarop==0&&GlobalVariableCheck("MMactivated")==true){GlobalVariableDel("MMactivated");}

}

