Аналог ObjectGetValueByTime может кто то реализовывал ? - страница 6

 
Nikolai Semko #:
Ошибки не будет если ширина бара 1 пиксель и правая точка линии левее нулевого бара
Но если правая граница линии правее нулевого бара, то для правильного расчёта нужно дополнительное смещение, так как iBarShift будет возвращать -1
Мы же можем в таком случае указать  0 ?
 
Vladimir Pastushak #:
Мы же можем в таком случае указать  0 ?

это будет означать что правую границу линии из будущего мы переместили в нулевой бар, но при этом цена осталась из будущего. В результате видим ошибку. Тогда и цену надо пересчитывать. А это та же задача. 

 

Вы до сих пор не разобрались в вопросе, горе математики (!!!!) ????

//---- честно говоря ждал того, что кто нибудь чухнет уже наконец то перец вопроса, а не будет умничать тут!

Помочь?

Дело в том, что функция  ObjectGetValueByTime - это запрос значения с линии по времени а не с номера бара

Не партесь, никак не получиться заменить эту функцию, если нужно точно, не нужно изобретать велосипед, ведь на линии нет баров, время которых кратно ТФму, причем запрос значения этой функции в любое время .... , это круто и никакой нибудь индик по барам  ! !!!!

 
Renat Akhtyamov #:

Вы до сих пор не разобрались в вопросе, горе математики (!!!!) ????

//---- честно говоря ждал того, что кто нибудь чухнет уже наконец то перец вопроса, а не будет умничать тут!

Помочь?

Дело в том, что функция  ObjectGetValueByTime - это запрос значения с линии по времени а не с номера бара

Не партесь, никак не получиться заменить эту функцию, если нужно точно, не нужно изобретать велосипед, ведь на линии нет баров, время которых кратно ТФму, причем запрос значения этой функции в любое время .... , это круто и никакой нибудь индик по барам  ! !!!!

Эта функция состоит из кода.

Мы ищем вариант написания своего когда что бы обойти стандартную функцию, так как она тяжелая.

Вы можете помочь кодом или только текстом ?

 
Vladimir Pastushak #:
Мы же можем в таком случае указать  0 ?

Я не поленился и все таки написал пилотную версию функции double  iiBarShift:

double  iiBarShift(datetime t, string symbol, ENUM_TIMEFRAMES tf = PERIOD_CURRENT) {
   datetime t0 = iTime(symbol,tf,0);
   if (t==t0) return 0.0;
   if (t<t0) {
      int i = iBarShift(symbol, tf, t,false);
      datetime t1 = iTime(symbol,tf,i);
      datetime t2 = iTime(symbol,tf,i-1);
      return i - (t-t1)/double(t2-t1);
   }
   return -(t-t0)/double(PeriodSeconds(tf));
}

эта версия конечно медленее работает чем моя wBarShift, но зато не требует моей библиотеки. 
Теперь работает корректно PredictPriceFromTwoPoints()

Файлы:
TestLine.mq5  13 kb
 
Vladimir Pastushak #:

Правильно ли я перебрал функцию ?

Накидал советник для экспериментов.

Но результаты все равно не сходятся.

Работает ваш советник нормально, если убрать лишнее. Народ не понял задачу или понял по своему, вот и надавали не нужных, хоть и правильных, советов.

убрал лишнее, оставил это.

//+------------------------------------------------------------------+
double PredictPriceFromTwoPoints(datetime time0, double price0, datetime time1, double price1, datetime time2)
  {
   int persec = PeriodSeconds();
   long t0 = time0 - time0 % persec;
   long t1 = time1 - time1 % persec;
   long t2 = time2 - time2 % persec;

   double price2 = price0 + (price1 - price0) * (t2 - t0) / (t1 - t0);
   ::Print("Calc time " + DoubleToString(price2, _Digits));
   return(price2);
   
  }
//+------------------------------------------------------------------+

результат на гифке.

 
Nikolai Semko #:

Я не поленился и все таки написал пилотную версию функции double  iiBarShift:

эта версия конечно медленее работает чем моя wBarShift, но зато не требует моей библиотеки. 
Теперь работает корректно PredictPriceFromTwoPoints()

Николай, изначальная задача была написать копию ObjectGetValueByTime, а не более точный её аналог, поэтому double iiBarShift здесь не нужен.

 
Aleksandr Slavskii #:

Работает ваш советник нормально, если убрать лишнее. Народ не понял задачу или понял по своему, вот и надавали не нужных, хоть и правильных, советов.

убрал лишнее, оставил это.

результат на гифке.

Это работает только с условием что нет пропущенных баров на наблюдаемом участке и расстояние между барами всегда равно Periodseconds. Слишком частный случай, который возможен на минутных периодах в узком диапазоне. Так что не рабочий вариант.
 
Aleksandr Slavskii #:

Николай, изначальная задача была написать копию ObjectGetValueByTime, а не более точный её аналог, поэтому double iiBarShift здесь не нужен.

Я прочитал задачу по другому:
Даны две точки цена-время. Нужно найти цену для любого времени так, чтобы все три точки лежали на одной прямой чарта.
Пусть Владимир рассудит. 
 
Nikolai Semko #:
Это работает только с условием что нет пропущенных баров на наблюдаемом участке и расстояние между барами всегда равно Periodseconds. Слишком частный случай, который возможен на минутных периодах в узком диапазоне. Так что не рабочий вариант.

Точно, если есть дырки во времени (выходные, праздники) то будет ошибка. К сожалению твоя iiBarShift не убирает ошибку, при условии, что в ObjectGetValueByTime нет ошибки.