The current code for the WMA looks like this:
if (BarsArray[0].BarsType.IsRemoveLastBarSupported)
{
if (CurrentBar == 0)
Value[0] = Input[0];
else
{
int back = Math.Min(Period - 1, CurrentBar);
double val = 0;
int weight = 0;
for (int idx = back; idx >= 0; idx--)
{
val += (idx + 1) * Input[back - idx];
weight += (idx + 1);
}
Value[0] = val / weight;
}
}
else
{
if (IsFirstTickOfBar)
{
priorWsum = wsum;
priorSum = sum;
myPeriod = Math.Min(CurrentBar + 1, Period);
}
wsum = priorWsum - (CurrentBar >= Period ? priorSum : 0) + myPeriod * Input[0];
sum = priorSum + Input[0] - (CurrentBar >= Period ? Input[Period] : 0);
Value[0] = wsum / (0.5 * myPeriod * (myPeriod + 1));
}
if(CurrentBar == 0)
Value[0] = Input[0];
else
{
if (IsFirstTickOfBar)
{
if(CurrentBar == 0)
{
priorWsum = 0.0;
priorSum = 0.0;
}
else
{
priorWsum = wsum[1];
priorSum = sum[1];
}
myPeriod = Math.Min(CurrentBar + 1, Period);
}
wsum[0] = priorWsum - (CurrentBar >= Period ? priorSum : 0) + myPeriod * Input[0];
sum[0] = priorSum + Input[0] - (CurrentBar >= Period ? Input[Period] : 0);
Value[0] = wsum[0] / (0.5 * myPeriod * (myPeriod + 1));
}

Comment