CTrade :: Zero divide

mcorgnet  

Bonjour à tous :)

Je me retrouve avec un 0 divide dont je n'arrive pas à me séparer ... Avez vous déjà rencontré ce problème ? 

2023.09.04 01:01:14.795 2021.12.09 17:41:41   zero divide, check divider to avoid this error in 'MoneyFixedRisk.mqh' (65,50)

Code concerné : 

//+------------------------------------------------------------------+
//| Getting lot size for open long position.                         |
//+------------------------------------------------------------------+
double CMoneyFixedRisk::CheckOpenLong(double price,double sl)
  {
   if(m_symbol==NULL)
      return(0.0);
//--- select lot size
   double lot;
   double minvol=m_symbol.LotsMin();
   if(sl==0.0)
      lot=minvol;
   else
     {
      double loss;
      if(price==0.0)
         loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_BUY,1.0,m_symbol.Ask(),sl);
      else
         loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_BUY,1.0,price,sl);
      double stepvol=m_symbol.LotsStep();
      lot=MathFloor(m_account.Balance()*m_percent/loss/100.0/stepvol)*stepvol;
     }
//---
   if(lot<minvol)
      lot=minvol;
//---
   double maxvol=m_symbol.LotsMax();
   if(lot>maxvol)
      lot=maxvol;
//--- return trading volume
   return(lot);
  }


Ce que j'ai tenté de faire pour éviter cette erreur : 

double sl = (m_Ichimoku.SenkouSpanB(0) != 0) ? m_Ichimoku.SenkouSpanB(0) : m_Ichimoku.SenkouSpanB(1);


mais également : 

double sl = (m_Ichimoku.SenkouSpanB(0) != 0) ? m_Ichimoku.SenkouSpanB(0) : m_Ichimoku.SenkouSpanB(0) - 0.01;


Je précise que je rencontre ce problème au bout de plusieurs trades qui sont sont bien déroulés auparavent. 

mcorgnet  

A priori j'ai trouvé la solution : 

      //tp = NormalizeDouble(tp, (int)m_symbol.Digits());
      //sl = NormalizeDouble(sl, (int)m_symbol.Digits());

J'ai commenté ces deux lignes... 

Edit : en changeant de timeframe j'ai à nouveau le problème. 
Alain Verleyen  
Vous devez essayer de comprendre et de résoudre les problèmes, et non pas de les cacher sous le tapis.
Raison: