Journal - log file - invalid shift - как понимать?

 
Journal - log file - invalid shift - как понимать?
после запуска МТ к одному из графиков привязан индикатор
в лог файле и в журнале вижу такое
как это понимать? и invalid shift выдает каждые 2-5 сек

13:26:02 Expert 'indicators\I-ATRTrailingStop': loaded [0 uservars, 1 inputs, 7 vars, 2 strings, 3 ini, 66 exe]
13:26:03 Expert 'indicators\I-ATRTrailingStop': loaded [0 uservars, 1 inputs, 7 vars, 2 strings, 3 ini, 66 exe]
13:26:03 Expert 'I-ATRTrailingStop': invalid shift 7359 [7359]
13:27:36 Expert 'I-ATRTrailingStop': invalid shift 7359 [7359]
 
Выход за пределы
Это значит, что где-то что-то выходит за пределы массивов
типа High[-123] либо Low[123] (при Bars, например, 100)
 
попытка выхода за пределы массива. в Вашем случае последнее допустимое значение - 7358
 
УРА!!! спасибо, понял - помогает ваша рекомендация по написанию
пользовательских индикаторов, жаль что ошибки так же не прописаны подробно - переписал индикатор и все стало лучше - но все равно один раз выдает ошибку - теперь выдает ОДИН раз - единственный после запуска
16:02:13 Expert 'indicators\I-XO-A-S': loaded [0 uservars, 1 inputs, 15 vars, 0 strings, 3 ini, 92 exe]
16:02:13 Expert 'I-XO-A-S': invalid shift 6178 [6178]
- явно массива никакого нет...
индикатор ниже - цепляю на 15 мин - Bars = 6178 и ошибка на тот же индекс показывает, но начинаем не с Bars-1 как написано в рекомендации, а с Bars-2 - ошибка исчезла!!!
----------------

/*[[
Name := XO-I-A-H
Author :=
Link := 1@1.ru
Notes := POINT FIGURES INDICATOR
Separate Window := No
First Color := Blue
First Draw Type := Symbol
First Symbol := 217
Use Second Data := Yes
Second Color := Red
Second Draw Type := Symbol
Second Symbol := 218
]]*/

Input: BoxSize(15);

var: CurrentBar(0);
var: startflag(0), cur(0);
var: Step(0);
var: Up(0), Dn(0);
var: Hi(0), Lo(0);

var: shift(0), cnt(0), loopbegin(0), first(True), prevbars(0), sum(0);

SetLoopCount(0);

// check for additional bars loading or total reloading
If Bars < prevbars Or Bars-prevbars>1 Then first = True;
prevbars = Bars;

If first Then {
// loopbegin prevent couning of counted bars exclude current
loopbegin = Bars-2; // Bars -1 было по руководству
If loopbegin < 0 Then Exit; // not enough bars for counting

Hi=c[loopbegin];
Lo=c[loopbegin];

first = False;
};

loopbegin = loopbegin+1; // current bar is to be recounted too

For CurrentBar = loopbegin Downto 0 {

cur = c[CurrentBar];
Step = BoxSize*point;

if cur > (Hi+Step) then {
if Dn = 1 then { // direction changed - BUY signal
setIndexValue(CurrentBar, cur);
};
Up=1;
Dn=0;
Hi=cur;
Lo=cur-Step;
};
if cur < (Lo-Step) then {
if Up = 1 then { // direction changed - SELL signal
setIndexValue2(CurrentBar, cur);
};
Up=0;
Dn=1;
Hi=cur+Step;
Lo=cur;
};

loopbegin = loopbegin-1; // prevent to previous bars recounting
};
Причина обращения: