Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 532

 
-Aleks-:
Teremos os segundos de que precisamos para arredondar - o problema é o arredondamento.

duh

datetime Day00=86400*(time[n]/86400);//начало дня
e há arredondamentos até ao início do dia. 86400=24*60*60
 
-Aleks-:

Não consigo perceber como utilizá-lo.

O segundo valor requer"MqlDateTime&dt_struct// estrutura para tomar valores" e não compreendo como usar este MqlDateTime.

Há um tempo. O tempo tem parâmetros tais como: ano, mês, dia, dia, horas, minutos, segundos, etc. Chamando a função TimeToStruct(), decompõe-se o tempo nestes componentes. Depois, por exemplo, pode zerar horas, minutos e segundos - obtém-se o início do dia.

MqlDateTime é um tipo de dados, tal como int, bool, etc. É apenas um tipo composto, ou seja, para aceder aos seus campos (horas, minutos, segundos...) é necessário utilizar um ponto. Por exemplo: dt_struct.hour - valor da hora. Leia mais sobre estruturas em https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
O que significa este comentário sobre a encomenda no diário de bordo, uma vez que não muda nada

 
Aleksey Lebedev:

bem

e há um arredondamento até ao início do dia. 86400=24*60*60
De acordo com a sua fórmula obtemos o número de dias entre a barra actual e o comando à distância, mas estes dias são condicionais, poderia ser 9 horas deste dia e 1 hora do dia anterior, então a diferença em segundos é 122400 , que é 1,42 dias - quando arredondado para 1 dia, e a necessidade de ser 2.
 
Alexey Kozitsyn:

Há tempo. O tempo tem parâmetros tais como: ano, mês, dia, dia, horas, minutos, segundos, etc. Ao chamar a função TimeToStruct(), decompõe-se o tempo nestes componentes. Depois, por exemplo, pode zerar horas, minutos e segundos - obtém-se o início do dia.

MqlDateTime é um tipo de dados, tal como int, bool, etc. É apenas um tipo composto, ou seja, para ter acesso aos seus campos (horas, minutos, segundos...) é necessário utilizar um ponto. Por exemplo: dt_struct.hour - valor da hora. Leia mais sobre estruturas em https://www.mql5.com/ru/docs/basis/types/classes.

E como, peço desculpa, realizar esta zeragem?
 
-Aleks-:
De acordo com a sua fórmula obtemos o número de dias entre a barra actual e o controlo remoto, mas estes dias são condicionais, ou seja, pode ser 9 horas do dia actual e 1 hora do dia anterior. Então a diferença em segundos será 122400, o que equivale a 1,42 dias - quando arredondado para 1 dia, e a necessidade de ter 2.

um dia perdido, 23h+24h+9h=2 dias 8h... Não preciso desta fórmula se preciso dela:

Preciso de calcular em cada gráfico o período de tempo actual. Para os cálculos preciso de saber a data do prazo superior (dias). Acima anexei o código - o objectivo é saber em cada barra o preço máximo da TF superior no momento da abertura da barra no período de tempo actual.

Mais uma vez:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



E você diz estrutura... :)

 
Aleksey Lebedev:

um dia perdido, 23h+24h+9h=2 dias 8h... Não precisa desta fórmula se precisar dela:

Mais uma vez:



E você diz estrutura... :)

Porque é que tem 23 horas - escrevi 1 hora, mas o ponto não muda.

24 (o dia antes - uma hora ontem)+24 (ontem - uma hora hoje)+8 (depois de uma hora hoje - menos uma hora)=56/24=2,33, por isso fez dois dias, não concorda?

 
-Aleks-:

Porque tem 23 horas - escrevi 1 hora, mas a essência não muda

24 (anteontem - à hora de ontem)+24 (ontem - à hora de hoje)+8 (após uma hora hoje - menos uma hora) =56/24 = 2,33 ou seja, são dois dias, não concorda?

23h antes de ontem +

24h de ontem +

9h de hoje=

2 dias 8h=2,(33)dias

Essa é a forma correcta de o fazer:

int DayN=time[0]/86400-time[163]/86400;

Não importa, não é necessário)
 
Aleksey Lebedev:

23h antes de ontem+

24h ontem+

9h de hoje=

2 dias 8h=2,(33)dias

A forma correcta é algo como isto:

Não importa, não é necessário)

Agora vamos imaginar que não são 9h deste dia, mas 19

24(anteontem +24(ontem - hoje 1h)+18(depois de hoje 1h - hoje menos 1h)=66/24=2,75 i.e. faz três dias, concorda?

Como se o intervalo não tivesse mudado diariamente, e o cálculo durante o dia dá então 2, depois 3 dias - nisto o problema.

A variante

 int DayN=time[0]/86400-time[163]/86400;

Também não é bom, se assumirmos que a barra actual é 1 hora e a barra calculada é 23 horas, neste caso o resultado do cálculo será zero, enquanto que deveria ser 1.
 
-Aleks-:
Isto também não funciona se assumirmos que a barra actual é 1 hora e a barra calculada é 23 horas, caso em que o resultado do cálculo é zero e deve ser 1.

Será 1, ambas as vezes são primeiro arredondadas para um dia inteiro, depois subtraídas.