Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2384

 
Maxim Kuznetsov #:

Ростислав убирает конкурентов .... несколько лет подряд даёт неверные советы

кол-во баров между двумя отметками времени это разница iBarShift(), ни никак не времени. Или просто Bars()

Мою ошибку указал Artyom Trishkin
 
Tretyakov Rostyslav #:

Спасибо!

 
Tretyakov Rostyslav #:
Мою ошибку указал Artyom Trishkin

Могу ещё на одну(сразу две в одном) указать:

Для iBarShift:

Возвращаемое значение

Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact).

Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
Документация по MQL5: Доступ к таймсериям и индикаторам / iBarShift
  • www.mql5.com
iBarShift - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:

Могу ещё на одну(сразу две в одном) указать:

Для iBarShift:

Так тут запрос времени объекта, раз объект есть, то и бар есть.
 
Tretyakov Rostyslav #:
Так тут запрос времени объекта, раз объект есть, то и бар есть.
Никому нельзя верить. Даже себе
 
Artyom Trishkin #:
Никому нельзя верить. Даже себе
Согласен, поэтому первый вариант внутри дня надежнее.
 
Tretyakov Rostyslav #:
Согласен, поэтому первый вариант внутри дня надежнее.

нет

вы же не первый год..БАРОВ может не быть в любое время

 
Maxim Kuznetsov #:

нет

вы же не первый год..БАРОВ может не быть в любое время

Правильно, мой вариант заполняет пробел.
 
Igor168 #:

Здравствуйте! Может кто-нибудь поделиться кодом или скинуть ссылку на видео, как узнать количество баров внутри созданного пользователем прямоугольника? 


код (почти без ошибок, то есть не тестировался - доверялся корректности 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 до настоящего + от настоящего число гипотетичных баров
      return Bars(symbol,tf,time1,lastTime)+(int)((time2-lastTime)/PeriodSeconds(tf));
   }
   // полностью полагаемся на Bars()
   return Bars(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 могут иметь разный порядок (кто раньше, кто позже)

и они могут "быть в будущем"

НАЧНИТЕ УЖЕ ПИСАТЬ СОФТ

 
Спасибо!
Причина обращения: