Ayuda hacer un reloj

Foro dedicado a la plataforma de trading de divisas de Dukascopy en la que la programación de estrategias se realiza mediante Java.
Responder
etrader
Mensajes: 3
Registrado: 05 Sep 2020 12:33

Ayuda hacer un reloj

Mensaje por etrader »

Hola a todxs
Necesito ayuda para poder programar un reloj, lo estoy haciendo con la plataforma Visual Jforex, y no consigo hacerlo de ninguna forma. Llevo semanas intentandolo pero no hay manera.
La idea es simple, en temporalidad de 1 minuto. Que sólo opere desde las 0 horas hasta las 15 horas.
No se que es lo que no estoy haciendo bien.
Con el día de la semana si funciona, por que son del 1 al 7. Con hacer una comparación si el día es igual a 1 no opere.
Pero con la hora he probado ya:
- Por supuesto contando que ya tengo en variables el día, hora y minuto presentes, sacandolos del pip actual presente. Luego comparando la hora presente con la hora deseada no funciona.
- Lo he hecho comparando en horario normal indicando las 15 horas.
- Contando milisegundos. Que las 15 horas son 54 millones.
- Intentando en negativo, es decir, hora mayor que 15 y menor que 0, no opere.
- Metiendo en una variable la suma del tiempo actual más las horas restantes para cerrar, y luego comparando la presente con esa variable. para que deje de operar.
Nada de eso me funciona.

Agradecería cualquier ayuda

Nightmare
Mensajes: 412
Registrado: 23 May 2018 09:23

Re: Ayuda hacer un reloj

Mensaje por Nightmare »

Espero que esto sirva ;)

input int GMToffset=0; // coloca el desplazamiento GMT del broker, cambia dos veces al año

input string str_Horas= "--- Horas ----";

input bool _useHora00 = true;
input bool _useHora01 = true;
input bool _useHora02 = true;
input bool _useHora03 = true;
input bool _useHora04 = true;
input bool _useHora05 = true;
input bool _useHora06 = true;
input bool _useHora07 = true;
input bool _useHora08 = true;
input bool _useHora09 = true;
input bool _useHora10 = true;
input bool _useHora11 = true;
input bool _useHora12 = true;
input bool _useHora13 = true;
input bool _useHora14 = true;
input bool _useHora15 = true;
input bool _useHora16 = true;
input bool _useHora17 = true;
input bool _useHora18 = true;
input bool _useHora19 = true;
input bool _useHora20 = true;
input bool _useHora21 = true;
input bool _useHora22 = true;
input bool _useHora23 = true;



bool _verificaHoras()
{
int h00 = 0 + GMToffset; if (h00 > 23) h00 -= 24; if (h00 < 0) h00 += 24;
int h01 = 1 + GMToffset; if (h01 > 23) h01 -= 24; if (h01 < 0) h01 += 24;
int h02 = 2 + GMToffset; if (h02 > 23) h02 -= 24; if (h02 < 0) h02 += 24;
int h03 = 3 + GMToffset; if (h03 > 23) h03 -= 24; if (h03 < 0) h03 += 24;
int h04 = 4 + GMToffset; if (h04 > 23) h04 -= 24; if (h04 < 0) h04 += 24;
int h05 = 5 + GMToffset; if (h05 > 23) h05 -= 24; if (h05 < 0) h05 += 24;
int h06 = 6 + GMToffset; if (h06 > 23) h06 -= 24; if (h06 < 0) h06 += 24;
int h07 = 7 + GMToffset; if (h07 > 23) h07 -= 24; if (h07 < 0) h07 += 24;
int h08 = 8 + GMToffset; if (h08 > 23) h08 -= 24; if (h08 < 0) h08 += 24;
int h09 = 9 + GMToffset; if (h09 > 23) h09 -= 24; if (h09 < 0) h09 += 24;
int h10 = 10 + GMToffset; if (h10 > 23) h10 -= 24; if (h10 < 0) h10 += 24;
int h11 = 11 + GMToffset; if (h11 > 23) h11 -= 24; if (h11 < 0) h11 += 24;
int h12 = 12 + GMToffset; if (h12 > 23) h12 -= 24; if (h12 < 0) h12 += 24;
int h13 = 13 + GMToffset; if (h13 > 23) h13 -= 24; if (h13 < 0) h13 += 24;
int h14 = 14 + GMToffset; if (h14 > 23) h14 -= 24; if (h14 < 0) h14 += 24;
int h15 = 15 + GMToffset; if (h15 > 23) h15 -= 24; if (h15 < 0) h15 += 24;
int h16 = 16 + GMToffset; if (h16 > 23) h16 -= 24; if (h16 < 0) h16 += 24;
int h17 = 17 + GMToffset; if (h17 > 23) h17 -= 24; if (h17 < 0) h17 += 24;
int h18 = 18 + GMToffset; if (h18 > 23) h18 -= 24; if (h18 < 0) h18 += 24;
int h19 = 19 + GMToffset; if (h19 > 23) h19 -= 24; if (h19 < 0) h19 += 24;
int h20 = 20 + GMToffset; if (h20 > 23) h20 -= 24; if (h20 < 0) h20 += 24;
int h21 = 21 + GMToffset; if (h21 > 23) h21 -= 24; if (h21 < 0) h21 += 24;
int h22 = 22 + GMToffset; if (h22 > 23) h22 -= 24; if (h22 < 0) h22 += 24;
int h23 = 23 + GMToffset; if (h23 > 23) h23 -= 24; if (h23 < 0) h23 += 24;


bool miFiltroHorario = ( TimeHour(TimeCurrent()) == h00 && _useHora00)
|| ( TimeHour(TimeCurrent()) == h01 && _useHora01)
|| ( TimeHour(TimeCurrent()) == h02 && _useHora02)
|| ( TimeHour(TimeCurrent()) == h03 && _useHora03)
|| ( TimeHour(TimeCurrent()) == h04 && _useHora04)
|| ( TimeHour(TimeCurrent()) == h05 && _useHora05)
|| ( TimeHour(TimeCurrent()) == h06 && _useHora06)
|| ( TimeHour(TimeCurrent()) == h07 && _useHora07)
|| ( TimeHour(TimeCurrent()) == h08 && _useHora08)
|| ( TimeHour(TimeCurrent()) == h09 && _useHora09)
|| ( TimeHour(TimeCurrent()) == h10 && _useHora10)
|| ( TimeHour(TimeCurrent()) == h11 && _useHora11)
|| ( TimeHour(TimeCurrent()) == h12 && _useHora12)
|| ( TimeHour(TimeCurrent()) == h13 && _useHora13)
|| ( TimeHour(TimeCurrent()) == h14 && _useHora14)
|| ( TimeHour(TimeCurrent()) == h15 && _useHora15)
|| ( TimeHour(TimeCurrent()) == h16 && _useHora16)
|| ( TimeHour(TimeCurrent()) == h17 && _useHora17)
|| ( TimeHour(TimeCurrent()) == h18 && _useHora18)
|| ( TimeHour(TimeCurrent()) == h19 && _useHora19)
|| ( TimeHour(TimeCurrent()) == h20 && _useHora20)
|| ( TimeHour(TimeCurrent()) == h21 && _useHora21)
|| ( TimeHour(TimeCurrent()) == h22 && _useHora22)
|| ( TimeHour(TimeCurrent()) == h23 && _useHora23);

if ( miFiltroHorario ) return true;
else return false;
}
Avatar de Usuario
cls
Mensajes: 1313
Registrado: 24 May 2007 18:46
Ubicación: Zion

Re: Ayuda hacer un reloj

Mensaje por cls »

La propuesta de Nightmare aunque currada, es para el enemigo. ;)

Supongo que esta plataforma JForex admite código Java.

Lo primero que tienes que hacer es construir un objeto con la fecha/hora que quieres comprobar. No programo en java, pero supongo que el tipo que te vale es LocalDateTime:
https://www.tutorialspoint.com/javatime ... tetime.htm

Como tienes el pip, podrás sacar los datos que necesitas y construir el objeto LocalDatetime con la función 'of':
https://www.tutorialspoint.com/javatime ... me_of5.htm

Después sólo tienes que comprobar la hora con la función getHour del objeto LocalDateTime. Este código debería servir:

Código: Seleccionar todo

// Devuelve True si la hora del pip está entre las 0 y las 15
LocalDatetime mihora = LocalDateTime.of(pip.year, pip.month, pip.day, pip.hour, pip.minute, pip.second, pip.nanosec);
return mihora.getHour() >= 0 && mihora.getHour() <= 15;
S2
etrader
Mensajes: 3
Registrado: 05 Sep 2020 12:33

Re: Ayuda hacer un reloj

Mensaje por etrader »

Nightmare escribió: 09 Nov 2020 09:21 Espero que esto sirva ;)

input int GMToffset=0; // coloca el desplazamiento GMT del broker, cambia dos veces al año

input string str_Horas= "--- Horas ----";

input bool _useHora00 = true;
input bool _useHora01 = true;
input bool _useHora02 = true;
input bool _useHora03 = true;
input bool _useHora04 = true;
input bool _useHora05 = true;
input bool _useHora06 = true;
input bool _useHora07 = true;
input bool _useHora08 = true;
input bool _useHora09 = true;
input bool _useHora10 = true;
input bool _useHora11 = true;
input bool _useHora12 = true;
input bool _useHora13 = true;
input bool _useHora14 = true;
input bool _useHora15 = true;
input bool _useHora16 = true;
input bool _useHora17 = true;
input bool _useHora18 = true;
input bool _useHora19 = true;
input bool _useHora20 = true;
input bool _useHora21 = true;
input bool _useHora22 = true;
input bool _useHora23 = true;



