Publi

Publi

Resultados 1 al 2 de 2


  1. #1

    habilis


    Reputación:
    Poder de reputación: 1

    Mexico
    Mensajes: 3
    Créditos: 152

    Sumar Meses o años en MQL4


    Publi
    Hola que tal, he estado investigando un poco sobre sumarle horas o días a una fecha (Datetime) y sé que es con segundos y con eso no he tenido problema, ahora lo que quiero hacer es por ejemplo, si el día de hoy es 22 de Septiembre y le digo al expert advisor que le sume 2 meses que me dé el 22 de Noviembre, que lo haga de una manera más simple porque si lo hago usando segundos de seguro habrá problemas con los meses que tiene 30 días o 31 y es lo que quiero evitar, de antemano muchas gracias
    Foro de Forex Trading United

     

  2.                         
    Publi
  3. #2
    Avatar de carlessan
    Erectus


    Reputación:
    Poder de reputación: 4

    Mensajes: 86
    Créditos: 2,084

    Re: Sumar Meses o años en MQL4


    Publi
    Hola Roge1025,

    Para hacer lo que deseas, en MQL hay una función que nos ayuda a convertir una cadena en fecha, por lo tanto solo es cuestión de fabricar la cadena con la fecha que necesites y convertirla a tipo datetime.

    Te pongo un ejemplo de una pequeña función que he escrito para este post:

    En esta función básicamente le pasamos como parámetros la fecha a cambiar y el número de meses que quieres aumentar la fecha.


    datetime Cambio_de_mes(datetime fecha_a_cambiar, int meses_a_sumar)
    {
    if(meses_a_sumar>12)return(0); // no permitimos sumar más de 12 meses, si quieres sumar más hay que controlar el aumento de años
    int year=TimeYear(fecha_a_cambiar); // extraemos el año de la fecha
    int month=TimeMonth(fecha_a_cambiar); // extraemos el mes de la fecha
    int day=TimeDay(fecha_a_cambiar); // extraemos el día de la fecha

    month=month+meses_a_sumar; // sumamos al mes actual el número de meses que hemos pasado a la función

    if(month>12){month=month-12;year++;} // controla si tenemos que aumentar el año de la nueva fecha
    if(day>30 && month!=11 && month!=4 && month!=6 && month!=9)day=30; // controla los meses de 30 días si el día de la fecha es 31
    if(day==29 && month==2) // control de año bisiesto para posible fecha 29/02
    {
    if(MathMod(year,2)==0 && MathMod((year/2),3)==0 && MathMod(((year/2)/3),4)==0)day=28;
    }

    //construimos la nueva fecha mediante la formación de una cadena de texto y luego convirtiendo dicha cadena a valor datetime. Finalmente retornamos el valor a la llamada de la función


    return(StrToTime(DoubleToStr(year,0)+"."+DoubleToS tr(month,0)+"."+DoubleToStr(TimeDay(fecha_a_cambia r),0)+" "+DoubleToStr(TimeHour(fecha_a_cambiar),0)+":"+Dou bleToStr(TimeMinute(fecha_a_cambiar),0)));
    }



    puedes llamar a la función de la siguiente forma:

    datetime nueva_fecha=Cambio_de_mes(TimeCurrent(), 2);

    donde TimeCurrent() es la fecha actual en tu broker, o la puedes sustituir por la fecha que desees (en formato datetime), y el número 2 es el número de meses que quieres aumentar la fecha (lo puedes sustituir por el valor que quieras).

    El resultado obtenido es una fecha de tipo datetime con lo que la puedes asignar a una variable del mismo tipo para luego usarla como te apetezca.

    Si lo necesitas puedes ampliar la función, para que te cambie el día, la hora, etc, pero siempre controlando que sea una fecha válida.

    Salu2
    Foro de Forex Trading United
    Última edición por carlessan; 24-09-2016 a las 11:28

     

Publi
Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal