La diferencia entre externo y de entrada - página 4

 
Igor Makanu:

¿Qué tal si se declara una variable de tipo enum?

conversión enum implícita tst1.mq5 24 17


también puede comprobar EnumToString()...


Creo que el tipo sin variables declaradas fue simplemente expulsado de la compilación como no utilizado

Es decir, puedes declarar accidentalmente una variable con el mismo nombre que en el enum que ya está en uso y luego tener un tiempo muy largo y doloroso buscando dónde y por dónde me disparé en la rodilla

 
Maksim Neimerik:
¿Cuál es el veredicto, señores? Si escribo un programa .mq5 con .mqh (#include), puedo escribir con seguridad extern y no tener miedo de las consecuencias inesperadas (como hice en mql4), o usar input ?

En MT5 utilice la entrada para declarar variables externas. Extern en MT5 tiene un propósito diferente.

 
Dmitry Fedoseev:

En MT5 utilice la entrada para declarar variables externas. Extern en MT5 tiene un propósito diferente.

¿Por qué no se puede utilizar extern en MT5? - He compilado mi ejemplo en MT5, no veo una diferencia fundamental

 
Igor Makanu:

¿Por qué no se puede utilizar extern en MT5? - He compilado mi ejemplo en MT5, no veo ninguna diferencia fundamental

Porque la gente por costumbre del viejo MQL4 está tratando de usar extern para los parámetros de entrada.

Y en los nuevos MQL4 y MQL5, la entrada se utiliza junto con #property strict, y extern se utiliza para otros fines.

Por eso se dijo que no se usara extern.

 
Artyom Trishkin:

Porque la gente por costumbre desde el antiguo MQL4 trata de usar extern para los parámetros de entrada.

Y en los nuevos MQL4 y MQL5, la entrada se utiliza junto con #property strict, y extern se utiliza para otros fines.

Por eso te dije que no usaras extern.

Así que todo el mundo está tratando de escribir un montón de bukuffs y el resultado es que NO debe utilizar sólo en MQL5 y no debe utilizar en cualquier otro lugar))


¡¡¡¡Ok, aquí viene el gran argumento, imho - si ves extern en un código antiguo, reemplázalo con input y arregla todas las advertencias, y que el poder de MQL te siga !!!!

 
Igor Makanu:

Ya ves, todo el mundo trata de escribir un montón de bukuffs y terminan con NO usar SOLO en MT5 o NO usar en cualquier lugar en absoluto ))))


¡¡¡¡Ok, aquí viene el gran argumento, imho - si usted ve extern en un código antiguo, reemplazarlo con la entrada y corregir todas las advertencias, y que el poder de MQL estar con usted !!!!

No entiendo mucho de lo que se escribe aquí.

Pero me refería a no usar extern en MQL5 y MQL4 con #property strict para declarar parámetros externos de los programas, sino a usar para el propósito descrito (vagamente) en la ayuda.

 

He estado pensando, sólo una idea... En MQL5, ¿no es mucho más problemático trabajar con iCustom() que en MQL4 (o en general con las llamadas a indicadores en MQL4)? ¿Es así? Si es así, entonces continuaré.

Acabo de empezar a aprender un poco de MQL5...

Probablemente iniciaré un nuevo tema.
 
Maksim Neimerik:
Sólo estoy pensando... En MQL5 es mucho más difícil trabajar con iCustom() que en MQL4 (o en general con los indicadores que llaman en MQL4), ¿no es así? ¿Es así? Si es así, continuaré.

no es más problemático, es sólo que en MQL5 tienes que trabajar con iCustom() en dos pasos:

1. obtener la manija del indicador

2. solicitar los valores de los búferes indicadores mediante CopyBuffer()


en MQL4 - iCustom() funciona como una llamada a una función con parámetros - se llama, se recibe

en MQL5 funciona de la misma manera - los desarrolladores redujeron a propósito la funcionalidad de las funciones incorporadas e hicieron que el acceso a las series de tiempo fuera inconveniente - acaban de añadir recientemente iClose(), iHigh() a MQL5, antes necesitaban copiar los datos en un array como con CopyBuffer()

en general, MT5 tiene más escritura que MT4

 
Igor Makanu:

no es más problemático, es que en MQL5 hay que trabajar con iCustom() en dos pasos:

1. obtener la manija del indicador

2. solicitar los valores de los búferes indicadores mediante CopyBuffer()


en MQL4 - iCustom() funciona como una llamada a una función con parámetros - se llama, se recibe

en MQL5 funciona de la misma manera - los desarrolladores redujeron a propósito la funcionalidad de las funciones incorporadas e hicieron que el acceso a las series de tiempo fuera inconveniente - acaban de añadir recientemente iClose(), iHigh() a MQL5, antes necesitaban copiar los datos en un array como con CopyBuffer()

en general, MT5 tiene más escritura que MT4

https://www.mql5.com/ru/forum/316800

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

Desgraciadamente, la implementación de las variables externas en MQL5 no está finalizada, y es por eso que no recomiendo su uso - podría causar problemas. Me refiero a la falta de control sobre la inicialización obligatoria deuna sola vez de estas variables.

Por ejemplo, puede escribirlo de esta manera:

extern int a=1;
extern int a=2;

y no habrá ningún error. Imagina que estas inicializaciones se realizan en diferentes plugins. Entonces, el resultado final dependerá del orden en que se incluyan estos archivos.

O podemos escribirlo así (archivo ejecutable):

extern int a;

void OnStart() { Print(a); }

aquí no hemos inicializado la variable externa en absoluto, pero tampoco hay error.

En consecuencia, no hay control sobre si las mismas variables están definidas en otros archivos. Puedes cambiar su nombre accidentalmente, pero el programa compilará como si no hubiera pasado nada, aunque en otros archivos tengamos una variable con un nombre diferente.

En definitiva, no cabe en ningún sitio. Por eso es mejor utilizar funciones en lugar de variables externas, ya que se garantiza que sólo tienen una definición, ni más ni menos.