Нужна помощь, советник в автоторговле открывает меньше позиций чем в тестере

starjj  

Добрый день, уважаемые эксперты. Прошу о помощи, суть проблемы в том что советник открывает меньше позиций в реальной торговле чем при тестировании. Советник работает только по ценам открытия, yy всегда либо больше, либо меньше 0. Т.е если закрывается короткая позиция, открывается длинная и наоборот. В тестере происходит как нужно, но в реальной торговле позиция закрывается, но открывается только на следующем баре. Ошибок при компиляции нету. 

Блок закрытия и открытия позиций m_deviation прописан во входящих параметрах:

ulong          m_deviation=10;                 // deviation
      // закрытие
      for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
         if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
            if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
              {
               if(m_position.PositionType()==POSITION_TYPE_BUY)
                 {
                  if(yy<=0)
                     m_trade.PositionClose(m_position.Ticket());
                 }

               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if(yy>=0)
                     m_trade.PositionClose(m_position.Ticket());
                 }
              }
      //-------------------------------------------------------------------           
      if(str1.hour>=HourTimeOpen && str1.hour<HourTimeClose)
        {
        lots=0;
        if(Lots==0) {lots=NormalizeDouble(AccountInfoDouble(ACCOUNT_BALANCE)/10000*Risk,2);}
        if(Lots>0) {lots=Lots;}
         // открытие
         int total=0;
         for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
            if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
               if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
                  total++;

         if(total<1)
           {
            //---- sell conditions
            if(yy<0)
              {
               if(!RefreshRates())
                 {
                  //--- так работа только на новом баре, то при ошибке сбросим "prev_time" - таким образом мы не теряем один бар
                  prev_time=iTime(1);
                  return;
                 }

               m_trade.Sell(lots,
                            m_symbol.Name(),
                            m_symbol.Bid(),
                            m_symbol.Bid()+StopLoss*m_adjusted_point,
                            m_symbol.Bid()-TakeProfit*m_adjusted_point);
               //return;
              }
            //---- buy conditions
            if(yy>0)
              {
               if(!RefreshRates())
                 {
                  //--- так работа только на новом баре, то при ошибке сбросим "prev_time" - таким образом мы не теряем один бар
                  prev_time=iTime(1);
                  return;
                 }

               m_trade.Buy(lots,
                           m_symbol.Name(),
                           m_symbol.Ask(),
                           m_symbol.Ask()-StopLoss*m_adjusted_point,
                           m_symbol.Ask()+TakeProfit*m_adjusted_point);
               //return;
              }
           }
        }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
      return(false);
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }

Aleksey Mavrin  
starjj:

Добрый день, уважаемые эксперты. Прошу о помощи, суть проблемы в том что советник открывает меньше позиций в реальной торговле чем при тестировании. Советник работает только по ценам открытия, yy всегда либо больше, либо меньше 0. Т.е если закрывается короткая позиция, открывается длинная и наоборот. В тестере происходит как нужно, но в реальной торговле позиция закрывается, но открывается только на следующем баре. Ошибок при компиляции нету. 

Блок закрытия и открытия позиций m_deviation прописан во входящих параметрах:

Ну из первого следует второе. Код неполный же приложили, причина не в этом кусе кода)