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 parametersinputint InpPeriodADX=14; // Period//---- buffersdouble ExtADXBuffer[];
double ExtPDIBuffer[];
double ExtNDIBuffer[];
double ExtPDBuffer[];
double ExtNDBuffer[];
double ExtTmpBuffer[];
//--- global variablesint ExtADXPeriod;//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
//--- check for input parametersif(InpPeriodADX>=100 || InpPeriodADX<=0)
{
ExtADXPeriod=14;printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
}
elseExtADXPeriod=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.
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.
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.
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
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...
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
Sería bueno reflejar esto en la documentación.
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.
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?
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?
¿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.
Ventana para desprenderse del terminal
¿Cómo?