Добрый день, уважаемые, прошу помощи.

Недопонимания в части сжатия, разжатия в торговом алгоритме.
1.
Сжимаю свечи:
ISecurity tf = sec.CompressTo(new Interval(tfPeriod, DataIntervals.MINUTE)); //tfPeriod - оптим.параметр;

2.
Рассчитываю, например, Macd (С этим и проблема), за основу беру Wma написанный собственноручно:
IList<double> WmaSlow = tf.Decompress(TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod));
IList<double> WmaFast = tf.Decompress(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod));
IList<double> Gist =
tf.Decompress(
TradeHelper.Subtract(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod),
TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod)));
IList<double> SmaSignal = tf.Decompress(
Series.SMA(
TradeHelper.Subtract(TradeHelper.WMA(tf.ClosePrices, WmaFastPeriod),
TradeHelper.WMA(tf.ClosePrices, WmaSlowPeriod)), SmaSignalPeriod));

Т.е. если создать список, в который буду вкладывать результаты расчета wma, а я рассчитываю их на основе сжатого tf, а потом произвести декомпрессию, получаю список некорректный. Он будет равен длине ctx.barscount, но я на его основе не смогу посчитать Sma например, он будет заполнен равными значениями в определенном периоде. Поэтому приходится индикатор рассчитывать заново. Как это указано выше. Каждый элемент заново. Как можно этого избежать?

Неужели каждый расчет нужно выполнять на сжатых свечах, и каждый расчет разжимать?