Рисуем значок индикатором, когда не нужен - он всеравно остается.... - страница 2

 
Rosh
   for(i=0; i<limit; i++)
   {
      double teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, i);
      if ((viewpre[i] > 0) && (viewpre[i+1] < 0) && (Close[i] > teeth))
      {
         buy[i] = High[i] + Point*3;
         sell[i] = 0.0;
      }
      if ((viewpre[i] < 0) && (viewpre[i+1] > 0) && (Close[i] < teeth))
      {
         sell[i] = Low[i] - Point*3;
         buy[i] = 0.0;
      }
   }



 
Сделайте так, и Ваш код излечится.

double val1,val2;
for(i=limit; i>=0; i--)
   {
      val1=0;
      val2=0;
      double teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, i);
      if ((viewpre[i] > 0) && (viewpre[i+1] < 0) && (Close[i] > teeth))
      {
         val1 = High[i] + Point*3;
      }
      if ((viewpre[i] < 0) && (viewpre[i+1] > 0) && (Close[i] < teeth))
      {
         val2 = Low[i] - Point*3;
      }
         buy[i] =val1;
         sell[i] = val2;
     
   }



И не забудьте проанализировать - что изменено и почему.

 
Rosh
Спасибо!
Теперь код абсолютно здоров, жаль что сам раньше не догадался!
 
Не за что. В качестве оплаты можете выполнить общественные работы - объяснить какие изменения и для чего были сделаны :)
Чтобы в будущем помочь новичкам с объянением. Когда другому объясняешь - сам лучше понимаешь. :)
 
Два индикаторных массива "привязаны" к статичным значениям двух переменных:
buy[i] =val1;
sell[i] = val2;



которые в свою очередь по-умолчанию равны нулевым значением:

val1=0;
val2=0;



если условия в блоках if не выполнятся, то текущее значение i-го элемента примет значение по умолчанию, т.е. 0, а нулевые значения мы не отрисовываем, т.к. вначале кода прописали пару волшебных строк, о которых говорил Profi_R, а именно:

    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);




Ну вот, вроде, и все. Не знаю насколько хорошо я объяснил, но сам я понял ;)
Еще раз спасибо!

 
как вариант - можно перенести объявления переменных val1, val2 в функцию start - локализовать, таким образом необходимость заботы об их обнулении отпадет (при появлении нового тика будет стартовать эта функция с инициализированными переменными), но это нужно делать в соответствии с контекстом кода.
Причина обращения: