Publi

Publi

Resultados 1 al 3 de 3


  1. #1




    Reputación:
    Poder de reputación: 2

    Mensajes: 60
    Créditos: 0

    ¿Por qué sale Error 3 cuando coloco "datetime expiration"? (MQL4)


    Publi
    Buenas a todos. Estoy teniendo el problema de que me está marcando error "mql4 ordersend error 3" cuando coloco algo en el parámetro de "datetime expiration" de la orden. Cuando lo dejo en "0" no sale el error y todo funciona normal, pero cuando le coloco tiempo de expiración de la orden marca el error.

    Ya probé expresando los números de diferentes maneras:
    3600
    60*60
    (60*60)

    Pero solamente cuando lo dejo en "0" es que no sale el error.

    ¿Alguién sabe qué está pasando y como debe colocarse?
    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: ¿Por qué sale Error 3 cuando coloco "datetime expiration"? (MQL4)

    Cita Iniciado por trader0 Ver mensaje
    Buenas a todos. Estoy teniendo el problema de que me está marcando error "mql4 ordersend error 3" cuando coloco algo en el parámetro de "datetime expiration" de la orden. Cuando lo dejo en "0" no sale el error y todo funciona normal, pero cuando le coloco tiempo de expiración de la orden marca el error.

    Ya probé expresando los números de diferentes maneras:
    3600
    60*60
    (60*60)

    Pero solamente cuando lo dejo en "0" es que no sale el error.

    ¿Alguién sabe qué está pasando y como debe colocarse?
    Hola compi, el parámetro expiration de la función OrderSend es una variable de tiempo (tipo datetime):

    int OrderSend(
    string symbol, // symbol
    int cmd, // operation
    double volume, // volume
    double price, // price
    int slippage, // slippage
    double stoploss, // stop loss
    double takeprofit, // take profit
    string comment=NULL, // comment
    int magic=0, // magic number
    datetime expiration=0, // pending order expiration
    color arrow_color=clrNONE// color
    );


    Por tanto, lo que ahí pongas lo tomará como una variable datetime.

    Las variables de tipo datetime, comienzan en la fecha y hora: 1970.01.01 00:00, es decir a las 0 horas del 1 de enero de 1970. Por tanto si tu declaras una variable datetime con valor = 0, esa es la fecha y hora a la que corresponderá. Cualquier otro valor que le asignes a una de estas variables, lo tomará como nº de segundos transcurridos desde esa fecha y hora que te he puesto.

    En el parámetro concreto expiration de la función OrderSend, si le pones valor = 0, lo que hace esa función es que no activa expiración alguna, pero si le pones un valor distinto de 0, entonces cogerá como hora de expiración el valor que le hayas puesto ahí.

    Tú lo que estás poniendo es un valor de 3600 (lo pongas de una manera o de otra). Esto quiere decir que una variable datetime con valor 3600 corresponde a una fecha y hora: 1970.01.01 01:00, (o sea le estás poniendo que expire la orden a las 1:00 horas del día 1 de enero de 1970. Como ese día y hora es anterior al momento en el que estás abriendo la orden, por eso te devuelve el error 3, que significa ERR_INVALID_TRADE_PARAMETERS ( o sea parámetros incorrectos para el trade).

    Obviamente, cualquier fecha y hora que le pongas para que expire la orden, ha de ser posterior al momento en el que la estás abriendo.

    Por tanto, como el momento presente actual cuando estás abiendo la operación es TimeCurrent(), pues si quieres que expire una hora después de abrirla basta con que le pongas a ese parámetro : TimeCurrent() + 3600 ( o sea, una hora después del momento actual en el que la estás abriendo).

    Obviamente, también hay que decir que el parámetro expiration solo es válido si la orden que estás abriendo es pendiente (sea Stop o sea Limit), para las órdenes a mercado te daría error.

    Y por otra parte, hay algunos brokers que no te permiten esa opción (no dejan introducir expiración en sus órdenes), en cuyo caso, te devolvería el error 147 (ERR_TRADE_EXPIRATION_DENIED).

    Incluso en los brokers que aceptan que mandes las órdenes con expiración, en todos los que yo he experimentado, ninguno te permite poner una expiración a menos de 10 minutos desde el momento en que abres la orden (al menos en los que yo he probado), supongo que será por políticas suyas y tal.

    En ambos casos, es decir, si el broker no permitiese poner expiración, o bien si aunque la permita, tú quisieras que expirase en menos de 10 minutos, tendrías que dejar el parámetro tal como viene por defecto (con valor = 0) y después darle las condiciones necesarias al EA para cuando pase ese tiempo que tú quieres que esté activa la orden, cerrarla mediante la función OrderClose.

    Espero que te sirva.

    Saludos y un abrazo.
    Foro de Forex Trading United

     

  4. #3

    ergaster


    Reputación:
    Poder de reputación: 3

    Mensajes: 27
    Créditos: 358

    Re: ¿Por qué sale Error 3 cuando coloco "datetime expiration"? (MQL4)


    Publi
    Cita Iniciado por trader0 Ver mensaje
    Buenas a todos. Estoy teniendo el problema de que me está marcando error "mql4 ordersend error 3" cuando coloco algo en el parámetro de "datetime expiration" de la orden. Cuando lo dejo en "0" no sale el error y todo funciona normal, pero cuando le coloco tiempo de expiración de la orden marca el error.

    Ya probé expresando los números de diferentes maneras:
    3600
    60*60
    (60*60)

    Pero solamente cuando lo dejo en "0" es que no sale el error.

    ¿Alguién sabe qué está pasando y como debe colocarse?
    Espero te sirva este ejemplo, donde podrás observar que primero, ponemos como base el tiempo actual, al cuál le adicionamos el tiempo de expiración que queramos. Por ejemplo: Gd_296 le damos el valor en minutos, o sea que a este campo le asignaremos valores como 1, para un minuto, 5 para cinco minutos y el valor que queramos, pero expresado en minutos.

    int expiration = TimeCurrent() + 60.0 * Gd_296; // order expiration

    Si así, lo utilizas en tu Orden Pendiente, no deberás tener ningún problema.
    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