Re: Duda sobre volumen. Problemas al guardar.
Cita:
Iniciado por
josemasmax
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.
Re: Duda sobre volumen. Problemas al guardar.
Bueno finalmente, ya tengo resulto asunto del volumen. El problema era como comentabais en la declaración de variables. Finalmente a quedado así:
Cita:
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 :feliz2:
Gracias a todos por la ayuda!
Saludos.
Re: Duda sobre volumen. Problemas al guardar.
Cita:
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?
Re: Duda sobre volumen. Problemas al guardar.
Cita:
Iniciado por
robertomar
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
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.
Re: Duda sobre volumen. Problemas al guardar.
Cita:
Iniciado por
Rusales
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:
Cita:
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.
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
Duda sobre volumen. Problemas al guardar.
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.
Re: Duda sobre volumen. Problemas al guardar.
Cita:
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!