Sergey Gritsay: Не знаю точно как вы это хотите использовать, но может такой вариант натолкнет на какие мысли
Основная проблема - это учет выходных/"дыр", то есть в некоторых случаях нам нужны бары не совпадающие со временем из входных параметров. Для этого должна быть логика обработки 4 описанных ситуаций, по крайней мере я вижу такое решение.
Timur Gatin: Основная проблема - это учет выходных/"дыр", то есть в некоторых случаях нам нужны бары не совпадающие со временем из входных параметров. Для этого должна быть логика обработки 4 описанных ситуаций, по крайней мере я вижу такое решение.
В некоторых это каких? Пока конечно не могу въехать в вашу тему и понять какой результат вы хотите получить.
Пока что правильный результат смог получить только при сессии длинной 24 часа.
int Index(int& index[][2], int open=0, int close=-1)
{
//---if(open<0) open=0;
if(open>23) open=23;
if(close>23) close=23;
if(close<-1) close=-1;
if(close==-1) close=open+24;
if(close<=open) close+=24;
MqlDateTime mdt={NULL};
TimeToStruct(Time[0],mdt);
mdt.sec=0;
mdt.min=0;
mdt.hour=open;
int td=(close-open)*3600;
datetime to=StructToTime(mdt);//открытие текущей сессии
datetime tc=to+td;//ее закрытие
int indsize=0;
for(int i=0;i<bars;i++)//поиск открытия по всем барам от сегодня в прошлое
{if(Time[i]>to) continue;// не дошли до открытия
if(Time[i]<to)// перескочили открытие (выходные к примеру)
{int b=i-1;
if(b>=0 && Time[b]<tc)//если закрытие не попадает на выходной
{ArrayResize(index,indsize+1,100);
index[indsize][0]=b;//сохраняем первый после выходных бар (например, открытие понедельника)
indsize++;
}
while(Time[i]<to && to>Time[bars-1])// пропускаем выходные
{to-=86400;
tc-=86400;
}
}
if(Time[i]==to)//открытие совпадает с временем бара
{ArrayResize(index,indsize+1,100);
index[indsize][0]=i;
indsize++;
to-=86400;
tc-=86400;
}
}
if(open+24==close)//поиск закрытия
{index[0][1]=0;
for(int i=1;i<indsize;i++)
{index[i][1]=index[i-1][0];
}
return(indsize);
}
//---return(indsize);
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Не знаю точно как вы это хотите использовать, но может такой вариант натолкнет на какие мысли
Только узнаем об этом в понедельник. Нарисовать конец можно и нужно на пятничном баре, но только сдеалть это сможем в понедельник
Основная проблема - это учет выходных/"дыр", то есть в некоторых случаях нам нужны бары не совпадающие со временем из входных параметров. Для этого должна быть логика обработки 4 описанных ситуаций, по крайней мере я вижу такое решение.
Я за конец сессии пятницы беру открытие понедельника, так на разных таймфреймах будет одинаковое значение закрытия.
Пока что правильный результат смог получить только при сессии длинной 24 часа.
В некоторых это каких? Пока конечно не могу въехать в вашу тему и понять какой результат вы хотите получить.
Если понедельник открылся так, что первый бар уже попадает в новую сессию?
Предполагается, что время закрытия не входит в сессию, а открытие входит.
В цикле это будет так
Лучше не придумал
Предполагается, что время закрытия не входит в сессию, а открытие входит.
В цикле это будет так