Discussão do artigo "Trabalhando com o tempo (Parte 2): funções"

 

Novo artigo Trabalhando com o tempo (Parte 2): funções foi publicado:

Vamos aprender a reconhecer automaticamente as diferenças de tempo junto à corretora, bem como o Tempo Médio de Greenwich. Em vez de preguntar à corretora, que provavelmente dará uma resposta imprecisa (e quem quer explicar onde está o horário de negociação?), seremos nós mesmos a ver a que horas ela recebe as cotações nas semanas em que os fusos horários são trocados. Mas é claro que não vamos fazer isso manualmente, deixaremos o software fazer o trabalho por nós.

Neste artigo continuaremos com o arquivo de inclusão DealingWithTime.mqh, com que trabalhamos na primeira parte. Neste arquivo, antes das funções e depois das substituições de macros vêm as variáveis requeridas, que são declaradas como variáveis globais:

//--- global variables for time switches
int      DST_USD=0,                             // act time shift USD
         DST_EUR=0,                             // act time shift EU
         DST_AUD=0,                             // act time shift Australia
         DST_RUS=0;                             // D'2014.10.26 02:00', -10800,



Estas variáveis DST_USD, DST_EUR, etc. tomarão o valor real da diferença de tempo nos respectivos países e regiões - EUA, Europa, etc. Os valores das variáveis serão preenchidos com funções. No horário normal de inverno, os valores são zero: o tempo não muda durante este período.

Em seguida, temos variáveis com a data da próxima mudança de horário. Elas indicam quando os novos valores das variáveis terão que ser calculados, para que cálculos desnecessários não sejam realizados antes disso e para que os recursos computacionais não sejam desperdiçados:

datetime nxtSwitch_USD,                         // date of next switch
         nxtSwitch_EUR,                         // date of next switch
         nxtSwitch_AUD,                         // date of next switch
         nxtSwitch_RUB = D'2014.10.26 02:00';   // Russia is different :(



Há uma pequena diferença nas configurações para a Rússia, veremos isso um pouco mais tarde.

Esta estrutura e sua variável global são o coração de todo o programa. :)

struct _OffsetBroker
  {
   int   USwinEUwin,                            // US=Winter & EU=Winter
         USsumEUsum,                            // US=Summer & EU=Summer
         USsumEUwin,                            // US=Summer & EU=Winter
         actOffset,                             // actual time offset of the broker
         secFxWiWi,                             // duration of FX in sec
         secFxSuSu,                             // duration of FX in sec
         secFxSuWi,                             // duration of FX in sec
         actSecFX;                              // actual duration of FX in sec
   bool  set;                                   // are all set?
  };
_OffsetBroker OffsetBroker;



Definimos os valores de diferença junto à corretora para os três períodos pertinentes e a permanência no mercado durante esses períodos. Também escrevemos o verdadeiro valor de permanência e verificamos se todos os valores requeridos foram definidos. Encontraremos o nome da variável global, OffsetBroker, várias vezes.


Autor: Carl Schreiber

 

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 ) pararam de funcionar porque o MQ mudou o comportamento do CopyTime( ) funcionam algum tempo após a publicação deste artigo. Agora esta função não retorna mais valores de tempo futuro se forem maiores 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.

Uma vez que o final da sessão FX foi determinado desta forma para determinar o deslocamento de tempo do corretor, isso agora leva a valores incorretos!

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

Mas também o cálculo da mudança de horário foi completamente alterado, de modo que agora os tempos complicados da mudança de horário de Sydney (Austrália) de volta aos anos 70 são cobertos.

Anexa-se também a tabela DST 1975 - 2030.xlsx em arquivo zip com todas as mudanças de horário desde a década de 70 para que todos possam verificar o correto funcionamento das fórmulas, aqui está um exemplo de série da tabela:

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 (25º do mês) domingo de abril (4). A tabela já está ordenada por fuso horário geográfico (coluna A), depois por fuso horário do ano (coluna L, spr=primavera, aut=outono,) e por fim 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 existe uma nova e simples função SecTillClose() , que fornece o tempo restante em segundos (a moeda de tempo do MQ) até que o mercado forex seja fechado - sem CopyTime() . Isso é interessante para quem deseja fechar suas posições antes do final de semana ou não deseja abrir uma nova posição em um período definido antes do final 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, EUA e Austrália (Sydney), mas também o horário 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 é subtraído ou adicionado do quê), facilitando o uso por conta própria - copie e cole, a forma mais rápida de programação.

As duas últimas linhas também mostram o último segundo da sessão FX atual e o tempo restante em horas (o que é mais fácil de julgar) e em segundos. Em Nova York, quando a sessão FX fecha às 17h00, horário local, em uma sexta-feira, não há nenhum bar válido aberto às 17h00, horário de Nova York. Portanto, nesta função, 1 segundo é subtraído para obter o último tempo de abertura válido da última barra no tempo do corretor. No entanto, alguns corretores encerram sua sessão FX alguns minutos antes, deixando de fornecer 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.