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

 
Ihor Herasko #:

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

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

Совсем не в тему. 

 
Алексей Тарабанов #:

Совсем не в тему. 

Что же является темой? Ведь настройка "пунктов на бар" - это как раз то, что написано в его названии: взяли разницу максимальной и минимальной цен и разделили ее на количество баров, видимых в окне. Все. Никакого сакрального смысла в нем нет. То есть либо видим все бары в пределах графика (автомасштаб), либо видим бары как есть, но не всех их видим полностью и одновременно. Иного не дано.

 
Ihor Herasko #:

Что же является темой? Ведь настройка "пунктов на бар" - это как раз то, что написано в его названии: взяли разницу максимальной и минимальной цен и разделили ее на количество баров, видимых в окне. Все. Никакого сакрального смысла в нем нет. То есть либо видим все бары в пределах графика (автомасштаб), либо видим бары одинаковыми, но сами бары видим не полностью. Иного не дано.

Есть масштаб 1 пип : 1 бар. Означает, что интервал между пипсами (в пикселях) равен интервалу между барами. 

Ну и масштабировать можно. 

 
Andrei Iakovlev #:

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

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

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

Мне стыдно, что я не увидел вчера какое значение может принимать функция из документации

//+------------------------------------------------------------------+
//| Функция включает/выключает режим указания масштаба в пунктах на  |
//| бар.                                                             |
//+------------------------------------------------------------------+
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);
  }

То-есть это свойство графика только включает или выключает этот режим, но не задаёт размер…

Так-что все рассуждения о подсчётах какое значение поставить не имеют никакого смысла.

 
Алексей Тарабанов #:

то задаю вожделенное значение value

Ihor Herasko #:

Что же является темой?

Вопрос в том, как найти какое значение этого масштаба, которое надо поставить сюда

, чтобы на графике сохранились текущие значения макс. и мин. цен.

Смотрите гиф файл в 4-ом посте.


Nikolai Semko #:
Может нужно найти количество пунктов на пиксель? 

Конкретной зависимости между двумя этими величинами я не увидел.

 
Alexey Viktorov #:

Так-что все рассуждения о подсчётах какое значение поставить не имеют никакого смысла.

Если есть функция, которая включает этот режим, а на гиф файле видно окошко, в котором устанавливается этот масштаб, то можно предположить, что есть и функция, которая устанавливает его. Ссылку в своём посте я исправил.

Alexey Viktorov #:

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

Это я сделал.

   if(ChartGetInteger(0,CHART_SCALE_PT_PER_BAR) == 1)
   Print(DoubleToString(ChartGetDouble(0,CHART_PRICE_MAX),_Digits)," ",DoubleToString(ChartGetDouble(0,CHART_PRICE_MIN),_Digits)," ",
         DoubleToString((ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/_Point,0)," ",
         ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)," ",
         DoubleToString(ChartGetDouble(0,CHART_POINTS_PER_BAR),0)," ",
         DoubleToString((ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/_Point/ChartGetDouble(0,CHART_POINTS_PER_BAR),0));

Первые два числа: макс. и мин. цены графика, потом разница между ними в пунктах, потом высота графика в пикселях (окно в фокусе было USDMXN, поэтому эта высота  = 927), потом масштаб графика в пунктах на бар, выставленный (подобранный) вручную таким образом, чтобы внешний вид графика сохранялся, и отношение 3-го числа (разницы макс. и мин. цен в пунктах) к масштабу (предпоследнее число).

Результат:

Как видим, последнее число получается практически одинаковым. Что оно означает и как его получить (без подбора) я не знаю.

 
Andrei Iakovlev #:


Конкретной зависимости между двумя этими величинами я не увидел.

Если речь о вертикальном масштабе, то именно пиксели и пункты. Других параметров по вертикали просто не существует. :))

double dy = (price_max-price_min)/height; // плотность цены на один пиксель - обратно пропорционо масштабу высоты баров
      - Это речь о горизонтальном масштабе. Всего 6 масштабов (от 0  до 5) - 2 в степени масштаба: 1, 2, 4, 8, 16, 32 пикселей на бар(по горизонтали) соответственно


 
Nikolai Semko #:

Если речь о вертикальном масштабе, то именно пиксели и пункты. Других параметров по вертикали просто не существует.

Хорошо, других параметров нет, как с помощью них ответить на мой вопрос здесь https://www.mql5.com/ru/forum/442852/page2#comment_45382830 ?

 
Andrei Iakovlev #:

Хорошо, других параметров нет, как с помощью них ответить на мой вопрос здесь https://www.mql5.com/ru/forum/442852/page2#comment_45382830 ?

Это что-то в духе методов Ганна?

 
Yevhenii Levchenko #:

Это что-то в духе методов Ганна?

Не понимаю, о чём речь, и этот метод мне незнаком.