bool _verificaHoras()
{
int h00 = 0 + GMToffset; if (h00 > 23) h00 -= 24; if (h00 < 0) h00 += 24;
int h01 = 1 + GMToffset; if (h01 > 23) h01 -= 24; if (h01 < 0) h01 += 24;
int h02 = 2 + GMToffset; if (h02 > 23) h02 -= 24; if (h02 < 0) h02 += 24;
int h03 = 3 + GMToffset; if (h03 > 23) h03 -= 24; if (h03 < 0) h03 += 24;
int h04 = 4 + GMToffset; if (h04 > 23) h04 -= 24; if (h04 < 0) h04 += 24;
int h05 = 5 + GMToffset; if (h05 > 23) h05 -= 24; if (h05 < 0) h05 += 24;
int h06 = 6 + GMToffset; if (h06 > 23) h06 -= 24; if (h06 < 0) h06 += 24;
int h07 = 7 + GMToffset; if (h07 > 23) h07 -= 24; if (h07 < 0) h07 += 24;
int h08 = 8 + GMToffset; if (h08 > 23) h08 -= 24; if (h08 < 0) h08 += 24;
int h09 = 9 + GMToffset; if (h09 > 23) h09 -= 24; if (h09 < 0) h09 += 24;
int h10 = 10 + GMToffset; if (h10 > 23) h10 -= 24; if (h10 < 0) h10 += 24;
int h11 = 11 + GMToffset; if (h11 > 23) h11 -= 24; if (h11 < 0) h11 += 24;
int h12 = 12 + GMToffset; if (h12 > 23) h12 -= 24; if (h12 < 0) h12 += 24;
int h13 = 13 + GMToffset; if (h13 > 23) h13 -= 24; if (h13 < 0) h13 += 24;
int h14 = 14 + GMToffset; if (h14 > 23) h14 -= 24; if (h14 < 0) h14 += 24;
int h15 = 15 + GMToffset; if (h15 > 23) h15 -= 24; if (h15 < 0) h15 += 24;
int h16 = 16 + GMToffset; if (h16 > 23) h16 -= 24; if (h16 < 0) h16 += 24;
int h17 = 17 + GMToffset; if (h17 > 23) h17 -= 24; if (h17 < 0) h17 += 24;
int h18 = 18 + GMToffset; if (h18 > 23) h18 -= 24; if (h18 < 0) h18 += 24;
int h19 = 19 + GMToffset; if (h19 > 23) h19 -= 24; if (h19 < 0) h19 += 24;
int h20 = 20 + GMToffset; if (h20 > 23) h20 -= 24; if (h20 < 0) h20 += 24;
int h21 = 21 + GMToffset; if (h21 > 23) h21 -= 24; if (h21 < 0) h21 += 24;
int h22 = 22 + GMToffset; if (h22 > 23) h22 -= 24; if (h22 < 0) h22 += 24;
int h23 = 23 + GMToffset; if (h23 > 23) h23 -= 24; if (h23 < 0) h23 += 24;


bool miFiltroHorario = ( TimeHour(TimeCurrent()) == h00 && _useHora00)
|| ( TimeHour(TimeCurrent()) == h01 && _useHora01)
|| ( TimeHour(TimeCurrent()) == h02 && _useHora02)
|| ( TimeHour(TimeCurrent()) == h03 && _useHora03)
|| ( TimeHour(TimeCurrent()) == h04 && _useHora04)
|| ( TimeHour(TimeCurrent()) == h05 && _useHora05)
|| ( TimeHour(TimeCurrent()) == h06 && _useHora06)
|| ( TimeHour(TimeCurrent()) == h07 && _useHora07)
|| ( TimeHour(TimeCurrent()) == h08 && _useHora08)
|| ( TimeHour(TimeCurrent()) == h09 && _useHora09)
|| ( TimeHour(TimeCurrent()) == h10 && _useHora10)
|| ( TimeHour(TimeCurrent()) == h11 && _useHora11)
|| ( TimeHour(TimeCurrent()) == h12 && _useHora12)
|| ( TimeHour(TimeCurrent()) == h13 && _useHora13)
|| ( TimeHour(TimeCurrent()) == h14 && _useHora14)
|| ( TimeHour(TimeCurrent()) == h15 && _useHora15)
|| ( TimeHour(TimeCurrent()) == h16 && _useHora16)
|| ( TimeHour(TimeCurrent()) == h17 && _useHora17)
|| ( TimeHour(TimeCurrent()) == h18 && _useHora18)
|| ( TimeHour(TimeCurrent()) == h19 && _useHora19)
|| ( TimeHour(TimeCurrent()) == h20 && _useHora20)
|| ( TimeHour(TimeCurrent()) == h21 && _useHora21)
|| ( TimeHour(TimeCurrent()) == h22 && _useHora22)
|| ( TimeHour(TimeCurrent()) == h23 && _useHora23);

if ( miFiltroHorario ) return true;
else return false;
}
Muchas gracias, investigaré. He preguntado a soporte también, y me han dicho que debo usar de 1 a 23h y funciona, pero hasta el momento a mi no.
etrader
Mensajes: 3
Registrado: 05 Sep 2020 12:33

Re: Ayuda hacer un reloj

Mensaje por etrader »

cls escribió: 09 Nov 2020 10:39 La propuesta de Nightmare aunque currada, es para el enemigo. ;)

Supongo que esta plataforma JForex admite código Java.

Lo primero que tienes que hacer es construir un objeto con la fecha/hora que quieres comprobar. No programo en java, pero supongo que el tipo que te vale es LocalDateTime:
https://www.tutorialspoint.com/javatime ... tetime.htm

Como tienes el pip, podrás sacar los datos que necesitas y construir el objeto LocalDatetime con la función 'of':
https://www.tutorialspoint.com/javatime ... me_of5.htm

Después sólo tienes que comprobar la hora con la función getHour del objeto LocalDateTime. Este código debería servir:

Código: Seleccionar todo

