В чем ошибка при передаче параметра в функцию?

 
Есть вот такая часть кода:
bool CalculateSupportValues (int rates_total, double low, int prev_calculated){

   // инициализация индикаторного буферы пустым значением.
   if(prev_calculated == 0) ArrayInitialize(SupportLineBuffer, EMPTY_VALUE);
  
   //--- блок расчета значений индикатора
   for(int i = 0; i < rates_total; i++)
     {
      if(i >= rates_total - 26){
         SupportLineBuffer[i] = low[i];
        }
     }
                               
   return true;           
}


//+------------------------------------------------------------------+
//| 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);
 
//--- вернем значение prev_calculated для следующего вызова функции
   return(rates_total);
  }
При его запуске получаю вот такие 2 ошибки:

'low' - parameter conversion not allowed        My_Trends_Indicator.mq5 66      40
'i' - some operator expected    My_Trends_Indicator.mq5 28      37
2 errors, 0 warnings            3       1
Вопрос:
В чем состоит ошибка(насколько я понимаю - дело в параметре "low") и как ее исправить?
 
Mike Kharkov:
Есть вот такая часть кода:
При его запуске получаю вот такие 2 ошибки:

Вопрос:
В чем состоит ошибка(насколько я понимаю - дело в параметре "low") и как ее исправить?

low это массив. Посмотрите как этот параметр определён в OnCalculate.
В параметре пользовательской функции, определите так же, массив по ссылке.

 
Roman:

low это массив. Посмотрите как этот параметр определён в OnCalculate.
В параметре пользовательской функции, определите так же, массив по ссылке.

Если я передаю параметр массива следующим образом:
Я все равно получаю ошибку но уже другую.
Можите написать пример корректной реализации?

Ошибки

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

.

 
Dmitry Fedoseev:

.

Изменил код - ошибки остались - правда на других строчках:
(но суть их та же самая)


 
Mike Kharkov:
Изменил код - ошибки остались - правда на других строчках:


В первую очередь важно не повторить, а понять. 

 
Dmitry Fedoseev:

В первую очередь важно не повторить, а понять. 

для того что бы понять надо увидеть работающий пример.
в доке его нет.
+ я попросил именно работающее решение - вы его скинули - но оно не работающее. )
(каким образом из неработающего решения можно понять как делать правильно?
если этот язык для тебя новый)

P. S. Вопрос решил - при вызове функции не надо массив передавать - а надо было сделать как у меня было вначале + далее уже ваша реализация при построении функции необходима.
Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Roman:

low это массив. Посмотрите как этот параметр определён в OnCalculate.
В параметре пользовательской функции, определите так же, массив по ссылке.

Все массивы всегда по ссылке. Иначе не бывает. 

 
Mike Kharkov:
Есть вот такая часть кода:
При его запуске получаю вот такие 2 ошибки:

Вопрос:
В чем состоит ошибка(насколько я понимаю - дело в параметре "low") и как ее исправить?

Его нельзя менять. Ни прямо, ни косвенно. 

 
Когда вызываешь функцию, то не надо квадратные скобки писать, писать просто low.
Причина обращения: