Build 2055 - одиночный тест не соответствует результатам генетики - страница 2

 
Если этого эксперта несколько раз подряд запускать на одиночное тестирование с одними и теми параметрами, то каждый раз результаты будут разными. Похоже, где-то отсутствует инициализация
 
Здесь ошибка
   int ratio=(int)MathRound(volume/volume_step);
Нужен long.
 
Slava:
Если этого эксперта несколько раз подряд запускать на одиночное тестирование с одними и теми параметрами, то каждый раз результаты будут разными. Похоже, где-то отсутствует инициализация

Так и оказалось. В индикаторе VR_Donchian_Lite_MT5_Arrows не инициализируются нулём буфера up_trend и down_trend.

Должно быть так

int OnCalculate (const int rates_total,      // the size of the input timeseries 
                 const int prev_calculated,  // bars processed at the previous call 
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[]         // Spread 
                 )
  {
   ArraySetAsSeries(time,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);

   if(rates_total<=Period_ || Period_<=0)
      return(0);

   int limit=rates_total-prev_calculated-1;
   if(limit<0) limit=0;

   for(int i=limit;i>=0;i--)
     {
      upper_line[i]=high[iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,Period_,i)];
      lower_line[i]=low[iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,Period_,i)];
      awera_line[i]=(upper_line[i]+lower_line[i])/2;
      up_trend[i]=0.0;
      down_trend[i]=0.0;
      if(i<rates_total-1)
        {
         if(close[i]>high[i+1] && close[i]>awera_line[i])
           {
            if(last_up_trend==D'1970.01.01 00:00')
               last_up_trend=time[i];
            if(time[i]==last_up_trend)
               up_trend[i]=high[i];
            last_down_trend=0;
           }
         if(close[i]<low[i+1] && close[i]<awera_line[i])
           {
            if(last_down_trend==D'1970.01.01 00:00')
               last_down_trend=time[i];
            if(time[i]==last_down_trend)
               down_trend[i]=low[i];
            last_up_trend=0;
           }
        }
      else
        {
         up_trend[i]=0.0;
         down_trend[i]=0.0;
        }
     }

   return(rates_total);
  }
Текущее значение могло оказаться неопределённым