Erro em Rotina , o que pode estar acontencendo?

Para adicionar comentários, por favor Faça o login ou registrar
Leprechaun
383
Leprechaun  

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.

Rodrigo Malacarne
Moderador
8089
Rodrigo 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 

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 

Rodrigo Malacarne
Moderador
8089
Rodrigo 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 

Rodrigo Otavio Passos Ferreira
673
Rodrigo Otavio Passos Ferreira  

é 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)	
Leprechaun
383
Leprechaun  
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. 

Leprechaun
383
Leprechaun  
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.   :-) 

Rogerio Figurelli
Moderador
58524
Rogerio Figurelli  

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.

Leprechaun
383
Leprechaun  
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. 

Rogerio Figurelli
Moderador
58524
Rogerio Figurelli  
Leprechau:

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

Abraço obrigado. 

Perfeitamente, abraço!
Marcos Kronhardt
937
Marcos Kronhardt  
figurelli:
Perfeitamente, abraço!
.
Para adicionar comentários, por favor Faça o login ou registrar