Bug Report - Build 2715 - ExpertSignal.mqh CheckOpenLong & CheckCloseLong

 

Hi,  If you open a pending short position by setting a m_base_price value, then the m_base_price gets set to 0.0 in CheckOpenLong (before CheckOpenShort gets called to use the value):


bool CExpertSignal::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration)
  {
   bool   result   =false;
//--- the "prohibition" signal
   if(m_direction==EMPTY_VALUE)
      return(false);
//--- check of exceeding the threshold value
   if(m_direction>=m_threshold_open)
     {
      //--- there's a signal
      result=true;
      //--- try to get the levels of opening
      if(!OpenLongParams(price,sl,tp,expiration))
         result=false;
     }
//--- zeroize the base price
   m_base_price=0.0;                                                    Always sets m_base_price to 0.0
//--- return the result
   return(result);
  }

a fix for me at the moment (maybe it's not a complete fix) is to move the zeroize inside the if statement in my child class:

bool XXXXX::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration)
  {
   bool   result   =false;
//--- the "prohibition" signal
   if(m_direction==EMPTY_VALUE)
      return(false);
//--- check of exceeding the threshold value
   if(m_direction>=m_threshold_open)
     {
      //--- there's a signal
      result=true;
      //--- try to get the levels of opening
      if(!OpenLongParams(price,sl,tp,expiration))
         result=false;
      //--- zeroize the base price
      m_base_price=0.0;                                                    Only zeroize if signal was for a long position
     }
//--- return the result
   return(result);
  }

I've done the same for CheckOpenShort, CheckCloseLong, and CheckCloseShort.