Попробуйте в лоб, такие решения в МТ4 часто быстрее:
double BarValues[60] = ...какие-то данные... for (i=0; i<59; i++) { BarValues[i]=BarValues[i+1]; } BarValues[59]= .... новое значение в очередь ...Не думаю что этот примитив будет вешать терминал.
Добрый день, подскажите направление решения проблемы:
имеется массив из 60 элементов. Нужно добавление нового элемента таким образом, что-бы массив сдвинулся на один элемент и новое (добавляемое) значение встало в конец списка. Соответственно старое первое значение из исходного массива должно удалиться, но размерность должна остаться прежней.
Пример:
[1,2,3...60] -> [2,3,4...61] -> [3,4,5...62] и т.д.
Моя функция:
Как видите она крайне неоптимальна. Вызов этой функции происходит каждые пять секунд (из функции start), но мой код напрочь заставляет metatrader зависнуть. Т.е. как только происходит вызов моего кода окно метатрейдера становится недоступным...
Как можно организовать оптимальную очередь FIFO?
Заранее спасибо!
используйте массив циклически
т.е. [1,2,3...60]-> [61,2,3...60] и запоминайте что индекс смещается - начинается с первого элемента, а нулевой будет последним
на следующем шаге [61,62,3...60] начинается со вторго, а первый будет последним и т.д.
Можно написать 2 функции - записи в такой массив и чтения
WriteArray(x double)
{
startindex++;
if (startindex==ArraySize(arr)) startindex=0;
arr[startindex]=x;
}
ну и аналогично ReadeArray. Для каждого такого циклического массива нужно запоминать текущее смещение записи в массив (переменная startindex)
Не нужен временный массив.
ArrayCopy(ar,ar,0,1);
Насколько я понял, то начальная задача :
"... добавление нового элемента таким образом, что-бы массив сдвинулся на
один элемент ( куда?) и новое (добавляемое) значение встало в (Конец/начало) конец списка."
У меня аналогичный вопрос возник около года назад.
Без второго массива, у меня не получилось.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, подскажите направление решения проблемы:
имеется массив из 60 элементов. Нужно добавление нового элемента таким образом, что-бы массив сдвинулся на один элемент и новое (добавляемое) значение встало в конец списка. Соответственно старое первое значение из исходного массива должно удалиться, но размерность должна остаться прежней.
Пример:
[1,2,3...60] -> [2,3,4...61] -> [3,4,5...62] и т.д.
Моя функция:
Как видите она крайне неоптимальна. Вызов этой функции происходит каждые пять секунд (из функции start), но мой код напрочь заставляет metatrader зависнуть. Т.е. как только происходит вызов моего кода окно метатрейдера становится недоступным...
Как можно организовать оптимальную очередь FIFO?
Заранее спасибо!