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

 
Есть такой пример в доке(mql5) для нахождения максимальной цены на чарте:

//+------------------------------------------------------------------+
   //| Функция получает значение максимума графика в главном окне или   |
   //| подокне.                                                         |
   //+------------------------------------------------------------------+
   double ChartPriceMax(const long chart_ID=0,const int sub_window=0)
     {
   //--- подготовим переменную для получения результата
      double result=EMPTY_VALUE;
   //--- сбросим значение ошибки
      ResetLastError();
   //--- получим значение свойства
      if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__+", Error Code = ",GetLastError());
        }
   //--- вернем значение свойства графика
      return(result);
   }
   
   ChartPriceMax(); // это 37-я строка в моем файле.

После внедрения данного кода я получаю следующую ошибку:
'ChartPriceMax' - unexpected token, probably type is missing?   My_Trends_Indicator.mq5 37      4
Вопрос:
В чем в данном случае ошибка?(что только уже не пробовал в плане типов и объявлений внедрять при вызове функции)
Как корректно запустить все это дело, что бы все функционировало?
 
Mike Kharkov:
Есть такой пример в доке(mql5) для нахождения максимальной цены на чарте:


После внедрения данного кода я получаю следующую ошибку:
Вопрос:
В чем в данном случае ошибка?(что только уже не пробовал в плане типов и объявлений внедрять при вызове функции)
Как корректно запустить все это дело, что бы все функционировало?
задать параметры функции
ChartPriceMax(0,0);

а вот это

double ChartPriceMax(const long chart_ID=0,const int sub_window=0)

поменять на это

double ChartPriceMax(const long chart_ID,const int sub_window)
 
Renat Akhtyamov:
задать параметры функции
Это я уже делал - получаю еще больше ошибок:

 
Renat Akhtyamov:
задать параметры функции

а вот это

поменять на это

тоже самое:

 
Mike Kharkov:
тоже самое:

функцию надо разместить вне кода (обычно в самом низу)

а её вызов внутри

 
Renat Akhtyamov:

функцию надо разместить вне кода (обычно в самом низу)

а её вызов внутри

А зачем это делать если вкратце?
Какая разница внизу она или в начале или в середине?

#include <Arrays\ArrayDouble.mqh>

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

//--- свойства линии заданы с помощью директив компилятора
#property indicator_label1  "Line"      // название построения для "Окна данных"
#property indicator_type1   DRAW_SECTION  // тип графического построения - линия
#property indicator_color1  clrWhiteSmoke      // цвет линии
#property indicator_style1  STYLE_SOLID // стиль линии
#property indicator_width1  1           // толщина линии

//--- индикаторный буфер для построения 
double SupportLineBuffer[];

bool CalculateSupportValues (int rates_total, const double &low[], int prev_calculated, const datetime &time[]){

   double arrayX[];
   ArrayResize(arrayX, 26, 0);
   ArrayInitialize(arrayX,EMPTY_VALUE);
   
   
   double arrayY[];
   ArrayResize(arrayY,26,0);
   ArrayInitialize(arrayY,EMPTY_VALUE);
   int innerIter = 0;
      

   // инициализация индикаторного буферы пустым значением.
   if(prev_calculated == 0) ArrayInitialize(SupportLineBuffer, EMPTY_VALUE);
  
   //--- блок расчета значений индикатора и внесение данных о координатах в пикселях
   for(int i = 0; i < rates_total; i++)
     {
      if(i >= rates_total - 26){
      
         int x;
         int y;
         ChartTimePriceToXY(0, 0, time[i], low[i], x, y);
         
         arrayX[innerIter] = x;
         arrayY[innerIter] = low[i];
         
         SupportLineBuffer[i] = low[i];
         
         innerIter++;
        }
     }
     
     //Print("WidthX = ", ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0),"px",", HeightY = ", ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0),"px ");
     
     
     //ArrayPrint(arrayX);
     //ArrayPrint(arrayY);
     
     ChartPriceMax(0,0);
     
                               
   return true;           
 }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
//--- связывание массива и индикаторного буфера
   SetIndexBuffer(0,SupportLineBuffer,INDICATOR_DATA);
   return(INIT_SUCCEEDED);
  }
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   
  CalculateSupportValues (rates_total, low, prev_calculated, time);

   

 
//--- вернем значение prev_calculated для следующего вызова функции
   return(rates_total);
  }
  
  
  
    //+------------------------------------------------------------------+
   //| Функция получает значение максимума графика в главном окне или   |
   //| подокне.                                                         |
   //+------------------------------------------------------------------+
   double ChartPriceMax(const long chart_ID,const int sub_window)
     {
   //--- подготовим переменную для получения результата
      double result=EMPTY_VALUE;
   //--- сбросим значение ошибки
      ResetLastError();
   //--- получим значение свойства
      if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__+", Error Code = ",GetLastError());
        }
   //--- вернем значение свойства графика
      return(result);
   }

Сделал так как вы говорите - вот весь код - ошибок больше нет - но принт(с максимальным значением) внутри функции не работает.
В чем причина?

 
Mike Kharkov:
А зачем это делать если вкратце?
Какая разница внизу она или в начале или в середине?


Сделал так как вы говорите - вот весь код - ошибок больше нет - но принт(с максимальным значением) внутри функции не работает.
В чем причина?

в упор не вижу принта, кроме того, что печатает сообщение про ошибку
 
Renat Akhtyamov:
в упор не вижу принта, кроме того, что печатает сообщение про ошибку
а вот это:
//--- вернем значение свойства графика
      return(result);
в общем каким оразом вытащить максимальное значение хочу понять - из примера в доке совершенно не понятно.
 
Mike Kharkov:
а вот это:
в общем каким оразом вытащить максимальное значение хочу понять - из примера в доке совершенно не понятно.

ну например так

    //+------------------------------------------------------------------+
   //| Функция получает значение максимума графика в главном окне или   |
   //| подокне.                                                         |
   //+------------------------------------------------------------------+
   double ChartPriceMax(const long chart_ID,const int sub_window)
     {
   //--- подготовим переменную для получения результата
      double result=EMPTY_VALUE;
   //--- сбросим значение ошибки
      ResetLastError();
   //--- получим значение свойства
      if(!ChartGetDouble(chart_ID,CHART_PRICE_MAX,sub_window,result))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         __FUNCTION__+", Error Code = ",GetLastError());
        }
   //--- вернем значение свойства графика
      Print(result);

      return(result);
   }

или так

Print(ChartPriceMax(0,0));

или графический объект на экран

и еще масса вариантов

 
Renat Akhtyamov:

ну например так

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

P.S. После обновления вашего ответа понял - нужно еще вызов функции в принт завернуть.
 
Mike Kharkov:
а чем это от моей версии отличается - которая не выводит в принте максимального значения?

P.S. После обновления вашего ответа понял - нужно еще вызов функции в принт завернуть.

не еще, а для того чтобы увидеть

либо присвоить значение функции переменной и делать с ней все что угодно

например

double calcMaxPrice = ChartPriceMax(0,0);
Print(calcMaxPrice);