ChartXYToTimePrice расчёт времени

 
В эту тему были перенесены комментарии, не относящиеся к "Ошибки, баги, вопросы".
 

В некоторых случаях (один/два пикселя сторону) ChartXYToTimePrice ошибается. Советник для подтверждения

#property strict

void OnInit( void )
{
  ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, TRUE);
  
  return;
}

void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam )
{
  if (id == CHARTEVENT_MOUSE_MOVE)
  {
    datetime time;
    double price;
    int SubWindow;

    ChartXYToTimePrice(0, (int)lparam, (int)dparam, SubWindow, time, price);
    
    Comment(time);
  }

  return;
}

 Результат

 

Видно, что окно CTRL+D выдает одно значение под курсором, советник - другое. Актуально в обеих платформах.

 
comp:

В некоторых случаях (один/два пикселя сторону) ChartXYToTimePrice ошибается. Советник для подтверждения

 Результат

 

Видно, что окно CTRL+D выдает одно значение под курсором, советник - другое. Актуально в обеих платформах.

В окне данных "Time" - это время открытия бара над которым сейчас мышка. А время определяемое через ChartXYToTimePrice высчитывается для каждого пикселя над которым проходит мышка. Ошибки нет.
 

Почему этот URL ничего не выдает?

https://www.mql5.com/ru/search#!keyword=chartxytotimeprice 

 
Karputov Vladimir:
В окне данных "Time" - это время открытия бара над которым сейчас мышка. А время определяемое через ChartXYToTimePrice высчитывается для каждого пикселя над которым проходит мышка. Ошибки нет.

Сами себе противоречите. Из справки

 Значение времени на графике, для которого будет получено значение в пикселах на оси X.

В MT5 выдается с точностью до секунд. Но это не повод, чтобы минуты различались (на M1 запущено). Тем более, в MT4, где выдается с точностью до минуты.

 

Перекрестие в "зоне влияния" бара 16-20

Перекрестие в "зоне влияния" бара 16-20 

и Перекрестие в "зоне влияния" бара 16-25

Перекрестие в "зоне влияния" бара 16-25 

 
Karputov Vladimir:

Для M5 так и должно быть. А вот для M1 - нет. Попробуйте M1.


 
comp:

Для M5 так и должно быть. А вот для M1 - нет. Попробуйте M1.


Отображение правильное: перекрестие находится в "зоне влияния" бара 16:20 - поэтому в "Окне данных" Вы видите 16:20, в тоже время функция ChartXYToTimePrice рассчитывает точное время для пикселя над которым находится курсор в данное время - и это время равно 16:19:37.

А вот когда курсор будет находится точно посередине бара (по шкале время) функция ChartXYToTimePrice вернёт время 16:20:00.

 
Karputov Vladimir:

Отображение правильное: перекрестие находится в "зоне влияния" бара 16:20 - поэтому в "Окне данных" Вы видите 16:20, в тоже время функция ChartXYToTimePrice рассчитывает точное время для пикселя над которым находится курсор в данное время - и это время равно 16:19:37.

А вот когда курсор будет находится точно посередине бара (по шкале время) функция ChartXYToTimePrice вернёт время 16:20:00.

Ну ерунду же говорите. Если курсор находится над 16:19:37, то это автоматически обозначает, что он находится и над баром, который отвечате за интервал 16:19:00 - 16:19:59. Т.е над баром 16:19.
 
comp:
Ну ерунду же говорите. Если курсор находится над 16:19:37, то это автоматически обозначает, что он находится и над баром, который отвечате за интервал 16:19:00 - 16:19:59. Т.е над баром 16:19.
Нет. Не ерунду. Время 16:19:37 на 14 секунд ближе к 16:20:00. Курсор-то на самом деле между барами находится. Таким же способом точки у трендовых линий примагничиваются
 
Slawa:
Нет. Не ерунду. Время 16:19:37 на 14 секунд ближе к 16:20:00. Курсор-то на самом деле между барами находится. Таким же способом точки у трендовых линий примагничиваются
Ширина каждого бара (в пикселях) является степенью двойки. Разве между ними есть промежутки?
Причина обращения: