ChartSetDouble вертикальный масштаб, где ошибка?

 
Понадобилось поменять вертикальный масштаб но что-то не получается. Пробую так:
ChartSetDouble(0,CHART_FIXED_MAX,5000.0);

но после проверки (Print) вижу что не чего не поменялось. Как изменить вертикальный масштаб?

Часть кода и проверка:

      double getVerticalScale=0.0;
      ChartGetDouble(0,CHART_PRICE_MAX,1,getVerticalScale);
      if(getVerticalScale>corRegLine[0]/_Point)
         //ChartSetDouble(0,CHART_FIXED_MAX,corRegLine[0]/_Point);
         ChartSetDouble(0,CHART_FIXED_MAX,5000.0);
         
         double getVerticalScale1=0.0;
         ChartGetDouble(0,CHART_PRICE_MAX,1,getVerticalScale1); // check
         
      Print("+ + + + + + + + + + + +  getVerticalScale: ",getVerticalScale," getVerticalScale1: ",getVerticalScale1,
      " corRegLine[0]: ",corRegLine[0]/_Point); 


 

Сначала надо установить режим

 
Alexey Viktorov:

Сначала надо установить режим

Добавил установку режима, изменилось главное  окно но не sub_window=1. Смотрел примеры в документаций но там как всегда нечего внятного не нашёл.

   double getVerticalScale=0.0;
   ChartGetDouble(0,CHART_PRICE_MAX,1,getVerticalScale);

   ChartSetInteger(0,CHART_SCALEFIX,1,true);

   if(getVerticalScale>corRegLine[0]/_Point)
      //ChartSetDouble(0,CHART_FIXED_MAX,corRegLine[0]/_Point);
      ChartSetDouble(0,CHART_FIXED_MAX,5000.0);

   double getVerticalScale1=0.0;
   ChartGetDouble(0,CHART_PRICE_MAX,1,getVerticalScale1); // check

Print:

EURUSD,M5: + + + + + + + + + + + +  getVerticalScale: 6184.49985 getVerticalScale1: 6184.49985 corRegLine[0]: 2504.485584330513
 

А зачем для работы с окном индикатора использовать свойства главного окна графика? Для этого есть CHART_HEIGHT_IN_PIXELS

Читайте наконец-то документацию…

 
Alexey Viktorov:

А зачем для работы с окном индикатора использовать свойства главного окна графика? Для этого есть CHART_HEIGHT_IN_PIXELS

Читайте наконец-то документацию…

Причём здесь пикселя??? Это не как не исправит проблему вертикального масштаба индикаторного окна!!!
Документацию читайте Вы программист, это только программисту постижимо! А я по форуму пообщаюсь, примеров поищу! Может уже пора принять что документация не для всех написано?


 
Nauris Zukas:

Добавил установку режима, изменилось главное  окно но не sub_window=1. Смотрел примеры в документаций но там как всегда нечего внятного не нашёл.

Print:

Для окна индикатора нельзя использовать функции ChartSet и ChartGet. Ведь они для чарта. Чтобы установить масштаб подокна используются директивы препроцессора:

#property indicator_minimum -1.0
#property indicator_maximum 1.0

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

   IndicatorSetDouble(INDICATOR_MINIMUM, -1.0);
   IndicatorSetDouble(INDICATOR_MAXIMUM, 1.0);
 
Ihor Herasko:

Для окна индикатора нельзя использовать функции ChartSet и ChartGet. Ведь они для чарта. Чтобы установить масштаб подокна используются директивы препроцессора:

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

CHART_HEIGHT_IN_PIXELS

Высота графика в пикселях

int      модификатор - номер подокна


Судя по документации, можно…

 
Alexey Viktorov:

CHART_HEIGHT_IN_PIXELS

Высота графика в пикселях

int      модификатор - номер подокна


Судя по документации, можно…

Получить можно, установить нельзя.

 
Ihor Herasko:

Получить можно, установить нельзя.

Я проверил, ставит. Только после этого высота окна даже руками не меняется. В чём причина мне лениво искать.

Из документации

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

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

Большое спасибо всё чудесно работает. Не знаю почему вертикальный масштаб всегда изменялся если 0 бар был виден  на графике, но сейчас с IndicatorSetDouble(INDICATOR_MAXIMUM, 1.0) решил проблему. :)

   if(getVerticalScale+corRegLine[0]/_Point*0.2!=corRegLine[0]/_Point)
   IndicatorSetDouble(INDICATOR_MAXIMUM, corRegLine[0]/_Point+corRegLine[0]/_Point*0.2);
 
Alexey Viktorov:

Я проверил, ставит. Только после этого высота окна даже руками не меняется. В чём причина мне лениво искать.

Из документации

Речь шла про CHART_PRICE_MAX и CHART_PRICE_MIN. А они, как в справке указано, r/o (только для чтения). О высоте графика в пикселах речь не шла.

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