Когда не вся история закачана нужно проверять через GetLastError о наличии ошибки 4066 - ERR_HISTORY_WILL_UPDATED. Ее нужно искать после доступа к тайм-сериям - у вас - после iBarShift. Обычно ждут какое-то время, пытаются прочитать значение и проверяют об ошибки опять. Пример - здесь.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Допустим у меня в последний сохраненный бар был 20.02.2008 в 9.52.
Когда MT соединился с сервером 21.02.2008 в 16.30 на графике начал формироваться бар с этим временем.
Промежуток между 20.02.2008 9.52 и 21.02.2008 16.30 остается пустым некоторое время (например связь с инетом медленная),
Когда бар 21.02.2008 в 16.30 сформирован он будет под номером 0, а бар 20.02.2008 в 9.52 будет под номером 1 т.к. бары в промежутке еще не
подгрузились. Вот и получается что и в моей сохраненной истории будет дыра с 20.02.2008 9.52 по 21.02.2008 16.30.
Каким образом надо сделать так чтобы дождаться когда все бары будут подгружены и только потом сохранять их.
init()
{
pTime = Time[0];
}
start()
{
//как только будет сформирован текущий бар начнем обработку
if(pTime != Time[0])
{
//найдем номер бара по дате и времени последнаго обновления
j = iBarShift(Symbol(), 0, StrToTime(LastTime), false);
for(i=j; i>=0; i--) InsertBar(Symbol(),Open[i] и т.д.);
}
}