Características da linguagem mql5, subtilezas e técnicas - página 74
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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.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.
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.
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.
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.
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?
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.
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)