Publi

Publi

Resultados 1 al 7 de 7


  1. #1

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2.154

    ¿Cómo colocar para que mql4 sume minutos en vez de segundos?


    Publi
    Saludos compañeros.

    Tal como dice la pregunta, quería saber como coloco para indicar en mql4 que sume minutos y no segundos.
    Coloqué este código:

    Código:
    Alert("actual=", TimeCurrent());
    Alert("+10=", TimeCurrent()+10);
    Suma segundos. ¿Qué coloco para que sume minutos?

    Gracias de antemano.
    Foro de Forex Trading United

     

  2.                         
    Publi
  3. #2
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15.929

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?

    TimeCurrent() te devuelve la última hora conocida del servidor, expresada en segundos desde las 00:00 horas del 01/01/1970, por tanto, al sumarle 10, efectivamente te suma 10 segundos más a ese número de segundos.

    Si quieres que te devuelva los minutos de esa variable tendrías que usar:

    TimeMinute(TimeCurrent()), y eso si por ejemplo la última hora conocida del servidor son las 23:45:15 del 12/08/2014, entonces te devolverá el valor "45" ( es decir, los minutos correspondientes a esa hora), por tanto, si a eso le sumas 10, tendrás valor de 55.

    No obstante, no se lo que quieres hacer, si lo que quieres es que te salte otra alerta 10 minutos después o solo que en las alertas te diga qué hora sería sumándole esos 10 minutos.

    Para empezar, en la primera línea, si quieres que te salga la fecha y hora actual como Dios manda (no en número de segundos) tendrías que poner:

    TimeToString(TimeCurrent(),TIME_SECONDS); si quieres que te apareza hora minuto y segundo, o bien:
    TimeToString(TimeCurrent(),TIME_MINUTES); si quieres que solo te apareza hora y minuto.

    Para poner una alerta 10 minutos después, tendrías que antes darle una condición if.

    Espero que te sirva,

    Un abrazo.
    Foro de Forex Trading United
    Última edición por robertomar; 13-08-2014 a las 01:48

     

  4. #3

    Erectus


    Reputación:
    Poder de reputación: 3

    Mensajes: 77
    Créditos: 1.989

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?

    Lo más rápido es dividir por 60

    Por ejemplo, para calcular los minutos desde la apertura de la vela:
    double minutos_pasados=(TimeCurrent()-Time[1])/60;

    O los minutos desde que se abrió una orden:

    double minutos_abierta=(TimeCurrent()-OrderOpenTime())/60;

    t.
    Foro de Forex Trading United
    Última edición por tacticat; 13-08-2014 a las 08:37

     

  5. #4
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15.929

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?

    Bueno, para eso tendría que definir y asignar valor a una variable, para poder luego estar, y dividir por 60 esa resta, ya que creo que lo que quería hacer el compañero era poner una alerta 10 minutos después de la otra y no hay ningún array predefinido en mql4 que almacene el tiempo en el que puso su alerta (sí hay array para el tiempo de inicio de cada vela, como bien dices).

    Para poner una alerta 10 minutos después de la otra sería así:

    datetime minutoinicial, segundoinicial;

    minutoinicial = TimeMinute(TimeCurrent());
    segundoinicial = TimeSeconds(TimeCurrent());
    Alert ("mensaje 1", TimeToString(TimeCurrent(),TIME_SECONDS));

    if (TimeMinute(TimeCurrent()) == minutoinicial + 10 && TimeSeconds(TimeCurrent()) >= segundoinicial) {
    Alert ("mensaje de alerta 2: recordatorio", TimeToString(TimeCurrent(),TIME_SECONDS));
    }

    Así quedaría más o menos.

    Espero que sea eso lo que querías, jaja.

    Un abrazo.
    Foro de Forex Trading United
    Última edición por robertomar; 13-08-2014 a las 08:45

     

  6. #5

    Erectus


    Reputación:
    Poder de reputación: 3

    Mensajes: 77
    Créditos: 1.989

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?

    Cita Iniciado por robertomar Ver mensaje
    Bueno, para eso tendría que definir y asignar valor a una variable, para poder luego estar, y dividir por 60 esa resta, ya que creo que lo que quería hacer el compañero era poner una alerta 10 minutos después de la otra y no hay ningún array predefinido en mql4 que almacene el tiempo en el que puso su alerta (sí hay array para el tiempo de inicio de cada vela, como bien dices).

    Para poner una alerta 10 minutos después de la otra sería así:

    datetime minutoinicial, segundoinicial;

    minutoinicial = TimeMinute(TimeCurrent());
    segundoinicial = TimeSeconds(TimeCurrent());
    Alert ("mensaje 1", TimeToString(TimeCurrent(),TIME_SECONDS));

    if (TimeMinute(TimeCurrent()) == minutoinicial + 10 && TimeSeconds(TimeCurrent()) >= segundoinicial) {
    Alert ("mensaje de alerta 2: recordatorio", TimeToString(TimeCurrent(),TIME_SECONDS));
    }

    Así quedaría más o menos.

    Espero que sea eso lo que querías, jaja.

    Un abrazo.
    Sin ánimo de polemizar, pero el código que has puesto es 100% equivalente a:

    double minutoinicial;

    minutoinicial = TimeCurrent()/60;
    Alert ("mensaje 1", TimeToString(TimeCurrent(),TIME_SECONDS));

    if (TimeCurrent()/60-minutoinicial >10 ) {
    Alert ("mensaje de alerta 2: recordatorio", TimeToString(TimeCurrent(),TIME_SECONDS));
    }

    100% el mismo resultado, pero más simple. Otra cosa diferente es que ninguno de los dos funcionen a no ser que el minuto inicial no se recalcule. Si el código ese (el tuyo o el mío, que da igual) se pone en el start() se recalculará minutoinicial a cada tick con lo que la 2a alarma no saltará nunca.

    Sin saber que es lo que quiere hacer trader201 es difícil dar soluciones completas. Lo que yo hago normalmente es tener una variable fuera del start() para que sea 'global', por ejemplo minuto inicial, y que su asignación no se haga a cada tick sino cuando ocurre el evento inicial (apertura de operación, vela nueva,...), a partir de ese momento el 'if' (el tuyo o el mío, que da igual) se calcula al tick.

    t.
    t.
    Foro de Forex Trading United
    Última edición por tacticat; 13-08-2014 a las 09:24

     

  7. #6
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15.929

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?

    Bueno, evidentemente yo ya supongo que el compañero iba a poner eso dentro de una condición, cuando se produzca tal o cual cosa. No creo que quiera que ya salte automáticamente a los 10 minutos de iniciarse el EA, que es lo que ocurriría si definimos la variable en el OnInit.

    Cada uno tiene su forma de hacerlo y eso es lo bonito del lenguaje mql, que lo mismo se puede hacer de diferentes modos, jaja. Es muy muy muy similar, pero no 100% equivalente, pueden variar un poquito ambos cálculos.

    Yo lo veo más sencillo, pulcro y fácil de entender como yo lo hago, pero es bueno que hayan otras opiniones, así se ven distintas maneras de hacer las cosas.

    Un abrazo
    Foro de Forex Trading United
    Última edición por robertomar; 13-08-2014 a las 10:27


  8. #7

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2.154

    Re: ¿Cómo colocar para que mql4 sume minutos en vez de segundos?


    Publi
    Gracias. Pues quizá me faltó epecificar entonces para que era. Aunque si que mientras mas sencillo mejor para mi, porque no es que sepa mucho de mql4. Es para un time stop.

    Lo que estoy es asignando a una variable el momento actual y sumándole el tiempo al que quiero que cierre la posición, y colocando este valor en el campo "expiration", en "OrderSend". Algo así, por ejemplo, para que cierre después de haber pasado dos horas:

    Código:
    datetime TimeSL=TimeCurrent()+(60*120);
    Y estaba buscando a ver que colocar si quisiera sumar directo en horas o días.

    Saludos.
    Foro de Forex Trading United

     

Publi
Publi


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