как заставить индиатор считать - страница 2

 

Еще одно наблюдение.

В свойства индикатора можно попасть двумя путями. первый-Правой кнопкой по индикатору и второй- через список индикаторов.

Так в первом случае индикатор стирается и не рисуется, а во втором нормально отрисовывается.

150% системный глюк.

 
Так как эта беда
 if (Bars>=counted_bars) Count_Bars=counted_bars-draw_begin1; else Count_Bars=Bars-draw_begin1;
всегда выдаст торицательное значение, то этот цикл

   while(i>=0)
     {
      M1Buffer[i]=iStochastic( NULL,0,K_Red,D_Red,Slow_Red, MODE_SMMA,0,MODE_MAIN,i) ;
      m5Buffer[i]=iStochastic(NULL,0,K_Green,D_Green,Slow_Green,MODE_SMMA,0,MODE_SIGNAL,i) ;
      m15Buffer[i]=iStochastic(NULL,0,K_Blue,D_Blue,Slow_Blue,MODE_SMMA,0,MODE_MAIN,i) ;
      m60Buffer[i]=iStochastic(NULL,0,K_Violet,D_Violet,Slow_Violet,MODE_SMMA,0,MODE_SIGNAL,i) ;
      sum15Buffer[i]=(((sum15Buffer[i]-sum15Buffer[i+1])*10)+50
                                          +m15Buffer[i+1]+m15Buffer[i+2])/3;
      sumBuffer[i]= ((((m60Buffer[i]- m60Buffer[i+1]))*ZoomYellow)+50
                                           +sumBuffer[i+2]+sumBuffer[i+1])/3;
      i--;
      }

ни разу не выполнится.

"Теперь ты за ним будешь еще полдня бегать"
 

При чем тут счет . Даже если я это уберу. Пусть обсчитывает весь массив каждуй раз

Это погоды не меняет. МТ его не рисует в описанных выше обстоятельствах.

 

и не только этот индикатор, но и любой другой "пользовательский".

картина стабильно повторяется

 
Да, никак не убедить, что косяк в коде. :) Сделал такую вставку
int start()
  {
   int    i,k;
   int    counted_bars=IndicatorCounted();
   double price;
  Print("Прошли старт");
//----
//   if (Period()<>"M1") return(0);
   if (Bars<=draw_begin1) return(0);
   if (Bars>=counted_bars) Count_Bars=counted_bars-draw_begin1; else Count_Bars=Bars-draw_begin1;
//---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=Count_Bars;i++) 
         { M1Buffer[Bars-i] = 0; m5Buffer[Bars-i]=0;
            m15Buffer[Bars-i]=0; m60Buffer[Bars-i]=0;
         }
    }
   i=Count_Bars;i_m5=0;i_m15=0;i_m60=0;zaym=0;
   Print("i=",i);
   while(i>=0)

лог выдал такой

2006.05.17 16:47:37	logoped EURUSD,H1: Конец старта
2006.05.17 16:47:37	logoped EURUSD,H1: i=15071
2006.05.17 16:47:37	logoped EURUSD,H1: Прошли старт
2006.05.17 16:47:35	logoped EURUSD,H1: Конец старта
2006.05.17 16:47:35	logoped EURUSD,H1: i=-55
2006.05.17 16:47:35	logoped EURUSD,H1: Прошли старт
2006.05.17 16:47:35	logoped EURUSD,H1: initialized
2006.05.17 16:47:35	logoped EURUSD,H1: Прошли инит
2006.05.17 16:47:34	logoped EURUSD,H1: loaded successfully
2006.05.17 16:47:19	Compiling 'logoped'

Естественно, в автономном режиме при отсутсивии второго тика он ничего и не буде рисовать. Я же отправлял к статье, все пофиг.
 
Rosh:
Да, никак не убедить, что косяк в коде.

Дяденька прости упертого...

Интересно, что в автономе после перекомпиляции проходит два тика

а после изменения свойств индикатора только один.

и еще почему-то вбил в голову, что IndicatorCounted() возвращает количество посчитанных, а он возвращает он количество не измененных.

Для автонома - это на первом тике-0, а потом всегда Bars.

Ладно все об этом. Еще один вопрос.

Можно-ли как-то преобразовать строку вида "1138662000 " в значение времени.

Это внутреннее представление времени в количестве секунд от 70 года из .tlp файлов с шабллонами.

или придется разбиратьна части и считать минуты, часы и дни отдельно

 
Пипец, я отсюда ухожу

string TimeToStr( datetime value, int mode=TIME_DATE|TIME_MINUTES)
Преобразование значения, содержащего время в секундах, прошедшее с 01.01.1970, в строку формата "yyyy.mm.dd hh:mi".
Параметры:
value - Время в секундах от 00:00 1 января 1970.
mode -
Пример:
  string var1=TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS);