Resposta

[Bug + Correção] Saída na sexta-feira não é calculada corretamente

18 respostas

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

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;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Fluke

Assinante, bbp_participante, comunidade, 43 respostas.

Perfil da visita

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

0

Matusiak Adrian

Cliente, bbp_participant, comunidade, 300 respostas.

Perfil da visita

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?

btn_viewmy_160x33.png

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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.

Arquivo: sq_update.zip

Marcar
EstratégiaQuant arquiteto

0

Visualizando 3 respostas - 16 até 18 (de um total de 18)

1 2