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