CalendarValueHistory problema de fuso horário

Para adicionar comentários, por favor Faça o login ou registrar
Gilberto Beltrao Dupita
3633
Gilberto Beltrao Dupita  

Pessoal, estou usando o CalendarValueHistory, para o robo não operar quando há noticias relevantes (impacto alto). Mas estou identificando um problema. 


Por exemplo hoje (02/08/19), tem as 9:30 o Payroll não agricola

no MT5 logado no Forex, na aba calendário, apresenta como horário das 15:30 (no metatrader logado para o indice aparece 9:30), porém a função me retorno as 12:30 e com isso ele filtra o horário errado. A função identifica certinho o indicador, porém com alguma questão de fuso.


if(CalendarValueHistory(values,hora1,hora2,NULL,moeda1)) 

 Values é o array

hora1 = inicio

hora 2 = fim

pais = NULL

moeda1 =USD


não vi na função algo que indique o fuso, pensei que fosse o pais, porém quando coloco ai ele não traz nada (coloando estados unidos, europa, brasil...etc)


alguem tem essa função implementada que poderia me ajudar?


Obrigado!

Rogerio Giannetti Torres
3254
Rogerio Giannetti Torres  
Gilberto Beltrao Dupita:


Boa tarde,

o que você chama de fuso é a hora GMT e a função TimeGmt() é  hora GMT.  Para você calcular a hora local a partir de uma hora expressa como hora GMT tem que subtrair deslocamento entre as horas, e a função TimeGMTOffset() é esse deslocamento, então:

    Print(TimeToString(values[i].time - TimeGMTOffset()) vai mostrar a hora local do evento. 

Gilberto Beltrao Dupita
3633
Gilberto Beltrao Dupita  
Rogerio Giannetti Torres:

Boa tarde,

o que você chama de fuso é a hora GMT e a função TimeGmt() é  hora GMT.  Para você calcular a hora local a partir de uma hora expressa como hora GMT tem que subtrair deslocamento entre as horas, e a função TimeGMTOffset() é esse deslocamento, então:

    Print(TimeToString(values[i].time - TimeGMTOffset()) vai mostrar a hora local do evento. 

Obrigado Rogério! vou testar.


Em um primeiro momento coloquei um paramentro de diferença de fuso. Para forex -3 horas, brasil +3 horas. Agora está filtrando as noticias certinho, mas vou testar a função!

Rogerio Giannetti Torres
3254
Rogerio Giannetti Torres  
Gilberto Beltrao Dupita:

Obrigado Rogério! vou testar.


Em um primeiro momento coloquei um parametro de diferença de fuso. Para forex -3 horas, brasil +3 horas. Agora está filtrando as noticias certinho, mas vou testar a função!

Gilberto, 

não é bem assim. O  mqlCalendarValue.time  está em hora GMT,  então se  mqlCalendarValue.time = 05:30:00  aqui é 02:30:00, mas no horário de verão aqui é 03:30:00.  Então deixar fixo 3 hora no programa é uma furada, Assim sendo, use o TimeGMTOffset() que já fica ajustado para 02:00:00 horas durante o horário de verão.

Se você quer calcular a hora da notícia em  relação ao servidor Forex o cálculo é: 

1) Ajuste a hora do evento para hora local ==>  horaEvento =  mqlCalendarValue.time - TimeGTMOffSet();

2) Em seguida ajuste para o horário do evento em função da hora do servidor ==>  horaEvento = horaEvento + (TimeTradeServer() - TimeLocal());

Mas tem um problema, como o TimeLocal() é a hora do PC  vai ter que confiar que a hora do PC está correta.

Para adicionar comentários, por favor Faça o login ou registrar