Errores, fallos, preguntas - página 1492

 
Maxim Khrolenko:
Y global (no externo) no es, y eso no es bueno.

¿Por qué no es bueno? Se dice explícitamente que las variables globales se inicializan una vez al inicio del programa.

Si quieres un comportamiento diferente, inicializa como quieras en OnInit

 
Yuri Evseenkov:
Sería bueno reflejar esto en la documentación.
Sí. Lo haremos.
 
zaskok3:
En MQL4++ no puedo prescindir de extern cuando necesito cambiar los parámetros de entrada programáticamente. Por ejemplo, al convertir un indicador estándar en uno interactivo tengo que sustituir input por extern. El compilador trata las variables de entrada como const y se queja al intentar cambiarlas. Con extern no existen estos problemas.

Utilizar "duplicadores" de parámetros de entrada

Tenemos un ejemplo en MQL5\Indicators\Examples\ADX.mq5.

//--- input parameters
input int InpPeriodADX=14; // Period
//---- buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];
//--- global variables
int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else ExtADXPeriod=InpPeriodADX;
 
Compañeros, ¿alguien obtiene regularmente "Error interno del compilador" al compilar? Sin razón aparente, en el caso de la recompilación - cuelga, en el caso de cerrar el editor, volver a abrir (con las mismas pestañas, con el mismo código) - la compilación suele ser normal. Nada cambia en el código. Pero a veces este error se produce varias veces seguidas y el primer reinicio del editor no ayuda. Hasta ahora, como resultado de la recarga todo logró compilar. Pero me temo que tarde o temprano dejará de funcionar. Me gustaría encontrar a alguien más que se haya encontrado con fallos similares, para que juntos podamos proporcionar a servicedesk datos sobre las condiciones de su aparición.
 
Slawa:

Utilizar "duplicadores" para los parámetros de entrada

Tenemos un ejemplo en MQL5\Indicators\Examples\ADX.mq5

Ahora, para convertir un indicador en la versión interactiva, sólo hay que añadir una línea al código fuente. Si hace los dobladores, además de la cadena adicional para la creación del doblador, debe hacer la sustitución de todo el texto. Por qué esta molestia cuando se puede cambiar una sola línea.

¿Qué le impide eliminar el conocimiento de las variables de entrada en tiempo de compilación?

 
zaskok3:

Para convertir el indicador en una variante interactiva, sólo hay que añadir una línea a la fuente. Si hace un doble, además de la línea extra para crear un doble, tendrá que reemplazar todo el texto. Por qué esta molestia, cuando se puede cambiar fácilmente una línea.

¿Qué le impide eliminar el conocimiento de las variables de entrada en tiempo de compilación?

Edición de textos. "Ctrl" + "H" - buscar y reemplazar. Nada complicado. No seas perezoso.
 
zaskok3:

¿Qué le impide eliminar el conocimiento de las variables de entrada en tiempo de compilación?

Almacenamiento global de los indicadores en la base histórica de MT5. Para ellos, los parámetros de entrada son clave. Cuando se cambian los parámetros de entrada, se destruye el indicador con los parámetros antiguos y se vuelve a crear el mismo indicador con los parámetros modificados.

Es decir, la restricción es puramente arquitectónica

En la cuarta versión podríamos eliminar la constancia de las instancias, pero entonces hay una incompatibilidad del nuevo MQL4 y MQL5. Por lo tanto, no lo haremos. Por favor, siga utilizando extern

 

Slawa:

Es decir, la limitación es puramente arquitectónica.

Es una lástima que la arquitectura sea tan rígida que no exista la posibilidad de una simple flexibilidad. Resulta que la interactividad en MQL5 requerirá una muleta. La pregunta es, ¿dónde está la ventaja entonces, si la lengua limita las posibilidades...
 
pako:
Ventana para desprenderse del terminal
¿Cómo?
 
Joo Zepper:
¿Cómo?
Estaba en algún foro, un DLL