Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 570

 

Como posso verificar a condição em um determinado momento? por exemplo, no gráfico M5, às 22:59, ou seja, um minuto antes do fechamento do bar. verificar durante todo o minuto.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

Como verificar a condição em um determinado momento? Por exemplo, no gráfico M5, às 22:59, ou seja, um minuto antes do fechamento do bar.

No indicador sobre o histórico - somente lendo os dados da TF mais jovem (neste caso M1), teremos que nos alardear. Mas para a barra zero:

  1. Calcule o tempo restante para fechar a barra.
  2. Se houver 1 minuto ou menos, fazemos o que é necessário.

 
Ihor Herasko:

...Bem para a barra zero:

  1. Calcule o tempo até o fechamento do bar.
  2. Se ainda houver 1 minuto ou menos, então faça o que for necessário.

Ou seja, o tempo atual subtrai o tempo de abertura do bar?

Talvez devêssemos pular a iteração se a hora não estiver no intervalo de 22:59, 23:00

como escrever corretamente esta condição?

 
PolarSeaman:

É o tempo atual subtraído do tempo de abertura do bar? Conta por menos de um minuto?

Talvez pular a iteração se a hora não estiver na faixa das 22:59, 23:00

Como escrever corretamente esta condição?

Se o tempo for explicitamente definido, então é o mesmo que no esquema acima:

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

Eu não verifiquei o código. Pode haver erros de impressão ou alguns outros defeitos. O principal aqui são as direções do pensamento.

Você também deve verificar se os valores de hora e minuto estão corretos. Afinal de contas, um usuário pode inserir valores como 38 horas e 112 minutos.

 
Ihor Herasko:

Se o tempo for explicitamente definido, então é o mesmo que o anterior:

Ainda não verifiquei o código. Pode haver erros de digitação e alguns erros. O principal aqui é a direção do pensamento.

Você também deve verificar se os valores de horas e minutos estão corretos. Afinal de contas, um usuário pode inserir valores como 38 horas e 112 minutos.

No olho, usuário, durante 112 minutos)

por que não pode ser assim?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

não aparece no momento especificado

Haverá vários intervalos a serem desligados cada um

 

as citações podem "adormecer" por um minuto e você perderá o tempo)

A coisa certa a fazer é fazer um timer, sincronizar a hora local e atual, e no timer "pegar" a hora certa

 
PolarSeaman:

No olho, para o usuário, em 112 minutos)

Por que você não pode fazer desta maneira?

Esta é exatamente a solução errada, porque você está comparando cordas, não números. Embora você também possa fazer algo com o TimeToStr. Mas esta abordagem está condenada a ser mais lenta do que operar com números. Afinal, as operações de cordas levam muito mais tempo do que as operações aritméticas mais simples (+, -, /, *).

Haverá vários intervalos, cada um deles deve ser desativado.

Isto é feito armazenando os valores das faixas desejadas em arrays. É certo que não está claro como isto se pareceria nos parâmetros de configuração - muitos deles teriam que ser feitos. As soluções existem, porém. Não é simples, mas elas estão disponíveis.

 
Taras Slobodyanik:

as citações podem "adormecer" por um minuto e você perderá o tempo)

A maneira correta é fazer um timer, sincronizar a hora local e atual, e "pegar" a hora certa no timer

Bem, você não precisa fazer nada em um determinado momento. Então está tudo bem))

 
Taras Slobodyanik:

as citações podem "adormecer" por um minuto e perder o tempo)

fazer um cronômetro corretamente, sincronizar a hora local e atual, e no cronômetro "pegar" a hora certa

você pode inserir OnCalculate() no OnTimer()?

Não sei como sincronizara hora local eatual, não consigo encontrá-la em ajuda.

 
Ihor Herasko:

Bem, isso é o que é preciso para não fazer nada em um determinado momento. Então está tudo bem ))

como, não fazer nada? apenas este minuto é necessário para verificar, e dormir por 24 horas)