Как включить код индикатора в советник ? - страница 3

 
Допустим вставите. Что дальше будете делать с этими тормозами? 
 

все работает без тормозов

 
Может просто не знаете как бывает без тормозов
 
может быть
 

работало все без тормозов, пока ошибку не нашел ))

пересчитывает весь массив 300 элементов, хоть и не на каждом тике, а баре, но все равно получается медленно,

при работе с обычным индикатором пересчитывается только новые значения, по этому скорость в 300 раз быстрее

пытался сделать также, но в массивах надо еще сдвигать значения и вставлять вконец/начало новые значения

Есть-ли решение в MQL4 для этого случая? вроде-бы типичная ситуация

 
Mr_Goods:

работало все без тормозов, пока ошибку не нашел ))

пересчитывает весь массив 300 элементов, хоть и не на каждом тике, а баре, но все равно получается медленно,

при работе с обычным индикатором пересчитывается только новые значения, по этому скорость в 300 раз быстрее

пытался сделать также, но в массивах надо еще сдвигать значения и вставлять вконец/начало новые значения

Есть-ли решение в MQL4 для этого случая? вроде-бы типичная ситуация


Одно из решений.

Самое очевидное - использовать закольцованный массив. Индекс i-го элемента в закольцованном массиве определяется формулой

ni = MathMod( i + nShift, 300)

При первоначальном заполнении  nShift = 0, При поступлении каждого нового бара nShift  уменьшается на единицу:

nShift --; if (nShift < 0) nShift +=300;

Т.е., мы не двигаем элементы массива, а двигаем ссылку. 

 
Mislaid:

Одно из решений.

Самое очевидное - использовать закольцованный массив. Индекс i-го элемента в закольцованном массиве определяется формулой

ni = MathMod( i + nShift, 300)

При первоначальном заполнении  nShift = 0, При поступлении каждого нового бара nShift  уменьшается на единицу:

nShift --; if (nShift < 0) nShift +=300;

Т.е., мы не двигаем элементы массива, а двигаем ссылку. 

спасибо, только я не совсем понял причем тут остаток от деления MathMod. Может просто при вычислении запоминать индекс "первого" элемента с которого все искать


А может сделать обратную индексацию

 
Mr_Goods:

работало все без тормозов, пока ошибку не нашел ))

пересчитывает весь массив 300 элементов, хоть и не на каждом тике, а баре, но все равно получается медленно,

при работе с обычным индикатором пересчитывается только новые значения, по этому скорость в 300 раз быстрее

пытался сделать также, но в массивах надо еще сдвигать значения и вставлять вконец/начало новые значения

Есть-ли решение в MQL4 для этого случая? вроде-бы типичная ситуация


ну так считай только последние.

//global 
int count=300; 
double buf_main[300];
int bars_prev;

//OnTick()

//new bar 
if(Bars==bars_prev) return;
bars_prev=Bars;

ArrayCopy(buf_main,buf_main,count,0);

for(int i=0;i<count;i++)

{

buf_main[i]=...; 

} 
count=1;
Причина обращения: