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

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

В тестере стратегий тестировал cтандартный эксперт  ExpertMACD, поставляемый вместе с МТ5, выдает ошибки:

2013.03.30 19:18:09    Core 2    genetic pass (0, 15) tested with error "OnInit failed" in 46 ms

2013.03.30 19:18:08    Core 1    genetic pass (0, 13) tested with error "OnInit failed" in 32 ms

2013.03.30 19:18:07    Core 2    genetic pass (0, 5) tested with error "OnInit failed" in 0 ms

методом подбора выяснил, что ошибка в модуле: "SignalMACD" при оптимизации Fast и Slow периодов MACD (когда ставишь галочки в параметрах тестера стратегий).

Кто-то сталкивался с такой проблемой и как с ней бороться? (когда только одна галочка - еще как-то работает, а как только ставишь две - сразу ошибки)

Задайте разный диапазон изменения Slow и Fast. Ошибка пропадет. Можно просто игнорировать. 

 
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)) отображаются нормально. Помогите, пожалуйста разобраться.
Причина обращения: