Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 601

 

Olá a todos!

Dê conselhos, soluções ou cutucar onde ler.

Resolução de um problema: tratamento de erros quando iCustom() é chamado...

// MQL4
void OnTick()
{
....
   ResetLastError();
   double val=iCustom(NULL,0,INDUK_NAME,..., i);
   if ((nErr=GetLastError())>0)
   {
      Print("Error in ",__FUNCTION__," code=",nErr);
      ExpertRemove();
      return;
   }
...
}

Esta construção de código não funciona para a conclusão da EA, se "iCustom" colidisse com a mensagem "array out of range" ao depurar a EA no testador.

 
Um excesso de matriz é um erro crítico, após o quala execução do programa pára e não é executado mais nenhum código. É por isso que o seu manipulador de erros não funciona. E não precisa de código de erro neste caso - está escrito a preto e branco no registo o que causou o acidente. E mesmo linha e posição especificadas onde aconteceu.
 
Sergei Vladimirov:
A sobrecarga do array é um erro crítico, após o qualo programa pára e não é executado mais nenhum código. É por isso que o seu manipulador de erros não funciona. E não precisa do código de erro neste caso, está escrito a preto e branco no diário o que causou o acidente. E mesmo linha e posição especificadas onde aconteceu.

1. Eu sei que o erro está no livro de bordo e que é crítico

2. Não percebo porque é que o testador não pára a EA e tem de forçar uma paragem?

Existem algumas construções linguísticas para o tratamento de excepções para organizar o Expert Advisor e a sua interacção com o utilizador de uma forma conveniente em caso de erros críticos?

 
fromme2you:

1. Eu sei que o erro está no livro de bordo e que é crítico

2. Não percebo porque é que o testador não pára a EA e eu tenho de forçar uma paragem?

Existem algumas construções linguísticas para o tratamento de excepções para organizar de forma conveniente o Expert Advisor e a sua interacção com o utilizador em caso de erros críticos?

O testador pára se tiver ocorrido um erro crítico (por exemplo, divisão por 0, ou um overrun array) no código do Expert Advisor.

Evitar parar o código no testador ou no código real, penso eu, só é possível se introduzirmos as verificações apropriadas no código. O que nem sempre é viável. Isto é especialmente verdade se estiver a usar o código de outra pessoa ou colar o código de outra pessoa como uma sub-rotina no seu produto.

Outra forma complicada é ler os ficheiros de registo de forma programática.

 
Yuri Evseenkov:

O testador pára se ocorrer um erro crítico (por exemplo, divisão por 0 ou superior a uma matriz) no código do próprio assessor....

Outra forma complicada é a leitura programática dos registos.

Estou a ver, obrigado pela resposta.

Outra questão: como posso conseguir que o programador MT4 e o código MQL sejam executados para pensar e esforçar-se por desenvolver uma linguagem para lidar com excepções, como no meu exemplo, ou uma linguagem semelhante?

 
fromme2you:

Estou a ver, obrigado pela resposta.

Outra questão: como posso fazer com que os criadores de ambientes de execução de código MT4 e MQL ponham as suas mentes e mãos no desenvolvimento de uma linguagem para o tratamento de excepções, como no meu exemplo ou similar em significado?

Contacte a servesdesk, crie um tópico/inquérito no fórum.

Não foi há muito tempo que o MT4 foi enterrado. Agora a tendência, se não invertida, pelo menos a plataforma e a língua foram significativamente actualizadas recentemente.

 
Yuri Evseenkov:

Contacte a servesdesk, crie um tópico/inquérito do fórum.

Não foi há muito tempo que o MT4 estava a ser enterrado. Agora a tendência, se não invertida, pelo menos a plataforma e a língua foram significativamente actualizadas recentemente.

foi enterrado pela primeira vez em 2009

 

Olá. Se está familiarizado com o assunto, por favor aconselhe como resolver este problema. Quero encontrar os preços abertos dos bares a uma determinada hora, por exemplo à 01:00, analisando, por exemplo, 50 bares mais recentes. Não tenho a certeza de como realizar esta tarefa em mql5.


Quer calculando a data actual + acrescentando-lhe o tempo necessário e depois acrescentando-lhe vinte e quatro horas, este método funcionou em mql4.

Tanto quanto percebi, existem estruturas especiais com saída de tempo, mas não as posso utilizar por qualquer razão.

Obrigado desde já pelo feedback.

Ficaria muito grato se alguém me pudesse atirar um pequeno pedaço de código para compreender o processo de pensamento.
 
Alex:

Olá. Se está familiarizado com o assunto, por favor aconselhe como resolver este problema. Preciso de encontrar os preços abertos dos bares a uma determinada hora, por exemplo à 01:00, analisando, por exemplo, 50 bares mais recentes. Não tenho a certeza de como realizar esta tarefa em mql5.


Quer calculando a data actual + acrescentando-lhe o tempo necessário e depois acrescentando-lhe vinte e quatro horas, este método funcionou em mql4.

Tanto quanto percebi, existem estruturas especiais com saída de tempo, mas não as posso utilizar por alguma razão.

Obrigado antecipadamente pela resposta.

Ficaria muito grato se alguém me pudesse atirar um pouco de código para compreender o processo de pensamento.
Num indicador ou numa EA/script?
 
Olá. Pergunta: se eu usar orderendasync no mt5 para uma encomenda pendente, como é que vai funcionar? Por exemplo, irá enviar uma paragem de compra sem esperar por uma resposta, mas quando a ordem for accionada, irá esperar que o servidor responda à ordem de compra?
Razão: