Мерить время в барах не совсем корректно, так как если сделок нет то бара нет тоже. Тем более что и необходимости такой нет. Дата и время свечи доступны через свойство sec.Bars[i].Date
Вы правы, конечно, но использование времени вместо индексов заметно усложнит код, особенно в контексте использования сжатия. Не всякий нормальный человек такое осилит. Я не стал грузить топикстартера этими деталями.
Спасибо за ваш пример изменил свой вариант, но мне еще нужно присвоить числовое значение для WhiteDay и BlackDay что бы потом отрисовать их на графике.
А почему надо отказаться от ClosePrices и OpenPrices?
Пожалуйста, вот еще пример:
// ...
bool whiteDay = false, blackDay = false;
DateTime date = new DateTime();
double prevDayOpen = 0, lastClose = 0;
int barsCount = source.Bars.Count;
if (barsCount > 0)
{
IDataBar bar = source.Bars[0];
date = bar.Date.Date;
prevDayOpen = bar.Open;
}
for (int i = 0; i < barsCount; i++)
{
IDataBar bar = source.Bars[i];
if (date != bar.Date.Date) // Дата бара не совпадает с сохраненной - новый день
{
date = bar.Date.Date;
double prevDayClose = lastClose;
whiteDay = prevDayClose > prevDayOpen;
blackDay = prevDayClose < prevDayOpen;
prevDayOpen = bar.Open;
}
lastClose = bar.Close;
// ... Тут все остальное
}
ClosePrices и OpenPrices, также как и HighPrices и LowPrices - это списки, которые программа создаст при обращении к ним. На их создание потребуются дополнительные ресурсы: процессорное время и память. К тому же они помечены разработчиками как устаревшие. Обращение же к bar.Close и т.п. - почти "бесплатное".
Я не знаю как вытащить из свойства sec.Bars[i].Date время и сравнить его с 100000
if (sec.Bars[i].Date.TimeOfDay == new TimeSpan( 10, 0, 0 ))
но так лучше не сравнивать, потому что бара в 10:00 может и не быть.