Допустим у нас есть скрипт с двумя скользящими средними. Мы запускаем оптимизацию, где для каждой скользящей подставляется 10 разных периодов. То есть всего скрипт будет пересчитан 100 раз и, соответственно, каждая скользящая подсчитана по 100 раз. При том что их всего 10 разных. GetData позволяет избежать повторного расчета сохраняя данные в кэш и извлекая их оттуда при необходимости, что гораздо быстрее их повторного расчета. Для того чтобы определить, что нужный индикатор уже рассчитан и сохранен программа ищет в кэше данные с совпадающим названием индикатора и параметрами его расчета. Если вы укажете не все оптимизируемые параметры от которых зависит расчет индикатора то при оптимизации тслаб будет подставлять неверные значения индикаторов, что сделает оптимизацию бессмысленной (так было у Вас вначале). Если указать лишние параметры, которые оптимизируются, но не влияют на расчет индикатора, то это снизит эффективность использования GetData. В предельном случае, если туда напихать все оптимизируемые параметры он будет даже чуть тормозить работу.
В приведенном Вами примере судя по всему сначала рассчитывается первый индикатор с оптимизируемым периодом, а затем на его основании рассчитывается второй индикатор также с оптимизируемым периодом. Соответственно при кэшировании данных по первому индикатору нужно указывать один параметр - его период, а при кэшировании второго два параметра, так как его расчет зависит от значений первого индикатора, а значит и от его периода.
По поводу source.CacheName. Не знаю что это такое. Наверное, это имя по которому программа определяет, что к какому скрипту относится кэш. Указывать в качестве параметра его не надо.