Oi, pessoal,
Basta encontrar um problema/bug interessante e não ter certeza se ele foi identificado antes ou mesmo se é específico do corretor.
Tente usar o seguinte em algum código indicador, tenha o indicador rodando na inicialização e anote os valores quando executar o MT4 pela primeira vez (certifique-se de que o MT4 não esteja rodando há pelo menos 10 minutos antes de reiniciar).
Você notará que os tempos retornados são na verdade o tempo em que o MT4 esteve rodando pela última vez.
Para contornar isto, tive que introduzir um atraso em meu código, o que não é ideal para um indicador.
Estava me perguntando se alguém tem soluções mais eloqüentes. Eu idealmente não gostaria que o tempo correto do servidor MT4 voltasse sempre na inicialização.
Atenciosamente
PaulB
Este ???
Print(TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
Olá deVries,
você poderia usar TIME_SECONDS também, não importa realmente, desde que o código esteja init{} ou no início do início{}.
A questão é que você obtém a última vez que o MT4 foi executado, o que poderia ser horas ou dias atrás.
Oi, pessoal,
Basta encontrar um problema/bug interessante e não ter certeza se ele foi identificado antes ou mesmo se é específico do corretor.
Tente usar o seguinte em algum código indicador, tenha o indicador rodando na inicialização e anote os valores quando executar o MT4 pela primeira vez (certifique-se de que o MT4 não esteja rodando há pelo menos 10 minutos antes de reiniciar).
Você notará que os tempos retornados são na verdade o tempo em que o MT4 esteve rodando pela última vez.
Para contornar isto, tive que introduzir um atraso em meu código, o que não é ideal para um indicador.
Estava me perguntando se alguém tem soluções mais eloqüentes. Eu idealmente não gostaria que o tempo correto do servidor MT4 voltasse sempre na inicialização.
Atenciosamente
PaulB
A documentação não é 100% clara sobre este ponto ?
Na verdade, não, não é.
Há uma distinção importante entre EAs e indicadores que não está coberta na documentação: Os EAs só recebem uma chamada para começar() se houver uma conexão de corretor e um novo tick, enquanto os indicadores sempre recebem uma chamada inicial para começar() antes ou sem que uma conexão de corretor seja estabelecida. Portanto, o TimeCurrent() pode ter significados diferentes em EAs e indicadores.
Se você quiser um valor definitivamente-refresco para TimeCurrent() em um indicador, então você provavelmente pode usar IsConnected() para verificar se o TimeCurrent() pode se referir ao último tempo conhecido em uma sessão anterior.
Como um ponto adicional, eu tentei até
https://docs.mql4.com/windows/RefreshRates
antes de chamar a TimeCurrent() e isso não fez diferença. Certamente é algo a se ter em mente.
Estou usando-o como parte de algum código para obter a compensação entre a hora do servidor MT4 e o GMT, e está lançando os cálculos subsequentes para fora.
Na verdade, não, não é.
Há uma distinção importante entre EAs e indicadores que não está coberta na documentação: Os EAs só recebem uma chamada para começar() se houver uma conexão de corretor e um novo tick, enquanto os indicadores sempre recebem uma chamada inicial para começar() antes ou sem que uma conexão de corretor seja estabelecida. Portanto, o TimeCurrent() pode ter significados diferentes em EAs e indicadores.
Não vejo isso como sendo relevante tendo em mente o que diz a documentação . ... se você verificar TimeCurrent() antes que um novo tick chegue, você obtém a hora do último tick. Não é isso que diz a documentação?
Ainda é enganador, mas se você quisesse ser pedante, poderia dizer que o problema não está na definição de TimeCurrent(), mas sim na definição em https://docs.mql4.com/runtime/start. Isso diz "Na entrada de novas citações, a função start() dos especialistas anexos e indicadores personalizados será executada". Há uma clara implicação de que start() só é chamado em relação a novos ticks, como é o caso dos EAs, e que, implicitamente, o TimeCurrent(), portanto, não pode retornar o tempo do último tick em uma sessão anterior de utilização do software MT4.
[Novamente, uma resposta a tudo isso é ignorar chamadas para iniciar() em um indicador se IsConnected() retorna falso.]
Ainda é enganoso, mas se você quisesse ser pedante [...]
Sendo ainda mais pedante, se você tiver uma nova instalação MT4, e copiar para ela um arquivo de gráficos com um indicador anexado antes de iniciar o MT4 pela primeira vez, então presumivelmente o indicador receberia uma chamada para iniciar() com o TimeCurrent() reportado como 1/1/1970. Portanto, a documentação do TimeCurrent() deve dizer "...a última hora conhecida do servidor, ou 1/1/1970 se não houver conexão com o servidor".
Sendo ainda mais pedante, se você tiver uma nova instalação MT4, e copiar para ela um arquivo de gráficos com um indicador anexado antes de iniciar o MT4 pela primeira vez, então presumivelmente o indicador receberia uma chamada para iniciar() com o TimeCurrent() reportado como 1/1/1970. Portanto, a documentação do TimeCurrent() deve dizer "...a última hora conhecida do servidor, ou 1/1/1970 se não houver conexão com o servidor".
Não há necessidade de fazer alarde. Basta esperar o primeiro/próximo sinal, o TimeCurrent() está atualizado e tudo está bem. Um indicador apenas sobre os preços do histórico é inútil.
Neste caso, eu simplesmente ignoraria o primeiro tick . . . e continuaria normalmente a partir do tick 2.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Oi, pessoal,
Basta encontrar um problema/bug interessante e não ter certeza se ele foi identificado antes ou mesmo se é específico do corretor.
Tente usar o seguinte em algum código indicador, tenha o indicador rodando na inicialização e anote os valores quando executar o MT4 pela primeira vez (certifique-se de que o MT4 não esteja rodando há pelo menos 10 minutos antes de reiniciar).
Você notará que os tempos retornados são na verdade o tempo em que o MT4 esteve rodando pela última vez.
Para contornar isto, tive que introduzir um atraso em meu código, o que não é ideal para um indicador.
Estava me perguntando se alguém tem mais soluções eloqüentes. Eu idealmente não gostaria que o tempo correto do servidor MT4 voltasse sempre na inicialização.
Atenciosamente
PaulB