Errores, fallos, preguntas - página 743

 
Fia:

¡Hola, señores desarrolladores!

¿Podemos hacer cambios en el compilador de MQL5 para que al menos nos dé un aviso?

para errores de este tipo en el código.

if(Flag_Exitl=true) {break;}


La condición de comparación aquí no es correcta (debería ser == ), por eso siempre será break.

¿Cómo se puede abordar esta situación en el compilador (si es que es posible), de modo que pueda tener menos baches al escribir el código?

(He pensado que no va a funcionar, parece que hay que separar la asignación y la comparación en el if, por lo que se elimina la pregunta).

Puede hacerlo si la condición contiene una asignación booleana con una constante a la derecha.
Las variables de tipo bool no se pueden comparar con true/false, sino que se utilizan directamente (esencialmente es una bandera de sí/no)
if(Flag_Exitl) {break;}
Tu camino es mantecoso.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
notused:

Recibo regularmente el error 4401

ERR_HISTORY_NOT_FOUND

El siguiente código indicador

dará un error justo después del inicio (si no está en D1). O mejor dicho, una vez que inicias el terminal y abres el gráfico - para poner el indicador, te dará un error. Si el terminal no está cerrado, no se producirá este error al inicio.

Pero después de algún tiempo (un par de horas - 2 horas fueron suficientes para mí) veremos que obtendremos el error en el gráfico ya abierto. (Lo estaba ejecutando en m30)

Representantes, MetaQuotes, por favor comenten, ¿se supone que es así?
 
struct SDaylyRange {double min, max, open, close;};
struct SNoDaylyRange {
   uint x;
   double y;
 };

void OnStart()
  {
   SNoDaylyRange tmp;
   SDaylyRange tmp2 = tmp;
  }
Este código se compila sin una sola advertencia. Aunque probablemente ni siquiera debería compilar
 
notused:
..el error 4401 aparece regularmente.

referencia:

Organizar el acceso a los datos

Accesibilidad de los datos

La disponibilidad de los datos en formato HCC o incluso en formato HC listo para usar no siempre significa la disponibilidad incondicional de estos datos para su visualización en un gráfico o para su uso en programas mql5.

Al acceder a los datos de precios o a los valores de los indicadores desde los programas mql5, debemos recordar que no se garantiza que estén disponibles en un momento determinado, o desde un punto determinado. Esto tiene que ver con el hecho de que MetaTrader 5 no almacena la copia completa de los datos necesarios para el programa mql5, sino que da acceso directo a la base de datos del terminal para ahorrar recursos.

El historial de precios para todos los plazos se construye a partir de los datos comunes en formato HCC y cualquier actualización del servidor conlleva la actualización de los datos para todos los plazos y el recálculo del indicador. Por lo tanto, el acceso a los datos puede ser denegado incluso si los datos estaban disponibles hace un momento.

CopyRate

Al solicitar datos del indicador, si las series temporales solicitadas no han sido construidas o necesitan ser descargadas del servidor, la función devolverá -1 inmediatamente, pero se iniciará el proceso de descarga/construcción.
Parece que así es como debe ser. Antes de CopyRate SERIES_SYNCRONIZED puede comprobar...
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Swan:

hoja informativa:

Parece que debería ser así. Hasta el CopyRate SERIES_SYNCRONIZED se puede comprobar...

Sólo estoy llenando mi cabeza de cenizas, sí. Gracias.

Aunque es extraño ver la solicitud de dos bares y la historia no disponible, aunque sólo cero cambios de barras. De todos modos, si está descrito en la documentación, no es un error.

 

en mi IsNewBar salía un error.

En lugar de

CopyTime(sym, period, 0, 1, currentTime);

Debería haber escrito

   if (CopyTime(sym, period, 0, 1, currentTime) < 1) return (false);

Y me preguntaba por qué cada par de horas IsNewBar(PERIOD_D1) == true -> de ahí que me enterara de la inaccesibilidad del historial, pero no se me ocurría una función que escribí hace uno o dos años.

 
sergeev:

Por qué el indicador no puede manejar los tipos de color (COLOR_ARROW, etc.) con más de un búfer

ejemplo de código

Establecemos dos DRAW_COLOR_ARROW (buf1 y buf2) y para cada uno un buffer de color adicional (clr1, clr2)

Al mismo tiempo, aunque el segundo buffer buf2 obtiene barras High/Low, no aparece en el gráfico. Parece que el color de las flechas en este buffer = clrNONE. Es decir, la configuración del color en el buffer clr2 no funciona


aquí hay una captura de pantalla. sólo se ven los valores del buf1/clr1. los valores del segundo buffer no se muestran con color aunque se reciben los valores.


¿Dónde está el error?

La pregunta fue creada simplemente para responder "en el ADN de MQL5".

Estas tonterías también se dan en DRAW_FILLING e incluso en DRAW_HISTOGRAM2, que es relativamente normal (no es tan estable, por supuesto, pero se producen fallos).

Sólo por la inestabilidad de los bichos, concluyo que es poco probable que obtengas una respuesta sin un CD.

 

Bild 642 para Win32

Aparece algún problema con las matrices tridimensionales de doble si por error se sobrepasan los límites de la matriz al imprimir en la función Print

El script entra en un bucle infinito por sí mismo.

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

}
//-------------------------------------------------------
double f(double x){return(1/(1+MathExp(-x)));}
 
IgorM:

Bild 642 para Win32

algún problema con las matrices tridimensionales aparece doblemente si por error se sale de la matriz al imprimir en la función Print

En realidad, el rebasamiento se produce dos líneas antes

y estás llamando a un exponente de un elemento inexistente, muy probablemente cero.

Mira en el registro

 
sergeev:

Generalmente, el fuera de límites se produce dos líneas antes

y estás llamando a un exponente de un elemento inexistente, muy probablemente cero.

buscar en el registro

Sí, lo sé, y he citado un código que no provoca un error de ejecución, pero que hace un bucle en el script