iCastom запаздывает

 

Я написал советника на основе собственного индикатора, но почему-то

данные, извлекаемые советником  из буфера индикатора, не всегда соответствуют тому, что  показывает индикатор на экране.

 Периодически возникает запаздывание: В момент, когда бар готов, советник обращается к содержимому нулевого элемента буфера индикатора и извлекает, например, ноль, хотя на экране 1.

А если на следующем баре обратиться к 1-му элементу буфера из советника, то там, как и положено: 1. 

 

Видимо индикатор не успевает обновитьбуфер до обращения советника.

 

Как это исправить? 

 
Вечная тема. Бедный iCustom()!
 
Integer:
Вечная тем. Бедный iCustom()!


Так дайте ссылку, где она раскрывается!

Я уже начитался всяких "особенностей написания индикаторов", но толку мало.

Что делать с запаздыванием обновления значения индикатора в буфере   - не нашёл.

Или может,   iCustom() - вообще нерабочая ф-ия?

Проще переписать индик. в функцию? 

 
Integer:
Вечная тема. Бедный iCustom()!


Если необходимо переделать индикатор в функцию, то как это делается:

1) Может ли функция в MQL4 возвращать  массив double чтобы передавать через него все линии, которые считает индикатор?

2) Корректно ли работает такая передача массива (или там опять спрятан  свой подвох)? 

3) Какова практика? Как практически вы решаете этот вопрос? 

 
А у меня нет проблем с iCustom().
 
Eugene1:


Если необходимо переделать индикатор в функцию, то как это делается:

1) Может ли функция в MQL4 возвращать массив double чтобы передавать через него все линии, которые считает индикатор?

2) Корректно ли работает такая передача массива (или там опять спрятан свой подвох)?

3) Какова практика? Как практически вы решаете этот вопрос?


Лучше всего привести код индикатора в порядок, но .....Если индикатор перерисовывает, то все ваши сигналы исчезнут

 
Как вариант, индюк рассчитывается по Close советник тестируется по Open
 
storm:
Как вариант, индюк рассчитывается по Close советник тестируется по Open

Вернее всего что просто перерисовывает
 
Vinin:


Лучше всего привести код индикатора в порядок, но .....Если индикатор перерисовывает, то все ваши сигналы исчезнут


Вот я и мечтаю привести индикатор в порядок, но не знаю как...

Сейчас я просто делаю так:

  int i, // Индекс бара
  Counted_bars=IndicatorCounted(); // Количество просчитанных баров
  i=Bars-Counted_bars-1; // Индекс первого непосчитанного

while(i>=0) // Цикл по непосчитанным барам
{

 

 Но не всегда получаю свежий результат

 

А в советнике у меня:

 

if (SETORDERS && NewBar()) {

 

где: 

int NewBar() {
  if (ttt== Time[0]) return (0);
  ttt= Time[0];
  return (1);
}

Что мне исправить чтобы иметь всегда свежий результат от индикатора? 

 
Eugene1:


Вот я и мечтаю привести индикатор в порядок, но не знаю как...

Сейчас я просто делаю так:

int i, // Индекс бара
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars; // Индекс первого непосчитанного

if (i>1) i=....

while(i>=0) // Цикл по непосчитанным барам
{

}

Но не всегда получаю свежий результат

А

Что мне исправить чтобы иметь всегда свежий результат от индикатора?

 

Vinin:

int i, // Индекс бара

Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
i=Bars-Counted_bars; // Индекс первого непосчитанного

if (i>1) i=i-1; else return(0);

while(i>=0) // Цикл по непосчитанным барам
{

}

Если я правильно понял - это имеется в виду

Растолкуйте, пожалуйста, подробнее!

Я не могу понять самостоятельно.

В моём понимании это исправление приведёт лишь к тому, что индикатор не будет пересчитываться на каждом тике - только и всего.

Он пересчитатся только с приходом нового бара.

Но как это может повлиять на проблему связанную с тем, что эксперт от индикатора не получает свежего результата?

Или (скорее всего) я по-крупному чего-то не понимаю. 

Причина обращения: