Ошибки, баги, вопросы - страница 951

 
w1sp:
Можно ли в MQL5 написать функцию с переменным числом параметров? Например, как в StringConcatenate(...) или Print(...)?
Да, можно, называется Перегрузка функций.
 
w1sp:
Можно ли в MQL5 написать функцию с переменным числом параметров? Например, как в StringConcatenate(...) или Print(...)?

Например можно параметром сделать массив размер которого будет равен количеству ваших параметров.

 
Интересует именно переменное число параметров как в StringConcatenate. Вроде такого: string Concatenate(string s, ...); Возможно такое?
 
w1sp:
Интересует именно переменное число параметров как в StringConcatenate. Вроде такого: string Concatenate(string s, ...); Возможно такое?

Похожее возможно. До 64 параметров можно передать в функцию.

void OnStart()
  {
string s1=Foo("5");
string s2=Foo("5","t");

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
} 
 
Snaf:

Похожее возможно. До 64 параметров можно передать в функцию.

А произвольных типов для всех аргументов добиться можно только перегрузкой? То есть чтобы в функцию можно было передать не только string, но и double, например. string s = Concatenate("abc",2.0,"def"); 

 
w1sp:

А произвольных типов для всех аргументов добиться можно только перегрузкой? То есть чтобы в функцию можно было передать не только string, но и double, например. string s = Concatenate("abc",2.0,"def"); 

void OnStart()
  {
//string s1=Foo("5");  // Это теперь ошибка. Компилятор не знаек какой функцией из двух пользоваться
string s2=Foo("5",3.0);

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
}

string Foo(string i0="", double i1=2.0, string i2="")
{
string rez;
if (i1>2.0) {rez=i0+i2;} else rez=i0+"99"+i2;

return rez;
}  
 
Snaf:
Спасибо. Разобрался. Достаточно сделать функцию с 64 аргументами типа string и всем кроме первого добавить значение по умолчанию.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Здравствуйте. После обновления билда MT5, индикатор перестал нормально отображаться в тестере, в самом терминале отображается нормально. Индикатор довольно сложный и ресурсоемкий (ZUP), перевожу его с MT4 на MT5. В тестере Билд 756 линия ЗигЗаг отображется нормально, в тестерах после Билда 770 - значения цены ЗигЗага верные, а таймфреймы не корректные (сдвинуты, причем не равномерно) ZigZag -выходной буффер. При этом графические объекты (треугольники, линии и тп, которые кстати строятся на основании данных выходных буфферов (в том числе и ZigZag)) отображаются нормально. Помогите, пожалуйста разобраться.
 

В индикаторе, при переключении ТФ, статические переменные инициализируются.

Так и должно быть?

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
static bool flag=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(flag);
   flag=false;
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
Swan:

В индикаторе, при переключении ТФ, статические переменные инициализируются.

Так и должно быть?

Да, так как согласно разделу Выполнение программ индикаторы при смене символа / таймфрейма всегда создаются заново:

Загрузка и выгрузка индикаторов

Индикаторы загружаются в следующих случаях:

  • прикрепление индикатора к графику;
  • запуск терминала (если индикатор был прикреплен к графику перед предыдущим закрытием терминала);
  • загрузка шаблона (если в шаблоне указан прикрепленный к графику индикатор);
  • смена профиля (если индикатор прикреплен к одному из графиков профиля);
  • смена символа и/или периода графика, к которому прикреплен индикатор;
  • после удачной перекомпиляции индикатора, если данный индикатор был прикреплен к графику.
  • изменение входных параметров индикатора.