Ну не понимаю, как одинаковый индикатор в тестере в окне показывает разные картинки

 

Верхний индюк прикреплен к окну, нижний через советник

Параметры заданы одинаковые

 
ALEKSANDR MARTYNOV:

Параметры заданы одинаковые


Если вы писали индикатор сами, то перепроверьте его расчет, а точнее пересчет последней свечки. У меня подобное бывает частенько из за того что последняя свеча не перерасчитывается сразу. У меня подобное часто бывало если перерасчет неверно записан, данные обновляются с запаздыванием... Если я прав, то если закинуть индикатор на график и подождать свечек 10 то появится та же ошибка что и в тестере.

 

В том то и дело, что рассчитывается последняя закрытая свеча, он не должен никак перерисовывать 

  if (Bars<0) return(-1);

  if(rates_total <= Rsi_Per+MApr) return(0);

  int limit=Bars-prev_calculated;

  if (limit<0) limit=0;

  if (limit > 3000) limit=3000;


  for(int i=limit; i>0; i--){

Т.е. только тогда, когда Bars-prev_calculated = 1 и  i=1 - закрытый Бар, как может что-то хитрить?
 

Судя по этому коду, нулевой бар в реальном времени вообще не считается (i>0), а когда он переползает на позицию 1, остается необновленным (limit=Bars-prev_calculated), так что индикатор показывает мусор.

Правильно единожды рассчитаются только те бары от limit до 1, которые существовали в момент набрасывания индикатора на чарт.

 
Stanislav Korotky:

Судя по этому коду, нулевой бар в реальном времени вообще не считается (i>0), а когда он переползает на позицию 1, остается необновленным (limit=Bars-prev_calculated), так что индикатор показывает мусор.

Правильно единожды рассчитаются только те бары от limit до 1, которые существовали в момент набрасывания индикатора на чарт.

Ну не совсем так, нулевой бар не считается, правда - это шум, но как только образуется новый 0 бар, то 1 в истории рассчитывается индюком, причем на данных также 1 бара, поэтому он никак не перерисовывается и рассчитывается только 1 раз иначе будет очень тяжело 6 РСИ и 2 ЕМАшки...

 
ALEKSANDR MARTYNOV:

Ну не совсем так, нулевой бар не считается, правда - это шум, но как только образуется новый 0 бар, то 1 в истории рассчитывается индюком, причем на данных также 1 бара, поэтому он никак не перерисовывается и рассчитывается только 1 раз иначе будет очень тяжело 6 РСИ и 2 ЕМАшки...

Я смотрю только на приведенный код. В нем 1-й бар не обновляется в момент, когда он становится 1-м, т.е. там остается мусор. Чтобы этого не было, нужно уменьшить prev_calculated на 1 или проверять чтобы limit не был меньше 1.

Для проверки появления нового бара - проверяйте изменение 0-го времени.

 
Stanislav Korotky:

Я смотрю только на приведенный код. В нем 1-й бар не обновляется в момент, когда он становится 1-м, т.е. там остается мусор. Чтобы этого не было нужно уменьшить prev_calculated на 1.

Спасибо Станислав, за оказанное внимание!

Хотя вы и не до конца поняли принцип, 1 бар обновляется именно, когда он становится первым, это я трассировал на мессаджах. Я разобрался в чем дело, на истории индикатор считает внутренние индикаторы старших ТФ по закрытым барам, а текущие расчеты происходят на нулевых барах, которые индюками считаются в отличие от моего.

Теперь встает задача каким образом скопировать историю баров в буфера, так чтобы можно было править 0 член массива,

чтобы рассчитать iRSIOnArray...

 

Вопрос кажется решен. Копированием данных в массив

и имитацией закрытия текущего бара на старшем ТФ.

история считается на смещении бара, текущие данные на событии

открытия новых баров по всем ТФ. 

 
З а с а д а, в тестере все равно глючит...
 
Год еще не прошел, но я добил на примере 1 индюка, как его расчитать на младшем ТФ, УРА! УРА! УРА-А-А...