haClose = (C[i] + O[i] + L[i] + H[i]) / 4;
// далее - неверно!!! нужно использовать haOpen и haClose !!!
// haOpen = ( O[i - 1] + C[i - 1] ) / 2;
// должно быть так:
haOpen = (haOn[i - 1] + haCn[i - 1]) / 2;
haLow = Math.Min(L[i], Math.Min(haOpen, haClose));
haHigh = Math.Max(H[i], Math.Max(haOpen, haClose));