Вертикальный масштаб в пунктах на бар

 

Хочу изменять вертикальный масштаб графика, увеличивая или уменьшая кол-во пунктов на бар. Как считать эти пункты?

Например, на графике EURUSD CHART_PRICE_MAX = 1.07, CHART_PRICE_MIN = 1.05. Как посчитать кол-во пунктов на бар в этом случае?

 
Andrei Iakovlev:

Хочу изменять вертикальный масштаб графика, увеличивая или уменьшая кол-во пунктов на бар. Как считать эти пункты?

Например, на графике EURUSD CHART_PRICE_MAX = 1.07, CHART_PRICE_MIN = 1.05. Как посчитать кол-во пунктов на бар в этом случае?

Если "старых" пунктов, то 200 разделить на количество баров. Если "новых" пунктов, то 2000.

Только непонятно, что даст такой расчет: "пунктов на бар".

 
Ihor Herasko #:

Если "старых" пунктов, то 200 разделить на количество баров. Если "новых" пунктов, то 2000.

Только непонятно, что даст такой расчет: "пунктов на бар".

Он говорит о вертикальном масштабе путая с горизонтальным.

 
Alexey Viktorov #:

Он говорит о вертикальном масштабе путая с горизонтальным.

Нет, с горизонтальным масштабом я не путаю, нужно изменять вертикальный масштаб графика.

 
Ihor Herasko #:

Только непонятно, что даст такой расчет: "пунктов на бар".

Вертикальный масштаб не должен зависеть от кол-ва баров.

Ihor Herasko #:

Только непонятно, что даст такой расчет: "пунктов на бар".

Это нужно для того, чтобы устанавливать такое начальное значение масштаба в пунктах на бар (https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_points_per_bar), чтобы график не "улетал".

Пример (нажмите на изображение, это гиф):

 
Andrei Iakovlev #:

Вертикальный масштаб не должен зависеть от кол-ва баров.

Это нужно для того, чтобы устанавливать такое начальное значение масштаба в пунктах на бар (https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_scale_pt_per_bar), чтобы график не "улетал".

Пример (нажмите на изображение, это гиф):

Тогда просто посмотрите мой код индикатора.

Sets Chart Scale
Sets Chart Scale
  • www.mql5.com
Индикатор устанавливает окну графика свойство "Фиксированный масштаб" и удерживает первый бар в середине окна.
 
Alexey Viktorov #:

Тогда просто посмотрите мой код индикатора.

Не вижу в коде этого индикатора ничего, что бы ответило на мой вопрос: как соотносятся между собой макс. и мин. цены графика и кол-во пунктов на бар?

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

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_points_per_bar

 
Andrei Iakovlev #:

Не вижу в коде этого индикатора ничего, что бы ответило на мой вопрос: как соотносятся между собой макс. и мин. цены графика и кол-во пунктов на бар?

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

(https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_scale_pt_per_bar)

Может я не понял для чего это нужно, но мне кажется, что левое ухо почесать мизинцем левой руки проще, чем мизинцем правой ноги.

Просто если идти так «влобовую» то конечно можно как-то посчитать отталкиваясь от чего, с каким коэффициентом задать этот масштаб. А можно просто задать максимум и минимум окна…

Попробуйте подойти к этому задом на перёд. При разных вариантах прочтите это значение, и значения максимума\минимума окна и как-то обсчитать полученные результаты. Может и выйдет чего-то…

 
Andrei Iakovlev #:

Не вижу в коде этого индикатора ничего, что бы ответило на мой вопрос: как соотносятся между собой макс. и мин. цены графика и кол-во пунктов на бар?

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

(https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_scale_pt_per_bar)

Для начала, изучим матчасть: 

Настройки графиков
  • Масштаб — с помощью рычажка можно регулировать масштаб графика, при этом одновременно будет изменяться масштаб графика в окне предпросмотра, расположенного в левой части окна свойств.
  • Фиксировать масштаб 1:1 — зафиксировать масштаб графика "один к одному" (размер одного пипса вертикальной оси в пикселях равен расстоянию между осями баров в пикселях). При этом автоматически включается опция "Фиксировать масштаб" и у правой стороны окна графика появляется бегунок полосы прокрутки, позволяющий перемещать график по вертикали. Этот режим необходим для точных геометрических построений.
  • Фиксировать масштаб — зафиксировать масштаб графика по вертикали. При этом поля "Фиксированный максимум" и "Фиксированный минимум" становятся активными, в них указываются максимальное и минимальное значения ценовой шкалы, соответственно.
  • Масштаб по пунктам на бар — зафиксировать масштаб графика по соотношению количества пунктов на вертикальной оси к одному бару. При этом поле "Пунктов на бар" становится активным, в нем укажите их количество.

В сухом остатке: масштаб 1 :1 - пипс по вертикали равен в пикселях бару по горизонтали. 

И ещё: пипсы - ось ординат, бары - абсцисс; пиксели - разрешающая способность терминала. 

Теперь по сути вопроса. 

Если меня не устраивает масштаб 1:1, а очень хочется pips:1, то задаю вожделенное значение value и использую функцию: 

//+------------------------------------------------------------------+
//| Функция включает/выключает режим указания масштаба в пунктах на  |
//| бар.                                                             |
//+------------------------------------------------------------------+
bool ChartScalePerBarSet(const bool value,const long chart_ID=0)
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- установим значение свойства
   if(!ChartSetInteger(chart_ID,CHART_SCALE_PT_PER_BAR,0,value))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }

ЗЫ: Не забываем, что такое масштаб, иначе можно нарваться на неприятности. 


 
Andrei Iakovlev:

Хочу изменять вертикальный масштаб графика, увеличивая или уменьшая кол-во пунктов на бар. Как считать эти пункты?

Например, на графике EURUSD CHART_PRICE_MAX = 1.07, CHART_PRICE_MIN = 1.05. Как посчитать кол-во пунктов на бар в этом случае?

Не смог понять вопрос. Наверное я дурак.
Бары же все разные по вертикали. 
Может нужно найти количество пунктов на пиксель? Но тогда такой вопрос из разряда: 100 карандашей стоят 1000 рублей. Сколько стоит один ✏️?


 
Andrei Iakovlev #:

Вертикальный масштаб не должен зависеть от кол-ва баров.

Это нужно для того, чтобы устанавливать такое начальное значение масштаба в пунктах на бар (https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_scale_pt_per_bar), чтобы график не "улетал".

Пример (нажмите на изображение, это гиф):

А, ну раз речь о настройке свойства графика "пунктов на бар", то рассчитывается все именно так, как говорит @Alexey Viktorov. То есть находится минимальная и максимальная цена среди баров, находящихся в пределах графика, и оттуда уже получается вот это значение - "пунктов на бар". Но какой смысл от таких вычислений, если терминал точно также поступает при автомасштабе? Смысл от "пунктов на бар" может быть как раз в том случае, если требуется видеть все бары в истории с одинаковым масштабом. Логично, что в таком случае какие-то бары будут выходить за пределы графика и потребуется перемещение ползунка окна, регулирующего положение графика по вертикали.

На мой взгляд, максимум, что можно сделать это взять для расчетов не только видимые бары, а вообще все имеющиеся бары в истории, посчитав максимум и минимум для них. Исходя из этих значений и установить масштаб. Правда, график все равно будет неудобочитаемым. На нем будут видны наиболее волатильные бары, а большинство баров отобразятся в виде линий.

Причина обращения: