Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 183

 
Integer:


int bt=((TimeCurrent()-5*60)/3600)*3600;

El valor bt cambiará a los 5 minutos de cada hora. Es posible no multiplicar por 3600 al final, será el número de barra desde el principio de la época, esto es suficiente para definir una nueva barra.

No lo entiendo. Si puedes conseguir el código completo.
 
gince:


Gracias a todos por su ayuda.

La pregunta era la siguiente.

<Hay una función llamada NewBar(sy, TF). Parece que se ha abierto un nuevo bar. Quiero obtener una señal en el gráfico horario sobre la aparición de una nueva barra con un retraso de 5 minutos. Es decir, quiero obtener una señal a 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc. >

Para aclarar la pregunta. La función debe devolver true cada hora, pero con un retraso de 5 min. Es decir, cuando termina la formación de la barra 1.05 y aparece la barra 2.05, la función devuelve true cuando aparece esta última. La función devuelve true cuando la barra aparece a 1,10, 2,10, etc.

En la imagen, la línea amarilla muestra que la siguiente barra era verdadera.

Siguiendo tu consejo lo he probado así pero no funciona.


Inmediatamente me di cuenta de que los tipos no son correctos:

static int  LastBar = 0; 
datetime    curbar = iTime (Symbol(), 60, 0) +300; 

Y luego compararlos y asignar valores... int a datetime

 

Lo he escrito a toda prisa. Puedes entender lo esencial, y está bien hasta donde llega.

bool IsTrueBar ()
{
    static datetime LastTrueBar = 0;
    datetime OOT, CurBar, ShiftFromOOT;
//----    
    OOT = iTime (Symbol(), PERIOD_H1, 0);   // Время открытия часовик
    CurBar = OOT + ShiftFromOOT;            // Время открытия со сдвигом
    
    if (LastTrueBar != CurBar)
    {
        LastTrueBar = CurBar;
        return(true);
    }
    else return (false);
}
 

A qué se debe todo este alboroto... Aquí cada cinco minutos de la hora devuelve TRUE y lo mantiene durante un minuto:

bool NewBar(){
 if(Minute()==5)return(true);
 else return(false);
}
 
Integer:


int bt=((TimeCurrent()-5*60)/3600)*3600;

El valor bt cambiará a los 5 minutos de cada hora. Es posible no multiplicar por 3600 al final, será el número de barra desde el principio de la época, esto es suficiente para definir una nueva barra.


Perdido. Si se multiplica por 3600 al final, también hay que añadir la corrección de 5*60.

 
Sepulca:

A qué se debe todo este alboroto... Aquí cada cinco minutos de la hora devuelve TRUE y lo mantiene durante un minuto:


Quiero decir, realmente, y nos estamos haciendo los listillos aquí...
 
Integer:


Perdido. Si se multiplica por 3600 al final, entonces también hay que añadir la corrección de 5*60.


Es un poco envolvente e ilegible. Sin embargo, entiendo el punto.
 
hoz:


Inmediatamente me di cuenta de que los tipos están equivocados:

Y luego compararlos y asignar los valores... int a datetime

int y datetime son del mismo tipo.
 
Sepulca:

A qué se debe todo este alboroto... Aquí cada cinco minutos de la hora devuelve TRUE y lo mantiene durante un minuto:

Durante este minuto el asesor le abrirá hasta cuarenta órdenes.
 
Roger:
En ese minuto, el asesor le abrirá hasta cuarenta pedidos.


Esta es la forma de controlar... ya sea el número de órdenes o sólo la primera llamada a la función...