Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact).
Здравствуйте! Может кто-нибудь поделиться кодом или скинуть ссылку на видео, как узнать количество баров внутри созданного пользователем прямоугольника?
код (почти без ошибок, то есть не тестировался - доверялся корректности Bars()) :
/** кол-во баров между двумя отметкам времени
time1 и time2 могут "быть в будущем" и в произвольной очерёдности
@arg time1 отметка 1. Если 0 = TimeCurrent()
@arg time2 отметка 2. Если 0 = TimeCurrent()
@arg tf на котором таймфрейме считать бары (по умолчанию на текущем)
@arg symbol на котором символа считать бары (умолчание - текущий)
*/int BarsBetween(datetime time1,datetime time2,ENUM_TIMEFRAMES tf=PERIOD_CURRENT,string symbol="")
{
if (time1==0) time1=TimeCurrent();
if (time2==0) time2=TimeCurrent();
if (time1>time2) {
// time1,time в нужной очерёдностиdatetime tmp=time1; time1=time2; time2=tmp;
}
if (symbol=="") symbol=_Symbol;
if (time1>TimeCurrent()) {
// оба time1 time2 в будущем - число гипотетичных баров// примерно так граф.объекты расставляются, следуем этомуreturn (int)((time2-time1)/PeriodSeconds(tf));
}
datetime lastTime=iTime(symbol,tf,0);
if (time2>=lastTime+PeriodSeconds(tf)) {
// только time2 в будущем// кол-во баров = от time1 до настоящего + от настоящего число гипотетичных баровreturnBars(symbol,tf,time1,lastTime)+(int)((time2-lastTime)/PeriodSeconds(tf));
}
// полностью полагаемся на Bars()returnBars(symbol,tf,time1,time2);
}
/** "ширина" объекта в барах := кол-во баров между OBJPROP_TIME 0 и 1
аргументы следуют принципу ObjectSetXXX(chart,object,...)
@arg chart - идентификатор чарта. Если 0 - текущий
@arg obj - имя объекта
@arg tf - таймфрейм по которому считать бары
**/int ObjectBars(long chart,string obj,ENUM_TIMEFRAMES tf=PERIOD_CURRENT)
{
return BarsBetween(ObjectGetInteger(chart,obj,OBJPROP_TIME,0),ObjectGetInteger(chart,obj,OBJPROP_TIME,1),tf,ChartSymbol(chart));
}
/** "ширина" объекта в барах, для объектов текущего чарта. Так просто удобнее
*/int ObjectBars(string obj,ENUM_TIMEFRAMES tf=PERIOD_CURRENT)
{
return ObjectBars(ChartID(),obj,tf);
}
прим. для многолетних советчиков:
домен "ширина" - всегда положительный, функции возвращающие "ширину" не имеют права отдавать отрицательные
свойства объектов TIME могут иметь разный порядок (кто раньше, кто позже)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ростислав убирает конкурентов .... несколько лет подряд даёт неверные советы
кол-во баров между двумя отметками времени это разница iBarShift(), ни никак не времени. Или просто Bars()
Спасибо!
Мою ошибку указал Artyom Trishkin
Могу ещё на одну(сразу две в одном) указать:
Для iBarShift:
Возвращаемое значение
Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact).
Могу ещё на одну(сразу две в одном) указать:
Для iBarShift:
Так тут запрос времени объекта, раз объект есть, то и бар есть.
Никому нельзя верить. Даже себе
Согласен, поэтому первый вариант внутри дня надежнее.
нет
вы же не первый год..БАРОВ может не быть в любое время
нет
вы же не первый год..БАРОВ может не быть в любое время
Здравствуйте! Может кто-нибудь поделиться кодом или скинуть ссылку на видео, как узнать количество баров внутри созданного пользователем прямоугольника?
код (почти без ошибок, то есть не тестировался - доверялся корректности Bars()) :
прим. для многолетних советчиков:
домен "ширина" - всегда положительный, функции возвращающие "ширину" не имеют права отдавать отрицательные
свойства объектов TIME могут иметь разный порядок (кто раньше, кто позже)
и они могут "быть в будущем"
НАЧНИТЕ УЖЕ ПИСАТЬ СОФТ