Errores, fallos, preguntas - página 951

 
¿Es posible escribir una función con un número variable de parámetros en MQL5? Por ejemplo, como en StringConcatenate(...) o Print(...)?
 
skteks:

He probado el Asesor Experto ExpertMACD estándar en el probador de estrategias, que se entrega junto con MT5, genera errores:

2013.03.30 19:18:09 Core 2 genetic pass (0, 15) probado con error "OnInit failed" en 46 ms

2013.03.30 19:18:08 Core 1 genetic pass (0, 13) probado con error "OnInit failed" en 32 ms

2013.03.30 19:18:07 Core 2 genetic pass (0, 5) probado con error "OnInit failed" en 0 ms

Buscando he descubierto que el error está en el módulo: "SignalMACD" al optimizar los periodos MACD Rápido y Lento (al marcar las casillas en los parámetros del probador de estrategias).

¿Alguien se ha encontrado con este problema y cómo solucionarlo? (cuando sólo hay un tic funciona de alguna manera, pero hay errores en cuanto se comprueban dos tic)

Establezca un rango diferente de cambios Lento y Rápido. El error desaparecerá. Puedes ignorarlo.

 
w1sp:
¿Es posible escribir una función con un número variable de parámetros en MQL5? ¿Por ejemplo, como en StringConcatenate(...) o Print(...)?
Sí, se puede, se llama sobrecarga de funciones.
 
w1sp:
¿Es posible escribir en MQL5 una función con un número variable de parámetros? Por ejemplo, como en StringConcatenate(...) o Print(...)?

Por ejemplo, puedes hacer un array cuyo tamaño será igual al número de tus parámetros como parámetro.

 
Me interesa un número variable de parámetros como en StringConcatenate. Así: string Concatenate(string s, ...); ¿Es esto posible?
 
w1sp:
Estoy interesado en un número variable de parámetros como en StringConcatenate. Algo así: string Concatenate(string s, ...); ¿Es posible?

Lo mismo es posible. Se pueden pasar hasta 64 parámetros a una función.

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:

Lo mismo es posible. Se pueden pasar hasta 64 parámetros a una función.

¿Y podemos obtener tipos arbitrarios para todos los argumentos sólo por sobrecarga? Es decir, no sólo se puede pasar una cadena, sino también un doble a una función, por ejemplo. cadena s = Concatenate("abc",2.0, "def");

 
w1sp:

¿Y los tipos arbitrarios para todos los argumentos sólo pueden lograrse mediante la sobrecarga? Es decir, no sólo se puede pasar a la función una cadena, sino también un doble, por ejemplo. cadena 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:
Gracias. Me lo imaginé. Basta con hacer una función con 64 argumentos de tipo cadena y añadir un valor por defecto a todos excepto al primero.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Hola. Después de actualizar la build de MT5, el indicador ya no se muestra con normalidad en el probador, en el propio terminal se muestra con normalidad. El indicador es bastante complejo y requiere muchos recursos (ZUP), lo traduzco de MT4 a MT5. En el probador, Bild 756 línea ZigZag se muestra normalmente, en el probador después de Bild 770 - ZigZag valores de los precios son correctos, pero el marco de tiempo no es correcto (desplazado, no uniformemente) ZigZag - búfer de salida. Al mismo tiempo, los objetos gráficos (triángulos, líneas, etc., que por cierto se basan en los datos de las memorias intermedias de salida (ZigZag también)) se muestran normalmente. Por favor, ayúdenme a entender esto.