[Bug + Correção] Saída na sexta-feira não é calculada corretamente
18 respostas
geektrader
8 anos atrás #114118
Estive examinando meu VPS esta noite e percebi que não havia mais negociações (todas as minhas estratégias usam apenas ordens pendentes). Observando o registro, vi que ele sempre adicionava/ajustava as novas ordens stop a cada 30 minutos, como deveria fazer, mas as excluía diretamente depois de cada vez.
Depois de uma longa depuração do código MQL4 por meio do "Print", o problema se resumiu à funcionalidade Exit on Friday, que sempre achava que já era fim de sexta-feira e que deveria excluir todas as ordens pendentes/fechar todas as negociações ativadas. A função compara o seguinte para determinar se é o momento certo para sair:
....else if(dow == 5 && TimeCurrent() >= StrToTime(ExitTimeOnFriday)) {
closeActiveOrders();
closePendingOrders();
}
Assim, depois de imprimir "TimeCurrent()" e StrToTime(ExitTimeOnFriday)) por meio do comando "Print", o resultado foi que "TimeCurrent()" era de fato maior do que "ExitTimeOnFriday", embora meu "ExitTimeOnFriday" seja 23:57, e o servidor de negociação MT4 que estou usando (Global Prime Forex) estivesse atualmente às 01:34 de sexta-feira nesse horário. Então, por que isso aconteceu? Simples, você não pode passar "ExitTimeOnFriday" ("23:57") para a função "StrToTime" dessa forma, porque a função "StrToTime" usa o dia atual do COMPUTADOR LOCAL para adicionar um dia às 23:57, enquanto a função "TimeCurrent()" sempre usa o dia atual do servidor MT4 - e meu computador local tem um horário completamente diferente do servidor de negociação MT4, pois está em outro fuso horário. Portanto, em seu estado original, a verificação de saída na sexta-feira compara maçãs com laranjas.
Para os programadores da SQ, a correção para isso é a seguinte:
....else if(dow == 5 && TimeCurrent() >= StrToTime(DoubleToStr(TimeYear(TimeCurrent()), 0) + "." + DoubleToStr(TimeMonth(TimeCurrent()), 0) + "." + DoubleToStr(TimeDay(TimeCurrent()), 0) + " " + ExitTimeOnFriday)) {
…..
Isso sempre usará o dia atual do servidor MT4 (o mesmo dia em que "TimeCurrent()" retorna) para calcular o horário da saída de sexta-feira, em vez do dia do computador local. Dessa forma, a saída de sexta-feira é sempre precisa e você pode ajustar o relógio do computador local para o que quiser:)
E sim, ainda estou disponível para ser contratado para encontrar e corrigir mais bugs;)
Fluke
8 anos atrás #133103
Mark, com essa nova correção, você corrompeu todo o código-fonte do mql4! O teste de retorno no metatrader fica fora da memória!!! Por favor, conserte-o rapidamente
Matusiak Adrian
8 anos atrás #133294
A PROPÓSITO,
Esse bug já foi resolvido?
A última atualização estava destruindo o código mql, mas a próxima atualização corrige o arquivo corrompido e sai na sexta-feira?
Marca Fric
8 anos atrás #133295
Sim, eu escrevi isso em outro tópico. Isso foi corrigido com a última atualização automática.
Estou adicionando a atualização automática também aqui, caso você não a tenha confirmado. Você só precisa extrair o arquivo ZIP para a pasta principal do EA Wizard.
Marcar
EstratégiaQuant arquiteto