Не получается сместить массив. Помогите.

 

Здравствуйте Гуру MQL5. У меня такая вроде не самая сложная задача но бьюсь уже долгое время и никак лыжи не хотят ехать)). Имеется массив с ценами Bid определённого размера. При получении цены нужно новую цену записывать в начало массива, а предыдущие значения смещать с удалением последеней с сохранением размера массива. Пробовал и через ArrayCopy хотя это вроде плохой метод и через цикл пробую с перезаписью значений со смещением в цикле и никак не получается, выбивает ошибку: "Array out of range". 

Вот один из вариантов как пытаюсь делать. Посоветуйте пожалуйста что подправить или как сделать нормально по другому чтоб решить задачу.

for(int i = BufferSize - 1; i > 0; i--) {

Buffer[i] = Buffer[i-1];
}

Buffer[0] = NewBidPrice;
 
Viktor Ternovskiy:

Здравствуйте Гуру MQL5. У меня такая вроде не самая сложная задача но бьюсь уже долгое время и никак лыжи не хотят ехать)). Имеется массив с ценами Bid определённого размера. При получении цены нужно новую цену записывать в начало массива, а предыдущие значения смещать с удалением последеней с сохранением размера массива. Пробовал и через ArrayCopy хотя это вроде плохой метод и через цикл пробую с перезаписью значений со смещением в цикле и никак не получается, выбивает ошибку: "Array out of range". 

Вот один из вариантов как пытаюсь делать. Посоветуйте пожалуйста что подправить или как сделать нормально по другому чтоб решить задачу.

используйте циклический буфер и не надо будет ничего копировать

 
Viktor Ternovskiy:

Здравствуйте Гуру MQL5. У меня такая вроде не самая сложная задача но бьюсь уже долгое время и никак лыжи не хотят ехать)). Имеется массив с ценами Bid определённого размера. При получении цены нужно новую цену записывать в начало массива, а предыдущие значения смещать с удалением последеней с сохранением размера массива. Пробовал и через ArrayCopy хотя это вроде плохой метод и через цикл пробую с перезаписью значений со смещением в цикле и никак не получается, выбивает ошибку: "Array out of range". 

Вот один из вариантов как пытаюсь делать. Посоветуйте пожалуйста что подправить или как сделать нормально по другому чтоб решить задачу.


           Через ArrayCopy можно...
         ArrayCopy(
            Buffer,            // куда копируем
            Buffer,            // откуда копируем
            1,                 // с какого индекса пишем в приемник
            0,                 // с какого индекса копируем из источника
            BufferSize-1       // сколько элементов
         );
         Buffer[0]=NewBidPrice;
 
Vladimir M.:

           Через ArrayCopy можно...
Сработало, спасибо)) Хотя перед этим так же пробовал, но видимо где-то накосячил. Позже всё же наверное перепишу в кольцевой массив, более правильно будет насколько понял.
Причина обращения: