Скачать MetaTrader 5

Ценовой интервал в одном пикселе чарта по-вертикали

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не понимаешь, как работает сервис Торговых Сигналов? Прочти соответствующую статью!
Vladimir Karputov
Модератор
45792
Vladimir Karputov 2016.10.28 14:28 
В эту тему были перенесены комментарии, не относящиеся к "Ошибки, баги, вопросы".
fxsaber
4487
fxsaber 2016.10.28 10:58  

Как узнать, какой ценовой интервал содержится в одном пикселе чарта по-вертикали?

И какой временной интервал содержится в одном пикселе чарта по-горизонтали?

Вопросы могут показаться элементарными, поскольку есть такие возможности

  • CHART_HEIGHT_IN_PIXELS
  • CHART_WIDTH_IN_PIXELS
  • CHART_PRICE_MAX
  • CHART_PRICE_MIN
  • CHART_WIDTH_IN_BARS
  • ChartPeriod
  • PeriodSeconds
Однако, например, напрашивающийся сразу ответ (CHART_PRICE_MAX - CHART_PRICE_MIN) / CHART_HEIGHT_IN_PIXELS не верный (и это логично).
Alexey Kozitsyn
6421
Alexey Kozitsyn 2016.10.28 11:14  
fxsaber:

Как узнать, какой ценовой интервал содержится в одном пикселе чарта по-вертикали?

И какой временной интервал содержится в одном пикселе чарта по-горизонтали?

Вопросы могут показаться элементарными, поскольку есть такие возможности

  • CHART_HEIGHT_IN_PIXELS
  • CHART_WIDTH_IN_PIXELS
  • CHART_PRICE_MAX
  • CHART_PRICE_MIN
  • CHART_WIDTH_IN_BARS
  • ChartPeriod
  • PeriodSeconds
Однако, например, напрашивающийся сразу ответ (CHART_PRICE_MAX - CHART_PRICE_MIN) / CHART_HEIGHT_IN_PIXELS не верный (и это логично).
А если попробовать преобразовать 0 пиксель в цену и последний пиксель в цену, получить разность, поделить на пункт и поделить на количество пикселей?
fxsaber
4487
fxsaber 2016.10.28 11:20  
Alexey Kozitsyn:
0 пиксель в цену и последний пиксель в цену
Это, соответственно, CHART_PRICE_MAX и CHART_PRICE_MIN.
Alexey Kozitsyn
6421
Alexey Kozitsyn 2016.10.28 11:25  
fxsaber:
Это, соответственно, CHART_PRICE_MAX и CHART_PRICE_MIN.

Предположим, хотя, я бы проверил.

А почему решение не верное? 

fxsaber
4487
fxsaber 2016.10.28 11:37  
Alexey Kozitsyn:

Предположим, хотя, я бы проверил.

А почему решение не верное? 

Допустим, нам известно, какой ценовой интервал содержится в каждом пикселе. Формула была бы верной, если бы CHART_PRICE_MAX был максимальной границей самого верхнего известного нам интервала, а CHART_PRICE_MIN - минимальной границей самого нижнего известного нам интервала. Но это не так.
Alexey Kozitsyn
6421
Alexey Kozitsyn 2016.10.28 11:42  
fxsaber:
Допустим, нам известно, какой ценовой интервал содержится в каждом пикселе. Формула была бы верной, если бы CHART_PRICE_MAX был максимальной границей самого верхнего известного нам интервала, а CHART_PRICE_MIN - минимальной границей самого нижнего известного нам интервала. Но это не так.
Думаю, если вертикальный масштаб будет фиксирован - все будет ок. А иначе частые проверки этого самого масштаба. Ведь цена его может сама изменить.
fxsaber
4487
fxsaber 2016.10.28 11:53  
Alexey Kozitsyn:
Думаю, если вертикальный масштаб будет фиксирован - все будет ок. А иначе частые проверки этого самого масштаба. Ведь цена его может сама изменить.

Фиксированность вертикального масштаба - это ручное задание того, что делается автоматом. Не более того.

Вопрос на самом деле довольно тонкий для обсуждения, т.к. в этой теме надо покопаться.

Возобновил написание тикового индикатора и сталкиваюсь вот с такими проблемами. Что-нибудь кривое, да выложу в кодобазу.

Sergei Vladimirov
8764
Sergei Vladimirov 2016.10.28 13:12  
fxsaber:

Как узнать, какой ценовой интервал содержится в одном пикселе чарта по-вертикали?

И какой временной интервал содержится в одном пикселе чарта по-горизонтали?

Вопросы могут показаться элементарными, поскольку есть такие возможности

  • CHART_HEIGHT_IN_PIXELS
  • CHART_WIDTH_IN_PIXELS
  • CHART_PRICE_MAX
  • CHART_PRICE_MIN
  • CHART_WIDTH_IN_BARS
  • ChartPeriod
  • PeriodSeconds
Однако, например, напрашивающийся сразу ответ (CHART_PRICE_MAX - CHART_PRICE_MIN) / CHART_HEIGHT_IN_PIXELS не верный (и это логично).

Преобразуйте CHART_PRICE_MAX и CHART_PRICE_MIN в пиксельные координаты с помощью ChartTimePriceToXY().

fxsaber
4487
fxsaber 2016.10.28 14:27  
Sergei Vladimirov:

Преобразуйте CHART_PRICE_MAX и CHART_PRICE_MIN в пиксельные координаты с помощью ChartTimePriceToXY().

Так?
datetime GetVisibleTime( const long Chart_ID = 0 )
{
  datetime TmpTime;
  double TmpPrice;
  int TmpSubWindow;

  ChartXYToTimePrice(Chart_ID, 0, 0, TmpSubWindow, TmpTime, TmpPrice); // находим корректные координаты для ChartTimePriceToXY

  return(TmpTime);
}

int ChartPriceToY( const double Price )
{
  int X, Y;
  
  ChartTimePriceToXY(0, 0, GetVisibleTime(), Price, X, Y);
  
  return(Y);
}

double PricesPerPixel( void )
{
  return((double)(ChartPriceToY(ChartGetDouble(0, CHART_PRICE_MAX)) - ChartPriceToY(ChartGetDouble(0, CHART_PRICE_MIN))) /
         ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));
}
Sergei Vladimirov
8764
Sergei Vladimirov 2016.10.28 14:43  

fxsaber: 


Так?

Нет.

double PricesPerPixel( void )
{
        double fMaxPrice = ChartGetDouble(0, CHART_PRICE_MAX);
        double fMinPrice = ChartGetDouble(0, CHART_PRICE_MIN);
        
        return((fMaxPrice - fMinPrice) / (ChartPriceToY(fMinPrice) - ChartPriceToY(fMaxPrice)));
}

И вместо GetVisibleTime() можно просто 0 подставить. Координата Х ведь в данном случае не имеет значения.
 

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий