Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай принцип работы Торговых Сигналов для MetaTrader
Evgeny Potapov
1632
Evgeny Potapov 2011.04.17 08:51 

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

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

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

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

 

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

 

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

Dmitry Fedoseev
42905
Dmitry Fedoseev 2011.04.17 09:07  
Вечная тема. Бедный iCustom()!
Evgeny Potapov
1632
Evgeny Potapov 2011.04.17 09:30  
Integer:
Вечная тем. Бедный iCustom()!


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

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

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

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

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

Evgeny Potapov
1632
Evgeny Potapov 2011.04.17 10:21  
Integer:
Вечная тема. Бедный iCustom()!


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

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

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

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

Dmitry Fedoseev
42905
Dmitry Fedoseev 2011.04.17 10:32  
А у меня нет проблем с iCustom().
Victor Nikolaev
Модератор
14504
Victor Nikolaev 2011.04.17 11:52  
Eugene1:


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

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

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

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


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

Анатолий
645
Анатолий 2011.04.17 12:32  
Как вариант, индюк рассчитывается по Close советник тестируется по Open
Victor Nikolaev
Модератор
14504
Victor Nikolaev 2011.04.17 12:39  
storm:
Как вариант, индюк рассчитывается по Close советник тестируется по Open

Вернее всего что просто перерисовывает
Evgeny Potapov
1632
Evgeny Potapov 2011.04.17 16:56  
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);
}

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

Victor Nikolaev
Модератор
14504
Victor Nikolaev 2011.04.17 17:26  
Eugene1:


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

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

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

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

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

}

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

А

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

Evgeny Potapov
1632
Evgeny Potapov 2011.04.17 17:51  

Vinin:

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

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

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

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

}

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

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

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

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

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий