下面的代码更改放置在队列中的第一个对象的值。这是将第一个对象放入队列的代码:
//put the initial Ma value on the movingAverageQueue
movingAverageQueue.Enqueue(previousMa)
这行代码改变了上面我已经放入队列的第一个对象
previousMa.Close = previousMa.Close - sub/period;
我在这段代码的逻辑中遗漏了什么?
这是完整的代码:
public class MA
{
public static Queue<DateClose> MAMethod(Queue<DateClose> queue,
Queue<DateClose> firstMASample, int period)
{
Queue<DateClose> sample = new Queue<DateClose>(firstMASample.ToArray());
Queue<DateClose> movingAverageQueue = new Queue<DateClose>(queue.Count() + 1);
// get the last item or initial MA value from the queue
DateClose previousMa = firstMASample.LastOrDefault();
sample = new Queue<DateClose>(firstMASample.Take(firstMASample.Count - 1));
DateClose mA = null;
decimal sub = 0;
DateClose add = null;
//put the initial Ma value on the movingAverageQueue
movingAverageQueue.Enqueue(previousMa);
foreach (DateClose d in queue.ToList())
{
mA = sample.Dequeue();
sub = mA.Close;
previousMa.Close = previousMa.Close - sub/period;
add = d;
sample.Enqueue(d);
previousMa.Close = previousMa.Close + add.Close/period;
previousMa.Date = add.Date;
movingAverageQueue.Enqueue(previousMa);
queue.Dequeue();
}
return movingAverageQueue;
}
}
DateClose 类是:
public class DateClose
{
public DateTime Date { get; set; }
public decimal Close { get; set; }
}