Правильный вариант понять и простить ))) Не все так страшно, на рабочем скрипте ставят ограничения количества баров и это самое i=0 будет именно там где надо для правильной работы, а не больше и всегда будет правильный индекс вне зависимости от того сколько баров есть. И кстати не всегда используют циклы с 0 индекса. Если есть обращения к предыдущим свечам, типа [i-3], то начинать надо с 3 или еще дальше если очень хочется.
А В GetData данные есть только на текущем пересчете и на следующем баре их уже не будет поэтому проблем с устаревшими данными нет.