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

 

Друзья, может кто то реализовывал аналог ObjectGetValueByTime  ?

Пробовал формулу линейной интерполяции но результат сильно отличается от ObjectGetValueByTime.

double InterpolatePrice(datetime t1, double p1, datetime t2, double p2, datetime t) // === сильные расхождения
{
   // Защита от деления на ноль
   if(t1 == t2)
      return(p1);
   
   // Линейная интерполяция
   double price = p1 + (p2 - p1) * (double)(t - t1) / (double)(t2 - t1);
   return(price);
}


Может кто то уже решал подобную задачу, поделитесь примером.

Документация по MQL5: ObjectGetValueByTime / Графические объекты
Документация по MQL5: ObjectGetValueByTime / Графические объекты
  • www.mql5.com
Возвращает значение цены для указанного времени указанного объекта. Параметры chart_id [in]  Идентификатор графика. 0 означает текущий график...
 
Vladimir Pastushak:

Друзья, может кто то реализовывал аналог ObjectGetValueByTime  ?

Пробовал формулу линейной интерполяции но результат сильно отличается от ObjectGetValueByTime.


Может кто то уже решал подобную задачу, поделитесь примером.

Используйте индексы баров, а не время их открытия. Тогда все получится. Если расчет производится в "будущем", то с каждым новым баром потребуется корректировка, т. к. могут быть дыры в барах, особенно это касается минуток. Хотя выходные также никто не отменял (касается всех ТФ).
 
Ihor Herasko #:
Используйте индексы баров, а не время их открытия. Тогда все получится. Если расчет производится в "будущем", то с каждым новым баром потребуется корректировка, т. к. могут быть дыры в барах, особенно это касается минуток. Хотя выходные также никто не отменял (касается всех ТФ).
Есть пример, можете поделиться ?
 
Vladimir Pastushak #:
Есть пример, можете поделиться ?

Вот так находим коэффициенты K и B из уравнения прямой (y = kx + b):

double CalculateBAndKKoefs(const int nX1, const int nY1, const int nX2, const int nY2, double &fKKoef)
{
   if (nX1 == nX2)
      return DBL_MAX;
      
   fKKoef = (nY2 - nY1) / 1.0 / (nX2 - nX1);
   return nY1 - fKKoef * nX1;   
}

Здесь (nX1, nY1) и (nX2, nY2) - две любые точки на прямой. nX1 и nX2 - это индексы баров. То есть предварительно нужно время открытие баров привести к индексам баров на определенном ТФ. Заметьте, что точность будет зависеть от ТФ, на разных ТФ результаты будут немного отличаться.

После расчета значений K и B подставляете их в уравнение прямой вместе с индексом того бара, на котором нужно узнать цену.