//+------------------------------------------------------------------+
//|                                   Programar operación manual.mq4 |
//|                                                     Pablo Patiño |
//|                                          pablo_indie@hotmail.com |
//+------------------------------------------------------------------+
#property copyright "Pablo Patiño"
#property link      "pablo_indie@hotmail.com"

//Variables externas
extern string tipo="Escribe que tipo de operación quieres hacer Comprar/Vender)";
extern string tipoop="Comprar";
extern string cant="Escribe aqui cúantas operaciones deseas abrir";
extern int op=2;
extern string Lotsstr="Volúmen Lotes";
extern double Lotes=0.01;
extern string SLstr="StopLoss en pips";
extern int SLex=0;
extern string STstr="Take Profit en pips";
extern int TPex=0;
extern string str="Escribe a que horadia,mes y año quieres ABRIR la operación";
extern string Horaapertura="0000.00.00 00:00";
extern string _str="Escribe a que horadia,mes y año quieres CERRAR la operación";
extern string Horacierre="0000.00.00 00:00";

//Variables internas
int tipoop2;
int tipoopprice;
string messtring;
string _messtring;
double Digitos;

//Monitorización
string Estado_apertura;
string Estado_cierre;
string Estado_operacion;
string EstadoMM;
string estado_sl;
string estado_tp;

//Variables seguridad
int faltandatos;
int aperturaalready;
int cierrealready;
string alarma;


int init ()
   {
GlobalVariableSet("numEA",+1);

   }

int start()
  {
  

if (SLex==0){estado_sl="Stoploss no programado";}
      else  {estado_sl="Stoploss programado a "+SLex+" pips";}
if (TPex==0){estado_tp="Takeprofit no programado";}
      else  {estado_tp="Takeprofit programado a "+TPex+" pips";}
  
   datetime HA=StrToTime(Horaapertura);
   datetime HC=StrToTime(Horacierre);

   datetime HAmonth=TimeMonth(HA);
   datetime HCmonth=TimeMonth(HC);
   
switch (HAmonth)
{

case 1: messtring="Enero";       break;
case 2: messtring="Febrero";     break;
case 3: messtring="Marzo";       break;
case 4: messtring="Abril";       break;
case 5: messtring="Mayo";        break;
case 6: messtring="Junio";       break;
case 7: messtring="Julio";       break;
case 8: messtring="Agosto";      break;
case 9: messtring="Septiembre";  break;
case 10: messtring="Octubre";     break;
case 11: messtring="Noviembre";   break;
case 12: messtring="Diciembre";   break;
default: messtring="";break;
}
switch (HCmonth)
{

case 1: _messtring="Enero";       break;
case 2: _messtring="Febrero";     break;
case 3: _messtring="Marzo";       break;
case 4: _messtring="Abril";       break;
case 5: _messtring="Mayo";        break;
case 6: _messtring="Junio";       break;
case 7: _messtring="Julio";       break;
case 8: _messtring="Agosto";      break;
case 9: _messtring="Septiembre";  break;
case 10: _messtring="Octubre";     break;
case 11: _messtring="Noviembre";   break;
case 12: _messtring="Diciembre";   break;
default: _messtring="";break;
}
int switchEapertura;
int switchEcierre;

  int Hora_a=TimeHour(HA),
  Minute_a=TimeMinute(HA),
  Day_a=TimeDay(HA),
  Month_a=TimeMonth(HA),
  Year_a=TimeYear(HA),
    
  Hora_c=TimeHour(HC),
  Minute_c=TimeMinute(HC),
  Day_c=TimeDay(HC),
  Month_c=TimeMonth(HC),
  Year_c=TimeYear(HC);
  
  

if (Horaapertura=="0000.00.00 00:00"){switchEapertura=0;}
else
if (HA<TimeLocal())
 {switch (aperturaalready)
   {
   case 0:switchEapertura=1;break;
   case 1:switchEapertura=3;break;  
   }
 }else
   
{switch (aperturaalready)
   {
   case 0:switchEapertura=2;break;
   case 1:switchEapertura=3;break;  
   }
}

if (Horacierre=="0000.00.00 00:00"){switchEcierre=0;}else
if(HC<TimeLocal())
 {switch (cierrealready)
   {
   case 0:switchEcierre=1;break;
   case 1:switchEcierre=3;break;  
   }
 }else
{switch (cierrealready)
   {
   case 0:switchEcierre=2;break;
   case 1:switchEcierre=3;break;
   case 2:switchEcierre=4;break;
   default:break;
   }
}


switch (switchEapertura)

         {
         case 0: Estado_apertura="Faltan datos para programar apertura de operación, revisar variables externas";faltandatos=1;break;
         case 1: Estado_apertura="La hora de apertura ya ha pasado, revisar variables externas";break;
         case 2: Estado_apertura="Apertura operación "+tipoop+" programado a las "+TimeHour(HA)+":"+TimeMinute(HA)+" del "+TimeDay(HA)+" de "+messtring+" del "+TimeYear(HA)+" StopLoss pips="+SLex+" Takeprofit pips="+TPex;break;             
         case 3: Estado_apertura="Operacion de las "+TimeHour(HA)+":"+TimeMinute(HA)+" del "+TimeDay(HA)+" de "+messtring+" del "+TimeYear(HA)+"  abierta con éxito";break;
         case 4: Estado_apertura="Error abriendo operaciones";Alert ("Error abriendo operaciones - contactar administrador: pablo_indie@hotmail.com");break;
         default: break;
         }

switch (switchEcierre)

         {
         case 0: Estado_cierre="Faltan datos para programar cierre de operación, revisar variables externas";faltandatos=1;break;
         case 1: Estado_cierre="La hora de cierre ya ha pasado, revisar variables externas";break;
         case 2: Estado_cierre="Cierre operación "+tipoop+" programado a las "+TimeHour(HC)+":"+TimeMinute(HC)+" del "+TimeDay(HC)+" de "+messtring+" del "+TimeYear(HC);break;
         case 3: Estado_cierre="Operacion de las "+TimeHour(HC)+":"+TimeMinute(HC)+" del "+TimeDay(HC)+" de "+messtring+" del "+TimeYear(HC)+"  cerrada con éxito";break;
         case 4: Estado_cierre="Error cerrando operaciones";Alert ("Error cerrando operaciones - contactar administrador: pablo_indie@hotmail.com");break;
         default: break;
         }

   if (HC<HA) 
{
                     Estado_apertura="¡No puedes cerrar una operación antes de abrirla!";
                     Estado_cierre="";
                     faltandatos=1;
}
//--------------------------------------ASIGANAR PRECIOS,SL y TP-----------------------
    
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;
}

double SL;
double TP;
  
      if (tipoop=="Comprar"){tipoop2=OP_BUY;tipoopprice=Ask;if (SLex!=0){SL=Ask-(SLex/Digitos);if (TPex!=0){TP=Ask+(TPex/Digitos);}}}else
      if (tipoop=="Vender"){tipoop2=OP_SELL;tipoopprice=Bid;if (SLex!=0){SL=Bid+(SLex/Digitos);if (TPex!=0){TP=Bid-(SLex/Digitos);}}}else alarma="Error tipográfico, reescribir Comprar/Vender";

//-------------------------------------------------------------------------------------
 HA=StrToTime(Horaapertura);
 HC=StrToTime(Horacierre);
 datetime TL=TimeLocal();
 
 int opvinc;
 double Lotesvinc;
 
 
 if (faltandatos==0)
 {
  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;}
  Estado_operacion="\n \nSe abrirán "+opvinc+" operaciones de "+DoubleToStr(Lotesvinc,2)+ " Lotes.";
  }else
  {
  Estado_operacion="\n \nNo se abrirán operaciones por falta de datos";
  }
  
if (TimeHour(TimeLocal())==Hora_a&&TimeMinute(TimeLocal())==Minute_a&&TimeDay(TimeLocal())==Day_a&&TimeMonth(TimeLocal())==Month_a&&TimeYear(TimeLocal())==Year_a)
   {
      if (OrdersTotal()<opvinc)
         {
            OrderSend(Symbol(),tipoop2,Lotesvinc,tipoopprice,3,SL,TP,NULL,0,0,White);
            {aperturaalready=1;}
         }
    }
   
   
    
if (TimeHour(TimeLocal())==Hora_c&&TimeMinute(TimeLocal())==Minute_c&&TimeDay(TimeLocal())==Day_c&&TimeMonth(TimeLocal())==Month_c&&TimeYear(TimeLocal())==Year_c)
   
   {
   if (OrdersTotal()>0)
      {
      if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
         {
            if (OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Violet)==true)
              {cierrealready=1;}
                  else 
                     {cierrealready=2;}
              } 
      }           
    }
    
if (GetLastError()==130){alarma="Stoploss o Takeprofit erróneos";}

 
Comment ("\nPROGRAMACIÓN OPERACIONES MANUAL\n"+
EstadoMM+"\n"+"\n"+
Estado_apertura+"\n"+
Estado_cierre+"\n"+
Estado_operacion+"\n"+
"\n"+estado_sl+
"\n"+estado_tp+"\n"+
"\nHora Local:       "+TimeToStr(TimeLocal(),TIME_MINUTES)+
"\nHora Servidor:  "+TimeToStr(TimeCurrent(),TIME_MINUTES));
      
      
      
   return(0);
  }
  
int deinit()
{

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

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

}