Erro em Rotina , o que pode estar acontencendo?

 

Olá pessoal. 

Por favor estou tendo um problema com uma rotina em meu EA, em depuração funciona normal mas quando coloco para rodar da erro, segue o inicio da rotina.

 double OtimizacaoContratos(void)

  {

   double preco=0.0;

   double margem = 0.0;

//selecionando tamanho dos contratos

   if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,preco))

     return(0.0);

   if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,5,preco,margem))

     return(0.0);

   if (margem<0.0)

      return(0.0);   

   

  double contrato=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*riscoMaximo/margem,0);  

 

O erro ocorre aqui diz que não pode fazer divisão por zero, concordo porém a variável margem é carregada com o retorno do OrderCalcMargin

o que pode ocasionar este erro? a conta é demo e tem margem de sobra

Obrigado abraço a todos.

 
Leprechau:

Olá pessoal. 

Por favor estou tendo um problema com uma rotina em meu EA, em depuração funciona normal mas quando coloco para rodar da erro, segue o inicio da rotina.

O erro ocorre aqui diz que não pode fazer divisão por zero, concordo porém a variável margem é carregada com o retorno do OrderCalcMargin

o que pode ocasionar este erro? a conta é demo e tem margem de sobra 

Olá Leprechau,

Sempre que postar trechos de código no site MQL5.com, por favor lembre-se de clicar no botão SRC.

Desta vez eu farei isso pra você... :-) 

Abraços,
Malacarne 

 
Leprechau:

Olá pessoal. 

Por favor estou tendo um problema com uma rotina em meu EA, em depuração funciona normal mas quando coloco para rodar da erro, segue o inicio da rotina.

 

O erro ocorre aqui diz que não pode fazer divisão por zero, concordo porém a variável margem é carregada com o retorno do OrderCalcMargin

o que pode ocasionar este erro? a conta é demo e tem margem de sobra

Obrigado abraço a todos.

Pelo que parece, o erro está no cálculo da variável "contrato", pois a mesma utiliza como denominador a variável "margem", que, aparentemente, é igual a zero ...

Pelo menos no trecho de código que você postou, a variável margem não é alterada em nenhum local, permanecendo seu valor igual a zero.

Obviamente não é possível fazer divisão por zero, e essa é exatamente a mensagem de erro que o terminal MetaTrader está te retornando ...

Abraços,
Malacarne 

 

é isso mesmo q ta causando o erro, calcule o margem corretamente, e pra ficar redondo,

 troque o: 

  if (margem<0.0)
 

por

 

if(margem <= 0.0)	
 
rodrixl:

é isso mesmo q ta causando o erro, calcule o margem corretamente, e pra ficar redondo,

 troque o: 

por

 

vlw rodrixl pela dica, vou alterar.

Abraço. 

 
Malacarne:

Olá Leprechau,

Sempre que postar trechos de código no site MQL5.com, por favor lembre-se de clicar no botão SRC.

Desta vez eu farei isso pra você... :-) 

Abraços,
Malacarne 

obrigado pela dica, novato na comunidade, aos poucos vou me enquadrando.   :-) 

 

Olá Leprechau,

Além de tudo que já foi comentado eu faria o seguinte para ter um código protegido para o futuro:

double contrato=0;
if (margem>0)
 contrato=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*riscoMaximo/margem,0);

 Na área de trading e finanças quantitativas, todo cuidado é pouco, e assim você não fica dependente de possíveis bugs anteriores.

 
figurelli:

Olá Leprechau,

Além de tudo que já foi comentado eu faria o seguinte para ter um código protegido para o futuro:

 Na área de trading e finanças quantitativas, todo cuidado é pouco, e assim você não fica dependente de possíveis bugs anteriores.

Obrigado figurelli, vc tem toda razão. vou colocar no EA sua dica

Abraço obrigado. 

 
Leprechau:

Obrigado figurelli, vc tem toda razão. vou colocar no EA sua dica

Abraço obrigado. 

Perfeitamente, abraço!
 
figurelli:
Perfeitamente, abraço!
.
Razão: