[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 98

 

Kim tiene una función:

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
} 

Tengo dos preguntas:

1. ¿Por qué traduce la hora a una cadena a la vez y luego la cadena a una hora?

2. ¿Por qué esta condición en la función?

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

Porque al comprobar la hora de abajo... Aquí mismo:

if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

Y en los parámetros de las funciones, las variables de tiempo no son de tipo datetime, sino int por alguna razón...

 
Ja, me lo imaginé. El caso es que el archivo en el que estaba trabajando en la edición se abrió ayer desde un pendrive. El texto está abierto, todo está bien, pero hoy no he conectado el pendrive. No entiendo lo que quiero compilar, tengo el texto, pero no tengo acceso a él para editarlo. Hombre, eso pasa.
 
hoz:

Kim tiene una función:

Tengo dos preguntas:

1. ¿Por qué traduce la hora a una cadena a la vez y luego la cadena a una hora?

2. ¿Por qué esta condición en la función?

Porque al comprobar la hora de abajo... Aquí mismo:

Y en los parámetros de las funciones, las variables de tiempo no son de tipo datetime, sino int por alguna razón...


1. Para sustituir los valores actuales de la hora y los minutos en el tiempo por los valores especificados en los parámetros de la función

Yo lo haría así:

db=TimeCurrent()-TimeCurrent()%86400+hb*3600+mb*60;

2. Para corregir adicionalmente las fechas de inicio o fin por día

datetime e int son esencialmente la misma cosa, y los parámetros no son fechas completas, sino sólo el número de horas y minutos

 
MikeM:


2. Para la corrección adicional de las fechas de inicio o fin por día

¿Por qué? Tenemos que limitar el tiempo de negociación del EA. Y no nos interesa el tiempo que transcurre desde la hora de finalización de la operación hasta la hora de inicio de la misma, porque el EA no opera en ese momento. No entiendo lo que son los NONSENSES...

MikeM:

El datetime y el int son esencialmente la misma cosa, y los parámetros no son las fechas completas, sino sólo el número de horas y minutos

Pero el tiempo debe ser el tiempo, ¿cómo no hay diferencia?
 
hoz:


Pero el tiempo debe ser el tiempo, ¿cómo no va a haber diferencia?


El tiempo es un número, y un número entero.
 
Vinin:

El tiempo es un número, y es un entero.


Entiendo lo que quiero decir con el tiempo - no es una fecha, por eso se declara como un número. Pero qué pasa con:

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

Por muchas variantes que haya visto, nunca he visto nada parecido... Es extraño de alguna manera. Además, aquí no hay ningún ciclo, y menos y más el momento del comienzo y el final del comercio. No entiendo este punto.

De hecho, tenemos las horas de inicio y fin de db y de trade arriba. Por lo tanto, esta pieza puede ser borrada, y luego vamos a comprobar el tiempo:

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

¿Qué sentido tiene escribir código adicional? Por favor, explique este punto. En realidad no es lógico.

 
hoz:


Si no usamos los minutos, podemos simplificarlo. Lo tengo con el tiempo - no es la fecha, declaramos la fecha. ¿Qué hay de...?

Por muchas variantes que haya visto, nunca he visto nada parecido... Es algo extraño. Además, aquí no hay ningún ciclo, y menos y más el momento del comienzo y el final del comercio. No entiendo este punto.

De hecho, tenemos las horas de inicio y fin de db y de trade arriba. Por lo tanto, esta pieza puede ser borrada, y luego vamos a comprobar el tiempo:

¿Qué sentido tiene escribir código adicional? Por favor, explique este punto. No es realmente lógico.


Cada uno es libre de hacer lo suyo. Igor lo hizo así. Yo lo hago de forma diferente.

Y si obtienes un plus o un menos. Depende del momento de la negociación. Por ejemplo, cómo organizar la negociación de 21 horas a 5 horas.

Si no se utilizaran las actas, todo sería mucho más sencillo.

 
Vinin:


Cada uno es libre de hacerlo a su manera. Igor lo hizo así. Estoy haciendo las cosas de manera diferente.

Y si es más o menos. Por lo tanto, depende del momento de la negociación. Por ejemplo, cómo organizar el comercio entre las 9 de la noche y las 5 de la mañana.

Y el código es redundante. No importa.

Si no se utilizaran las actas, todo sería mucho más sencillo.


Hacer que el horario de negociación sea de 21.00 a 23.59, y luego de 00.01 a 5.00

¿Hay otras opciones?

 
hoz:


Hacer que el horario comercial sea de 21.00 a 23.59 y luego de 00.01 a 5.00

¿Hay otras opciones?

Si escribe if(Hour() >= 21 | Hour() < 5) será de 21.00 a 4.59.
 
borilunad:
Si escribe if(Hour() >= 21 | Hour() < 5) será de 21.00 a 4.59.

Eso es raro. ¿Se salta la medianoche y no lo tiene en cuenta para nada?