Как заставить работать индикатор только в определенном тайм-фрейме?

 
Допустим, надо , чтобы рисовал только в 4-х часовках.

int start()
  {
  if (Period()==240) 
  {
    for (shift=300;shift>=0;shift-- )
	  {
	 MyBuffer[shift]= ВЫРАЖЕНИЕ;
	  }
  }
  else return(-1);
  }



Но этот код работает в любом тайм-фрейме. Может проверку надо ставить в секцию init()?

 
Я делал примерно следующим образом :
<PRE>
int start() {
if (Period()==240) {
for (shift=300;shift>=0;shift-- ) {
MyBuffer[shift]= ВЫРАЖЕНИЕ;
}
}else {
SetIndexDrawBegin(0,Bars);
return(-1);
}
}
</PRE>

То есть запретить отрисовку . В этом случае при переходе на другой тайм-фрейм график будет исчезать
с экрана
 
Но считать этот индикатор все равно будет, так? То есть , ресурсы процессора будут пожираться, я так понимаю? Может разработчики подскажут другой вариант?
 
С какой такой радости ресурсы пожираться будут ?
Конструкция

for (shift=300;shift>=0;shift-- ){
MyBuffer[shift]= ВЫРАЖЕНИЕ;
}

Будет считаться только при периоде тайм-фрейма в 4 часа , в остальное время расчетная часть будет
отдыхать ;)
 
А ты попробуй! :)
Иначе не спрашивал бы.
 
Ну попробовал В чем проблема то ? Работает так как я тебе написал :
Вот я врезал cвой кусок в индикатор из поставки по умолчанию (Moving Average)

Ниже исправленный текст функции start()

int start()
{
if(Bars<=MA_Period) return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errors
if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars--;
//----
if(Period() == 240){
Print("Запуск !!!!");
switch(MA_Method)
{
case 0 : sma(); break;
case 1 : ema(); break;
case 2 : smma(); break;
case 3 : lwma();
}
}else {
SetIndexDrawBegin(0,Bars);
return (-1);
}
//---- done
return(0);
}


И ни чего я там не вижу !!! При переключении графика на H4 индикатор рисуется , при переключение на другой период он исчезает. Надпись "Запуск" появляется только при H4 Что я неправильно делаю ?
Я бы не спорил особо только у меня по такой схеме уже с десяток индикаторов крутятся на различных тайм-фреймах и вроде проблем не возникло пока
 
Спасибо, Impuls, стало полегче. Я и не замечал, что пачкотня на других тайм-фреймах вылезает из четырехчасовок, думал - код все равно работает. Теперь почти то , что надо. Только два вопроса осталось:
1. Несколько по-другому представлял смысл SetIndexDrawBegin() , вариант SetIndexDrawBegin(Номер_Индекса,0) ничего не меняет (думал, что если ноль - рисовать не будет)
2. Если мы условие поменяем на ===> ((Period()==240)||(Period()==1440)) , т.е. хотим , чтобы рисовало на 4-х часовках и дневках, а на остальных ТФ не рисовало. В этом случае код работает неустойчиво, при переключении ТФ. Можешь проверить.
 

1. Несколько по-другому представлял смысл SetIndexDrawBegin() , вариант SetIndexDrawBegin(Номер_Индекса,0) ничего не меняет (думал, что если ноль - рисовать не будет)


Ну здесь как раз просто. Первый параметр это номер линии на экране с которой осуществляется работа
Второй это номер бара на графике с которого начинается прорисовка графика. Так вот если вторым параметром ты ставиш 0 то получиш полностью отрисовку линии с нулевого бара.


2. Если мы условие поменяем на ===> ((Period()==240)||(Period()==1440)) , т.е. хотим , чтобы рисовало на 4-х часовках и дневках, а на остальных ТФ не рисовало. В этом случае код работает неустойчиво, при переключении ТФ. Можешь проверить.

Ну у меня и так работает Но хотя если положить руку на сердце я сталкивался несколько раз с проблемой перерисовки в таком случае Хотя и не часто Зависимость появления такой ситуации я так и не смог зафиксировать Нестабильность проявляется когда работает код индикатора и в этот момент приходит новая котировка и получается что до следующего тика котировки остается кусок предыдущего рисунка на экране В автаномном режиме (Без Интернета ) я такую ситуацию не разу не наблюдал Я думаю что тут должны ситуацию разработчики пакета поглядеть - правда ситуация весьма плавающая и зафиксировать последовательность мне пока не удалось
 
Меня все равно не устраивает, как работает запрет на отрисовку на остальных тайм-фреймах, точнее, то, что он не работает правильно. Вроде пообещали, что появится свойство "Видимость-Невидимость" для индикаторов на разных тайм-фреймах, но один вопрос остался:
Насколько я понял, в МТ3.хх каждый тайм-фрейм имел свои два буфера для хранения значений индикаторов. Такой вывод я сделал по "тяжеловесным" индикаторам, обсчет которых не мог быть завершен в допустимое время, и приходилось продолжать цикл вычислений с последнего момента обрыва на каждом новом тике. Но, если все же вычисления заканчивались на данном тайм-фрейме, при переключении на новый тайм-фрейм и возврате к вычисленному тайм-фрейм, индикатор заново не пересчитывался, картинка сразу появлялась. В МТ4 это решили по-другому, и это неплохо , в принципе, только как бы все-таки корректно считать в одном тайм-фрейме и не считать в другом, и чтобы при этом данные из разрешенного тайм-фрейма не "пачкали" экран в запрещенном, и при возврате в разрешенный тайм-фрейм картинка опять появлялась бы, а не как сейчас - то появится, то не появится. Надеюсь, я понятно объяснил? Причины этого я пока не нашел (и сильно не искал).
Причина обращения: