我有这个函数,它是 SMA(简单移动平均线)。我在 ZedGraph 中显示为图形的数组中的结果,现在它将从 0 到 1956 开始。我希望图形从 frameSize / 2 在本例中开始,它将是 300 / 2 所以 150 所以图形应该从 150 开始到 2016 年。
我不想让图表增长我的意思是数组的长度应该保持为 1956 我只是希望它从一开始就被 150 个索引推送,所以它将从索引 150 而不是 0 开始。
所以这是 SMA 函数:
private static double[] smaDoubles(int frameSize, int[] data)
{
int padding = frameSize / 2;
double sum = 0;
double[] avgPoints = new double[(padding + data.Length) - frameSize + 1];
for (int counter = padding; counter <= data.Length - frameSize; counter++)
{
int innerLoopCounter = 0;
int index = counter;
while (innerLoopCounter < frameSize)
{
sum = sum + data[index];
innerLoopCounter += 1;
index += 1;
}
avgPoints[counter] = sum / frameSize;
sum = 0;
}
return avgPoints;
}
在 for 循环 counter = padding 之前它是 counter = 0 所以结果在这里的图像中。
绿色的是这个函数的 SMA。绿色从 150 开始,但在 1956 结束,它应该在 2106 结束。当我将它移动到从 150 开始时,我希望整个图表作为一个单位移动 150,因此它将从 150 开始并在 2106 结束。红色图表应该保持不变
我该怎么做?
现在就像在图像中一样,图形从右边缘结束 300。
这是现在的功能,我更改了行: double[] avgPoints = new double[data.Length - frameSize + 1]; 这就是它原来的样子,所以我现在把它改成了这个。并且函数将 frameSize 设为 3,将数据设为 [10],我得到相同的异常:
private static double[] smaDoubles(int frameSize, int[] data)
{
int padding = frameSize / 2;
double sum = 0;
double[] avgPoints = new double[data.Length - frameSize + 1];
for (int counter = padding; counter <= data.Length - padding; counter++)//for (int counter = padding; counter <= data.Length - frameSize; counter++)
{
int innerLoopCounter = 0;
int index = counter;
while (innerLoopCounter < frameSize)
{
// if (index < data.Length)
sum = sum + data[index];
innerLoopCounter += 1;
index += 1;
}
avgPoints[counter] = sum / frameSize;
sum = 0;
}
return avgPoints;
}