Discussão do artigo "Trabalhando com o tempo (Parte 2): funções" - página 3

 

Olá @Carl Schreiber,

Ótimo artigo que você criou, ele ajuda muito. Só gostaria de lhe dizer o que descobri depois de usar seu código.

Estou usando a corretora eightcap e tentei usar um script simples para mostrar qual é o horário real no respectivo país e descobri que o horário de Tóquio está 1 hora atrasado em relação ao horário real. Aqui está o script que usei,

void OnStart()
  {
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }

   Alert("+++++++++++++++");
   checkTimeOffset(TimeCurrent());
   datetime tGMT  = TimeCurrent() + OffsetBroker.actOffset;    // GMT
   datetime tNY   = tGMT - (NYShift+DST_USD);                  // tempo em Nova York
   datetime tLon  = tGMT - (LondonShift+DST_EUR);              // tempo em Londres
   datetime tSyd  = tGMT - (SidneyShift+DST_AUD);              // tempo em Sidney
   datetime tMosc = tGMT - (MoskwaShift+DST_RUS);              // tempo em Moscou
   datetime tTok  = tGMT - (TokyoShift);                       // hora em Tóquio - sem horário de verão

   Alert("time NY: ", tNY);
   Alert("time Lon: ", tLon);
   Alert("time Syd: ", tSyd);
   Alert("time Tok: ", tTok);
  }

o código é copiar e colar do artigo e eu apenas retorno o valor dele. Não acho que o problema esteja na forma como usei o código, pois a outra sessão está correta.

Carl Schreiber
Carl Schreiber
  • 2023.03.22
  • www.mql5.com
Trader's profile
 
Luandre Ezra #:

Oi @Carl Schreiber,

Ótimo artigo que você criou, ele ajuda muito. Só gostaria de lhe dizer o que descobri depois de usar seu código.

Estou usando a corretora eightcap e tentei usar um script simples para mostrar qual é o horário real no respectivo país e descobri que o horário de Tóquio está 1 hora atrasado em relação ao horário real. Aqui está o script que usei,

o código é copiar e colar do artigo e eu apenas retorno o valor dele. Não acho que o problema esteja na forma como usei o código, pois a outra sessão está correta.

De GMT (=UTC), a diferença de horário é de 0900 horas (de https://www.worldtime server.com/current_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 segundos:

E isso está definido:

#define  TokyoShift   -32400                           // sempre 9h
Current local time in Tokyo, Japan
  • www.worldtimeserver.com
Current local time and date in Tokyo, Japan from a trusted independent resource
 
Carl Schreiber #:

De GMT (=UTC), a diferença de horário é de 0900 horas (de https://www.worldtime server.com/current_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 segundos:

E isso está definido:

Erro que cometi. Não é Tóquio, mas Sydney.


 
Pode ser que o cálculo do interruptor DST australiano esteja com defeito - vou dar uma olhada nisso, obrigado.
Time Zones - WorldTimeServer.com
  • www.worldtimeserver.com
A list of all worldwide time zones with abbreviation and name. Click on a time zone to see more details.
 

Australian First Sunday of October at 02:00 to First Sunday of April at 02:00

Australian DST 2010 start 2010.10.03 - end 2010.04.04
Australian DST 2011 start 2011.10.02 - end 2011.04.03
Australian DST 2012 start 2012.10.07 - end 2012.04.01
Australian DST 2013 start 2013.10.06 - end 2013.04.07
Australian DST 2014 start 2014.10.05 - end 2014.04.06
Australian DST 2015 start 2015.10.04 - end 2015.04.05
Australian DST 2016 start 2016.10.02 - end 2016.04.03
Australian DST 2017 start 2017.10.01 - end 2017.04.02
Australian DST 2018 start 2018.10.07 - end 2018.04.01
Australian DST 2019 start 2019.10.06 - end 2019.04.07
Australian DST 2020 start 2020.10.04 - end 2020.04.05
Australian DST 2021 start 2021.10.03 - end 2021.04.04
Australian DST 2022 start 2022.10.02 - end 2022.04.03
Australian DST 2023 start 2023.10.01 - end 2023.04.02
Australian DST 2024 start 2024.10.06 - end 2024.04.07
Australian DST 2025 start 2025.10.05 - end 2025.04.06
Australian DST 2026 start 2026.10.04 - end 2026.04.05
Australian DST 2027 start 2027.10.03 - end 2027.04.04
Australian DST 2028 start 2028.10.01 - end 2028.04.02
Australian DST 2029 start 2029.10.07 - end 2029.04.01

Australia & New Zealand End DST
Australia & New Zealand End DST
  • www.timeanddate.com
People in New Zealand and parts of Australia will get an additional hour to enjoy when Daylight Saving Time (DST) ends on Sunday, April 2, 2023.
 

Encontrei o problema: perdi uma verificação:

No início da função void checkTimeOffset(datetime tB), coloquei uma verificação:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR)
      return;  

E isso eu tive que mudar para:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR && tB < nxtSwitch_AUD)
      return;  