// Devuelve True si la hora del pip está entre las 0 y las 15
LocalDatetime mihora = LocalDateTime.of(pip.year, pip.month, pip.day, pip.hour, pip.minute, pip.second, pip.nanosec);
return mihora.getHour() >= 0 && mihora.getHour() <= 15;
S2
¿Para el enemigo? :roll:
Estoy usando su plataforma para programar los robots se llama Visual Jforex, de programar directamente en java, no se ni j. Bueno sé hasta la c, pero como para programar directamente no. Muchas gracias
Nightmare
Mensajes: 412
Registrado: 23 May 2018 09:23

Re: Ayuda hacer un reloj

Mensaje por Nightmare »

Creo que se refiere a que mi codigo esta en MT4 Metatrader y no en Jforex.

Aqui la idea basica es la misma, o bien tomas la hora del broker y esa es la hora que limitas.
o bien tu hora local, o como hace mi codigo la hora gmt ;)
Avatar de Usuario
Karachiento
Mensajes: 58
Registrado: 17 Ago 2018 23:03

Re: Ayuda hacer un reloj

Mensaje por Karachiento »

Aporto la función que yo uso para eso en mql5. Evalúa si el horario del servidos esta dentro de un rango de tiempo determinado. Las variables que empiezan por "G_" son inputs globales. Saludos

//=================================================================
bool F_Horario_Habilitado ()
//=================================================================
{
int tiempo_inicio = G_Hora_Inicio * 3600 + G_Minutos_Inicio * 60; // hora inicio del horario permitido en segundos

int tiempo_fin = G_Hora_Final * 3600 + G_Minutos_Final * 60; // hora fin del horario permitido en segundos

datetime hora = TimeCurrent() % 86400; // hora actual en segundos desde el inicio del dia

if (tiempo_fin < tiempo_inicio) // que pasa si el horario de fin pasa la medianoche?
if (hora >= tiempo_inicio || hora < tiempo_fin)
return true;
else
if (hora >= tiempo_inicio && hora < tiempo_fin)
return true;
else
return false;
return false;
}
Avatar de Usuario
X-Trader
Administrador
Mensajes: 11204
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Ayuda hacer un reloj

Mensaje por X-Trader »

etrader escribió: 23 Oct 2020 09:58 Hola a todxs
Necesito ayuda para poder programar un reloj, lo estoy haciendo con la plataforma Visual Jforex, y no consigo hacerlo de ninguna forma. Llevo semanas intentandolo pero no hay manera.
La idea es simple, en temporalidad de 1 minuto. Que sólo opere desde las 0 horas hasta las 15 horas.
No se que es lo que no estoy haciendo bien.
Con el día de la semana si funciona, por que son del 1 al 7. Con hacer una comparación si el día es igual a 1 no opere.
Pero con la hora he probado ya:
- Por supuesto contando que ya tengo en variables el día, hora y minuto presentes, sacandolos del pip actual presente. Luego comparando la hora presente con la hora deseada no funciona.
- Lo he hecho comparando en horario normal indicando las 15 horas.
- Contando milisegundos. Que las 15 horas son 54 millones.
- Intentando en negativo, es decir, hora mayor que 15 y menor que 0, no opere.
- Metiendo en una variable la suma del tiempo actual más las horas restantes para cerrar, y luego comparando la presente con esa variable. para que deje de operar.
Nada de eso me funciona.

Agradecería cualquier ayuda
Creo que te he encontrado una posible solución, mira este ejemplo, creo que da algunas pistas:

https://www.dukascopy.com/wiki/en/devel ... ding-hours
etrader escribió: 14 Nov 2020 13:40 ¿Para el enemigo? :roll:
Se refiere a que ese código que ha compartido Nightmare es para MetaTrader 4, como ya sabrás competidor de JForex (aunque Dukascopy realmente tiene las dos, quizás esa sea otra posibilidad a considerar: cambiarse a MetaTrader, tienes mucho más código ahí fuera).


Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “JForex”