была такая же проблема, решил так:
объявляем новый лист ASD<double>() в классе.

На последнем баре, передаем сразу весь лист (т.е. к кэшу только один раз обращаемся):
ASD = source.HighPrices;

далее, поциклово (в зависимости от задач) обращаемся уже к ASD. Тогда, внутри этого цикла (i=n, i<m, i++), мы на каждой итерации обращаемся не к кэшу (через source.HighPrices[i] ), а к новому листу.

При такой передаче, скорость этого цикла в 4 раза выше (на входе инструмент).

Также, это явно лучше, чем передавать в инпуты значения и их записывать (отдельные инпуты для Open, Close, Low, High).

Скорость получается такая же, как и для 4 инпутов, но у нас больше данных со входа + еще 3 инпута не занятых.