Originally Posted By: Paul

Code:
public IList<double> Execute(IList<double> list1)
{
var cnt = list1.Count;
var values = new double[cnt];

// Массив, по которым считается среднее значение.
var input1 = new double[Depth];


Код Вашего индикатора обрывается на операторе new. Этот оператор лишь выделяет запрошенное количество памяти и инициализирует ее нулями. Другие значения там (в переменной input1) сами по себе не появятся, их туда нужно будет скопировать.
Значения передаются в Ваш индикатор в списке list1. И приходят они одновременно, сразу списком. Программа подчитает с диска историю, дождется новой свечи и т.п., заполнит список и даст его Вашему индикатору, вызвав функцию Execute. При появлении следующей свечи все это повторится.
1. значения в этом списке представлены с увеличением времени, т.е. по мере увеличения индекса элемента списка увеличивается и дата\время с которой он ассоциирован. Например, значение элемента list1[0] - соответствует времени 10:00, а list1[1] - 10:01. и т.д.
2. Самое новое значение в конце списка, т.е. в элементе list1[ list1.Count-1 ]
3. В каком порядке скопируете, в таком и будут. Повторю, сами по себе значения в новом массиве (new double[Depth] - это массив, а IList<double> list1 - список, есть разница) не окажутся, их нужно скопировать. Видимо, поскольку Вы хотите сами указывать длину, копировать надо примерно так
Code:
int count = Math.Min( Depth, list1.Count );
for (int i = Depth - count, b = list1.Count - count; i < count; i++, b++)
  input1[ i ] = list1[ b ];

Выглядит сложно и непонятно (даже мне сложно, навскидку, такое написать)? Используйте простые готовые примеры, коих предостаточно на форуме.
Нелишне Вам будет и почитать какой-нибудь учебник по языку C#.

Сразу напишу, что строчки
Code:
public class MyCube1test : ITwoSourcesHandler, IStreamHandler, IDoubleInputs, IDoubleReturns
и
public IList<double> Execute(IList<double> list1)
не соответствуют друг-другу. Пишите проще, например
public class MyCube1test  : IDouble2DoubleHandler