Vou atualizá-lo ...

 
Carl Schreiber cheque:

No início da função void checkTimeOffset(datetime tB), coloquei uma verificação:

E isso eu tive que mudar para:

Vou atualizá-lo ...

Oi Carl, Infelizmente, alterar o código correspondente não resolve o problema. Também descobri que o horário de Moscou é diferente do horário universal.


 

A versão do DealingWithTime.mqh v. 1.01 do artigo "Lidando com o tempo (Parte 2): As funções" ( https://www.mql5.com/en/articles/9929 ) não funcionava mais porque o MQ alterou o comportamento da função CopyTime() algum tempo depois que esse artigo foi publicado. Agora, essa função não retorna mais valores de tempo futuros se eles forem maiores que o TimeCurrent() especificado para os parâmetros start_time e/ou stop_time. Em vez disso, o tempo de abertura da última barra atual é retornado como o maior valor possível.

Como o fim da sessão de FX foi determinado dessa forma para determinar o deslocamento do horário do corretor, entre outras coisas, isso agora leva a valores incorretos!

Esse cálculo foi alterado na versão 2.03. Essa nova versão já está disponível no CodeBase aqui: https://www.mql5.com/en/code/45287.

O cálculo da mudança de horário também foi completamente alterado, de modo que os horários complicados da mudança de horário de Sydney (Austrália) até a década de 1970 agora também são cobertos.

Também está incluída a tabela DST 1975 - 2030.xlsx como um arquivo zip com todas as mudanças de horário desde os anos 70, para que todos possam verificar o funcionamento correto das fórmulas:

01.01.1982 é horário de inverno nos EUA (DST==0) e a próxima mudança será em 25.04.1982, o último domingo (25 do mês) de abril (4). A tabela já está classificada de acordo com o fuso horário geográfico (coluna A), depois de acordo com o fuso horário do ano (coluna L, spr=primavera, aut=outono) e, finalmente, de acordo com a data da consulta (coluna C). A tabela pode ser criada automaticamente pelo EA incluído (um script não pode ser executado no modo de depuração). Test_DST 2.mq5 se você executá-lo no modo de depuração e copiar as linhas do log do diário no depurador e colá-las em um programa de planilha eletrônica; o separador de células seria o caractere de espaço.

Além disso, agora há uma nova e simples função SecTillClose(), que fornece o tempo restante em segundos (a moeda de tempo do MQ) até o fechamento do mercado forex - sem CopyTime(). Isso é interessante para aqueles que querem fechar suas posições antes do fim de semana ou não querem abrir uma nova posição em um período definido antes do fim de semana.

O indicador incluído DealingWithTime_TestIndi.mq5 mostra como um comentário no gráfico não apenas o horário de verão/inverno da Europa, dos EUA e da Austrália (Sydney), mas também a hora atual e a diferença de horário de várias cidades. Aqui você também encontrará uma tabela com diferentes horários locais para as principais cidades, por exemplo, para comparação com: https://www.timeanddate.com/worldclock/. Portanto, você pode verificar os valores a qualquer momento. Esse indicador também mostra como esses valores são determinados e usados (o que é subtraído ou adicionado a quê) para que seja mais fácil usá-lo você mesmo - copiar e colar, a forma mais rápida de programação.

As duas últimas linhas também mostram o último segundo da sessão de câmbio atual e o tempo restante em horas (mais fácil de avaliar) e segundos. Se a sessão de câmbio em Nova York for encerrada às 17h, horário local, às sextas-feiras, não haverá nenhuma barra válida com horário de abertura às 17h, horário de Nova York. Portanto, 1 segundo é subtraído nessa função para obter o último horário de abertura válido da última barra no horário da corretora. No entanto, alguns corretores encerram sua sessão de FX alguns minutos antes, não fornecendo mais preços e não aceitando mais ordens de negociação.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

A versão do DealingWithTime.mqh v. 1.01 do artigo Dealing with Time (Parte 2): As funções ( https://www.mql5.com/pt/articles/9929 ) parou de funcionar porque o MQ alterou o comportamento da função CopyTime() algum tempo depois da publicação desse artigo. Agora, essa função não retorna mais valores de tempo futuros se eles forem maiores do que TimeCurrent() especificado para os parâmetros start_time e/ou stop_time. Em vez disso, o tempo de abertura da última barra atual é retornado como o maior valor possível.

Como o fim da sessão de FX foi determinado dessa forma para determinar a compensação de tempo do corretor, isso agora leva a valores incorretos!

Esse cálculo foi alterado na versão 2.03. Essa versão agora está disponível no CodeBase aqui: https://www.mql5.com/pt/code/45287.

Além disso, o cálculo da mudança de horário foi completamente alterado, de modo que agora os horários complicados da mudança de horário de Sydney (Austrália) até os anos 70 estão cobertos.

Também está anexada a tabela DST 1975 - 2030.xlsx como um arquivo zip com todas as mudanças de horário desde os anos 70, para que todos possam verificar o funcionamento correto das fórmulas:

1º de janeiro de 1982 é o horário padrão nos EUA (DST==0) e a próxima mudança será em 25 de abril de 1982, o último domingo (25 do mês) de abril (4). A tabela já está classificada por fuso horário geográfico (coluna A), depois por fuso horário do ano (coluna L, spr=primavera, aut=outono) e, finalmente, por data de consulta (coluna C). A tabela pode ser criada automaticamente pelo EA incluído (um script não pode ser executado no modo de depuração). Test_DST 2.mq5 se você executá-lo no modo de depuração e copiar as linhas do log do diário no depurador e colá-las em uma planilha; o separador de células seria o espaço.

Além disso, agora há uma nova e simples função SecTillClose(), que fornece o tempo restante em segundos (a moeda de tempo do MQ) até o fechamento do mercado forex - sem CopyTime(). Isso é interessante para aqueles que querem fechar suas posições antes do fim de semana ou não querem abrir uma nova posição em um período definido antes do fim de semana.

O indicador incluído DealingWithTime_TestIndi.mq5, como um comentário no gráfico, mostra não apenas o horário de verão na Europa, nos EUA e na Austrália (Sydney), mas também a hora atual e a diferença de horário de várias cidades. Aqui você pode encontrar uma tabela com diferentes horários locais das principais cidades para comparação: https://www.timeanddate.com/worldclock/. Portanto, você pode verificar os valores a qualquer momento. Esse indicador também mostra como esses valores são determinados e usados (o que é subtraído ou adicionado de quê), facilitando o uso por você mesmo - copiar e colar, a forma mais rápida de programação.

As duas últimas linhas também mostram o último segundo da sessão de câmbio atual e o tempo restante em horas (o que é mais fácil de avaliar) e em segundos. Em Nova York, quando a sessão de câmbio é encerrada às 17h00, horário local, em uma sexta-feira, não há nenhuma barra válida aberta às 17h00, horário de Nova York. Portanto, nessa função, 1 segundo é subtraído para obter o último horário de abertura válido da última barra no horário da corretora. No entanto, alguns corretores encerram sua sessão de FX alguns minutos mais cedo, deixando de fornecer preços e de aceitar ordens de negociação.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

A versão do DealingWithTime.mqh v. 1.01 do artigo "Gerenciando o horário (Parte 2): Funções" ( https://www.mql5.com/pt/articles/9929 ) parou de funcionar porque a MetaQuotes mudou o comportamento de CopyTime() e agora não funciona mais algum tempo após a publicação deste artigo. Agora, essa função não retorna mais valores de tempo futuro se eles forem maiores que o TimeCurrent() especificado para os parâmetros start_time e/ou stop_time. Em vez disso, o tempo de abertura da última barra atual é retornado como o maior valor possível.

Como o fim da sessão de FX foi determinado dessa forma para determinar a compensação de tempo do corretor, isso agora leva a valores incorretos!

Esse cálculo foi alterado na versão 2.03. Essa versão agora está disponível no CodeBase aqui: https://www.mql5.com/en/code/45287.

Além disso, o cálculo da mudança de horário foi completamente alterado, de modo que os complicados horários de mudança de horário de Sydney (Austrália) até a década de 1970 agora estão cobertos.

Também está anexada a tabela DST 1975 - 2030.xlsx como um arquivo zip com todas as alterações de horário desde a década de 1970, para que todos possam verificar o funcionamento correto das fórmulas:

1º de janeiro de 1982 é o horário padrão nos EUA (DST==0) e a próxima mudança será em 25 de abril de 1982, o último domingo (25 do mês) de abril (4). A tabela já está classificada por fuso horário geográfico (coluna A), depois por fuso horário do ano (coluna L, spr=primavera, aut=outono) e, finalmente, por data de consulta (coluna C). A tabela pode ser criada automaticamente pelo EA incluído (um script não pode ser executado no modo de depuração). Test_DST 2.mq5 se você o executar no modo de depuração e copiar as linhas do diário no depurador e colá-las em uma planilha; o separador de células seria o espaço.

Além disso, agora há uma nova função simples, SecTillClose(), que lhe dá o tempo restante em segundos (a moeda de tempo da MetaQuotes) até o fechamento do mercado forex, sem CopyTime(). Isso é interessante para aqueles que querem fechar suas posições antes do fim de semana ou não querem abrir uma nova posição em um período definido antes do fim de semana.

O indicador incluído DealingWithTime_TestIndi.mq5, como um comentário no gráfico, mostra não apenas o horário de verão na Europa, nos EUA e na Austrália (Sydney), mas também a hora atual e a diferença de horário de várias cidades. Aqui você encontra uma tabela com diferentes horários locais das principais cidades para comparação: https://www.timeanddate.com/worldclock/. Portanto, você pode verificar os valores a qualquer momento. Esse indicador também mostra como esses valores são determinados e usados (o que você subtrai ou adiciona), o que o torna fácil de usar: copiar e colar, a maneira mais rápida de programar.

As duas últimas linhas também mostram o último segundo da sessão de câmbio atual e o tempo restante em horas (o que é mais fácil de avaliar) e segundos. Em Nova York, quando a sessão de FX é encerrada às 17h00, horário local, em uma sexta-feira, não há nenhuma barra válida aberta às 17h00, horário de Nova York. Portanto, nessa função, 1 segundo é subtraído para obter o último horário de abertura válido da última barra no horário da corretora. Entretanto, algumas corretoras encerram sua sessão de FX alguns minutos antes e não fornecem mais preços nem aceitam ordens de negociação.