Помогите, при переборе в отрицательном направлении выдает бред

 
//+------------------------------------------------------------------+
//Находит ближайший уровень
//+------------------------------------------------------------------+
double level(int num=0) {
string name;
double x=0,y=0;
int q=0,z=0,w=0;
   for(int i=ObjectsTotal()-1; i>=0; i--) {
   name=ObjectName(i);
      if((x==0 || x>MathAbs(Bid-ObjectGet(name,OBJPROP_PRICE1))) && ObjectType(name)==OBJ_HLINE) {
      x=MathAbs(Bid-ObjectGet(name,OBJPROP_PRICE1));
      y=ObjectGet(name,OBJPROP_PRICE1);
      q=i;
      }
   }

if(num>0) {
   for(int i=q+1; i<q+100; i++) {
      name=ObjectName(i);
         if(ObjectType(name)==OBJ_HLINE) {
            z++;
            y=ObjectGet(name,OBJPROP_PRICE1);
               if(z==num) break;
               }
            }
         }
if(num<0) {
   for(int i=q-1; i>=0; i--) {
      name=ObjectName(i);
         if(ObjectType(name)==OBJ_HLINE) {
            w--;
            y=ObjectGet(name,OBJPROP_PRICE1);
               if(w==num) break;
               }
            }
         }
y=NormalizeDouble(y,Digits);
   return(y);
}

 
На графике нарисованы некоторые горизонтальные линии, эта функция ищет ближайшую линию или любую по счету вверх или вниз, вверх находит все идеально, вниз ищет только первый уровень, со второго и далее выдает или отрицательные значения или ближе к нулю, хотя ближайший уровень 1,3830