Características da linguagem mql5, subtilezas e técnicas - página 74

 
Vitaly Muzichenko:

Como posso saber se não há cotações porque é um dia de folga ou se não há cotações na quinta-feira porque o servidor na sala de negociação congelou?

É possível determinar que é um dia de folga, usando a hora local.

E o cálculo do GMTOffset deve ser feito apenas no OnTick. Até o tick não chegar, não use o tempo do servidor nos cálculos. Na maioria dos casos, não é realmente necessário.

Como último recurso, se for necessário GMTOffset no fim de semana, dê uma mensagem ao usuário e talvez solicite o servidor GMTOffset dele.

 
GMTOffset em símbolos forex pode ser determinado pelo tempo de fechamento/abertura da semana de negociação. Afinal de contas, a hora local deste evento é conhecida.
 
Ihor Herasko:

O fato do dia de folga pode ser determinado pela hora local.

Mas o cálculo do GMTOffset do servidor deve ser feito apenas no OnTick. Enquanto o tick não tiver chegado, não use o tempo do servidor nos cálculos. Na maioria dos casos, não é realmente necessário.

Como último recurso, se for necessário GMTOffset em um fim de semana, então emita uma mensagem para o usuário e possivelmente solicite um GMTOffset de servidor a partir deles.

fxsaber:
GMTOffset em símbolos forex pode ser determinado pelo tempo de fechamento/abertura da semana de negociação. Afinal de contas, a hora local deste evento é conhecida.

Não sabemos a hora do servidor no sábado e domingo, só sabemos a hora da última cotação de chegada. Também não sabemos em que fuso horário o servidor funciona.

Nós realmente precisamos de uma função que mostre a hora atual do servidor, algo como: TimeServer(); então nós sempre sabemos que a hora do servidor é maior do que a hora da última citação, isso significa ou é dia de folga, ou é pendurado. O GMTOffset não nos salva.

P.S. A questão não é apenas sobre símbolos forex.
 
Vitaly Muzichenko:

Aos sábados e domingos não sabemos a hora do servidor, apenas sabemos a hora de chegada da última cotação. Também não sabemos em que fuso horário o servidor funciona.

Para o Forex está resolvido, como eu disse acima.

 
Vitaly Muzichenko:

Não sabemos o horário do servidor aos sábados e domingos.

Pelo facto de saberes a hora local.

Só sabemos a hora de chegada da última citação. Nós também não sabemos em que fuso horário o servidor está.

Nós realmente precisamos de uma função que mostre o tempo atual do servidor, algo como TimeServer(); então nós sempre saberemos se o tempo do servidor é maior do que o tempo da última cotação, o que significa que o servidor está desligado ou desligado. O GMTOffset não nos salva.

Se soubermos a hora local, nem precisamos de adivinhar. Usamo-lo para decidir se é ou não um fim-de-semana. E conhecer o servidor GMTOffset apenas nos dá a oportunidade de calcular o tempo do servidor. Eu não discuto que a função TimeServer() seria útil. No entanto, mesmo sem ele agora podemos safar-nos.

 
Ihor Herasko:

A hora local é conhecida.

Se sabes a hora local, nem precisas de adivinhar. É usado para determinar se é ou não um dia de folga. E conhecer o GMTOffset do servidor só dá a possibilidade de calcular o tempo do servidor. Eu não discuto que a função TimeServer() seria útil. No entanto, mesmo sem ele, você pode se safar agora.

Não é a hora do servidor.

Документация по MQL5: Дата и время / TimeGMTOffset
Документация по MQL5: Дата и время / TimeGMTOffset
  • www.mql5.com
Возвращает текущую разницу между временем GMT и локальным временем компьютера в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя.
 
Vitaly Muzichenko:

Não é hora do servidor.

Estou a falar do TimeLocal(). Naturalmente, também precisamos do TimeGMTOffset. Se houver ticks, podemos facilmente calcular o ServerGMTOffset. Se o EA recebeu pelo menos um tick real, ele será capaz de usar o TimeLocal() para calcular a hora atual do servidor.

O problema ocorre quando a EA começou sem a chegada do tick. Neste caso, temos de determinar se é o fim-de-semana. Se for um fim-de-semana, todos os cálculos relacionados com o tempo real do servidor terão de ser adiados até que o fim-de-semana termine. Se for necessário realizar cálculos durante o fim de semana, então peça ao usuário para especificar o ServerGMTOffset. Obtenha estes dados e use TimeLocal() e TimeGMTOffset() para obter a hora atual do servidor.

 
Ihor Herasko:

Estou a falar do TimeLocal(). Naturalmente, também precisamos do TimeGMTOffset. Se houver ticks, não temos problemas em calcular o ServerGMTOffset. Se o EA recebeu pelo menos um tick real, ele será capaz de usar o TimeLocal() para calcular a hora atual do servidor.

O problema ocorre quando a EA começou sem a chegada do tick. Neste caso, temos de determinar se é o fim-de-semana. Se for um fim-de-semana, todos os cálculos relacionados com o tempo real do servidor terão de ser adiados até que o fim-de-semana termine. Se for necessário realizar cálculos durante o fim de semana, então peça ao usuário para especificar o ServerGMTOffset. Ao receber estes dados e usando TimeLocal() e TimeGMTOffset(), obtemos o tempo atual do servidor.

Exactamente. Pendure o Expert Advisor no gráfico no momento do "no ticks". Isto pode ser qualquer coisa, e até um fim-de-semana.

A hora do último tick é 15 minutos atrás (a EA não sabe disso, e nós também não), mas a que horas o servidor está funcionando? Foi mesmo há 15 minutos atrás, ou talvez 1h.15m, ou 3h.15m?

 
Vitaly Muzichenko:

Exactamente. Pendure a EA no gráfico durante o período "sem ticks". Isto pode ser qualquer coisa, e até um fim-de-semana.

A hora do último tick é 15 minutos atrás (o EA não sabe disso, e nós também não), mas que horas o servidor usa? Foi mesmo há 15 minutos, ou pode ser 1h.15m, ou 3h.15m?

Vitaly, os fusos horários diferem uns dos outros em pelo menos 1 hora. Para ser mais preciso, é um múltiplo de 1 hora. Respectivamente, se a diferença for superior a uma hora, isso significa que algo aconteceu.

Mais concretamente, é possível receber a diferença de horário local e do servidor no OnInit, depois compará-la com a diferença atual. Em geral, as opções são para os fãs.

 
Alexey Viktorov:

Vitaly, os fusos horários diferem em pelo menos 1 hora. Para ser mais preciso, é um múltiplo de 1 hora. Portanto, se a diferença for superior a 1 hora, significa que algo aconteceu.

Mais concretamente, é possível receber a diferença de horário local e do servidor no OnInit, depois compará-la com a diferença atual. Em geral, opções para o amador.

Eu coloquei o EA no gráfico no sábado, mas o EA pode receber a hora do último tick, por exemplo, são 23:58 no Market Watch e minha hora local é 04:45. A hora do servidor eu não sei.

Minha pergunta é: Quanto tempo passou desde o último tick até o tempo do servidor (tempo do terminal)