Publi

Publi

Resultados 1 al 8 de 8


  1. #1

    ergaster


    Reputación:
    Poder de reputación: 2

    Espana
    Mensajes: 22
    Créditos: 459

    Duda sobre volumen. Problemas al guardar.


    Publi
    Buenos días,Resulta que quiero hacer lo siguiente:if (Hour() == 8 && Minute () == 0) { int Volumes = iVolume(Symbol(), PERIOD_M1, 0); }Que a las 08:00 guarde el volumen total de la vela. El caso es que si lo guarda (lo he comprobado imprimiendo por pantalla el valor de "Volumes"), pero en cuanto sale del "if" pierde el valor de la variable "Volumes"Ya no sé como hacer que "Volumes" conserve el dato cuando sale del "if".¿Alguna idea?Saludos.
    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: Duda sobre volumen. Problemas al guardar.

    Hola Compañero,

    Hay varias cosas en este trocito de código que yo miraría:

    1.- Estás declarando la variable "Volumes" dentro del "if". Si deseas tener un acceso más amplio a esta variable, la podrías declarar antes del "if", y dentro del "if" solo usarla. Incluso si necesitas que tenga vigencia en todo el experto, la puedes declarar en la zona de cabecera del EA después de las variables externalizadas con "extern" (después de los parámetros).

    2.- Ten en cuenta que la función "iVolume()" de mql, es de tipo "long", con lo que siempre es recomendable declarar la variable que contendrá el dato devuelto del mismo tipo. El tipo "long" es un derivado más ámplio que el tipo "int" (puede contener enteros mayores). En el caso del volumen no va a ser problema, en la mayoría de casos, que uses tipo "int", pero para evitar futuros errores es recomendable usar el mismo tipo en la variable que el tipo de dato que retorna la función.

    3.- Por último solo avisarte que para capturar el volumen de una hora/minuto concreto, debes tener en cuenta que en mql la fecha queda asignada a la vela al inicio de ésta según el timeframe, no cuando se cierra la vela, por lo que lo correcto es consultar su volumen una vez la vela ha cerrado. Por ejemplo: Si quieres saber el volumen de la hora: 08:00 en un gráfico de H1, debes consultarlo a las 09:00, que es cuando la vela de las 08:00 se habrá cerrado, quedando guardado el total del tick volumen generado durante la vida de la vela de las 08:00. Con el trocito de código que pones no puedo ver si lo estás usando como te digo o no, o que intención persigues, por eso te lo comento. Usar la función "ivolume", con el índice de vela 0, te devuelve el volumen que se va acumulando tick a tick en la vela 0 (vela en construcción).

    Ánimos, y sigue adelante.
    Salu2
    Foro de Forex Trading United

     

  4. #3

    ergaster


    Reputación:
    Poder de reputación: 2

    Espana
    Mensajes: 22
    Créditos: 459

    Re: Duda sobre volumen. Problemas al guardar.

    long Volumes;
    if (Hour() == 8 && Minute () == 1)
    {
    Volumes = iVolume(Symbol(), PERIOD_M1, 1);
    }
    Genial! Ayer con la tontería estuve 2 horas y era un simple 1!

    Muchas Gracias!
    Foro de Forex Trading United

     

  5. #4

    ergaster


    Reputación:
    Poder de reputación: 2

    Espana
    Mensajes: 22
    Créditos: 459

    Re: Duda sobre volumen. Problemas al guardar.

    long gi_01;
    long Volumes = iVolume(Symbol(), PERIOD_M1, 1);

    if (Hour() == 8 && Minute () == 1)
    {
    gi_01 = Volumes;
    Print("Volumen 09:00 = ", gi_01); (<---- Aquí tengo el dato del volumen)
    }

    Print("Volumen 09:00 = ", gi_01); (<---- Aquí ya no tengo el dato del volumen #*&% !!!)
    Bueno pues poco como explico arriba.
    En cuanto salgo del "if" pierdo el dato ... ¿porque pasa eso?
    Foro de Forex Trading United

     

  6. #5
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Duda sobre volumen. Problemas al guardar.

    Cita Iniciado por Rusales Ver mensaje
    Bueno pues poco como explico arriba.
    En cuanto salgo del "if" pierdo el dato ... ¿porque pasa eso?
    si quieres conservar el valor de la variable de ahí en adelante, o bien declaras la variable como variable global (arriba en el encabezamiento, fuera de todas las funciones), o bien la declaras como variable estática:


    static long gi_01 = 0;
    long Volumes = iVolume(Symbol(), PERIOD_M1, 1);

    if (TimeHour(TimeCurrent()) == 8 && TimeMinute (TimeCurrent()) == 1)
    {
    gi_01 = Volumes;
    Print("Volumen 09:00 = ", gi_01); (<---- Aquí tengo el dato del volumen)
    }

    Print("Volumen 09:00 = ", gi_01); (<---- Aquí ya no tengo el dato del volumen #*&% !!!)

    De todas maneras yo no lo haría así. No es un buen método para almacenar el valor del volumen que había a una hora concreta. En el caso de que NO se produzca ningún tick en todo ese minuto (desde las 09:01:00 hasta las 09:01:59), o bien que durante ese minuto NO tengas conexión con el servidor, o se te haya cerrado la plataforma, o no tengas el EA funcionando o cualquier otra circunstancia, NO se almacenará nada.

    Supon que tú arrancas el EA a las 10 de la mañana, pues NO almacenará nada en esa variable hasta las 09:01 del día siguiente, si es que para entonces sigues teniendo el EA en marcha.

    Lo mejor es que lo almacenes a posteriori, en cualquier momento para que el EA lo pueda consultar cuando quiera, con la ayuda de la función iBarShift.

    Saludos y un abrazo.
    Foro de Forex Trading United
    Última edición por robertomar; 11-10-2016 a las 17:50


  7. #6
    Avatar de josemasmax
    Heidelbergensis


    Reputación:
    Poder de reputación: 4

    Espana
    Mensajes: 916
    Créditos: 9,470

    Re: Duda sobre volumen. Problemas al guardar.

    Cita Iniciado por robertomar Ver mensaje
    si quieres conservar el valor de la variable de ahí en adelante, o bien declaras la variable como variable global (arriba en el encabezamiento, fuera de todas las funciones), o bien la declaras como variable estática:




    De todas maneras yo no lo haría así. No es un buen método para almacenar el valor del volumen que había a una hora concreta. En el caso de que NO se produzca ningún tick en todo ese minuto (desde las 09:01:00 hasta las 09:59:59), o bien que durante ese minuto NO tengas conexión con el servidor, o se te haya cerrado la plataforma, o no tengas el EA funcionando o cualquier otra circunstancia, NO se almacenará nada.

    Supon que tú arrancas el EA a las 10 de la mañana, pues NO almacenará nada en esa variable hasta las 09:01 del día siguiente, si es que para entonces sigues teniendo el EA en marcha.

    Lo mejor es que lo almacenes a posteriori, en cualquier momento para que el EA lo pueda consultar cuando quiera, con la ayuda de la función iBarShift.

    Saludos y un abrazo.

    hola compañero, como disfruto ver cosas de estas, muchas gracias por compartir, un cordial saludo.

    - - - Updated - - -

    Cita Iniciado por carlessan Ver mensaje
    Hola Compañero,

    Hay varias cosas en este trocito de código que yo miraría:

    1.- Estás declarando la variable "Volumes" dentro del "if". Si deseas tener un acceso más amplio a esta variable, la podrías declarar antes del "if", y dentro del "if" solo usarla. Incluso si necesitas que tenga vigencia en todo el experto, la puedes declarar en la zona de cabecera del EA después de las variables externalizadas con "extern" (después de los parámetros).

    2.- Ten en cuenta que la función "iVolume()" de mql, es de tipo "long", con lo que siempre es recomendable declarar la variable que contendrá el dato devuelto del mismo tipo. El tipo "long" es un derivado más ámplio que el tipo "int" (puede contener enteros mayores). En el caso del volumen no va a ser problema, en la mayoría de casos, que uses tipo "int", pero para evitar futuros errores es recomendable usar el mismo tipo en la variable que el tipo de dato que retorna la función.

    3.- Por último solo avisarte que para capturar el volumen de una hora/minuto concreto, debes tener en cuenta que en mql la fecha queda asignada a la vela al inicio de ésta según el timeframe, no cuando se cierra la vela, por lo que lo correcto es consultar su volumen una vez la vela ha cerrado. Por ejemplo: Si quieres saber el volumen de la hora: 08:00 en un gráfico de H1, debes consultarlo a las 09:00, que es cuando la vela de las 08:00 se habrá cerrado, quedando guardado el total del tick volumen generado durante la vida de la vela de las 08:00. Con el trocito de código que pones no puedo ver si lo estás usando como te digo o no, o que intención persigues, por eso te lo comento. Usar la función "ivolume", con el índice de vela 0, te devuelve el volumen que se va acumulando tick a tick en la vela 0 (vela en construcción).

    Ánimos, y sigue adelante.
    Salu2

    hola compañero, es un placer ver vuestras explicaciones, muchas gracias por compartir, un cordial saludo.
    Foro de Forex Trading United

    no recuerdo donde lo leí pero decía, el conocimiento y el formarse como trader no garantiza el éxito profesional, pero el desconocimiento te garantiza el fracaso.

  8. #7
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Duda sobre volumen. Problemas al guardar.

    Cita Iniciado por josemasmax Ver mensaje
    hola compañero, como disfruto ver cosas de estas, muchas gracias por compartir, un cordial saludo.
    - - - Updated - - -


    Gracias a vosotros, que dais vida al foro, con aportaciones, consultas, dudas, ideas, etc, etc. Además, tú en concreto sabemos que siempre aprecias muchísimo cualquier comentario, especialmente en temas de programación.

    Así que, muchas gracias, compi.
    Foro de Forex Trading United

  9. #8

    ergaster


    Reputación:
    Poder de reputación: 2

    Espana
    Mensajes: 22
    Créditos: 459

    Re: Duda sobre volumen. Problemas al guardar.


    Publi
    Bueno finalmente, ya tengo resulto asunto del volumen. El problema era como comentabais en la declaración de variables. Finalmente a quedado así:

    extern int HourT = 8;
    extern int MinuteT = 01;
    long Volumes;
    long gi_01;

    int start()
    {
    Volumes = iVolume(Symbol(), PERIOD_M1, 1);
    if (Hour() == HourT && Minute () == MinuteT)
    {
    gi_01=Volumes;
    }

    Print("Volumen 08:00 = ", gi_01);
    }
    Con la función función iBarShift, no me dejaba optimizar la hora. Seguro que algo estaba haciendo mal
    Gracias a todos por la ayuda!

    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