Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 183

 
Integer:


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

O valor bt mudará aos 5 minutos de cada hora. É possível não multiplicar por 3600 no final, será o número da barra desde o início da época, isto é suficiente para definir uma nova barra.

Eu não entendo. Se você puder obter o código completo.
 
gince:


Obrigado a todos por sua ajuda.

A questão era esta.

<Existe uma função chamada NewBar(sy, TF). Parece que se abriu um novo bar. Quero receber um sinal na tabela horária sobre o aparecimento de uma nova barra com 5 minutos de atraso. Ou seja, quero receber um sinal em 0,05, 1,05, 2,05, ..........., 10,05, 11,05, etc.

Para esclarecer a questão. A função deve retornar verdadeiro a cada hora, mas com um atraso de 5 minutos. Isto é, quando a formação da barra 1,05 termina e a barra 2,05 aparece, a função retorna verdadeira quando esta última aparece. A função retorna verdadeiro quando a barra aparece em 1.10, 2.10, etc.

Na figura a linha amarela mostra que a próxima barra era verdadeira .

Seguindo sua dica, eu tentei desta forma, mas não funciona.


Imediatamente me chamou a atenção que os tipos não são corretos:

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

E depois compará-los e atribuir valores... int até o momento

 

Acabo de escrevê-lo com pressa. Você pode entender a essência do assunto, e está tudo bem até onde vai.

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);
}
 

Por que todo esse alvoroço... Aqui a cada quinto minuto da hora retorna VERDADEIRO e o retém por um minuto:

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


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

O valor bt mudará aos 5 minutos de cada hora. É possível não multiplicar por 3600 no final, será o número da barra desde o início da época, isto é suficiente para definir uma nova barra.


Faltou. Se multiplicar por 3600 no final, então adicione também a correção 5*60 de volta.

 
Sepulca:

Por que todo esse alvoroço... Aqui a cada quinto minuto da hora retorna VERDADEIRO e o retém por um minuto:


A sério, e estamos aqui a fazer figura de espertalhões.
 
Integer:


Faltou. Se multiplicado por 3600 no final, então adicione também a correção 5*60 de volta.


É um pouco embrulhada e ilegível. No entanto, entendi o ponto.
 
hoz:


Imediatamente me chamou a atenção que os tipos estão errados:

E depois compará-los e atribuir os valores... int até o momento

int e datetime são do mesmo tipo.
 
Sepulca:

Por que todo esse alvoroço... Aqui a cada quinto minuto da hora retorna VERDADEIRO e o retém por um minuto:

Durante este minuto, o assessor abrirá até quarenta pedidos para ele.
 
Roger:
Naquele minuto, o assessor abrirá até quarenta ordens para ele.


Esta é a maneira de controlar...ou o número de pedidos ou apenas a primeira chamada para a função...