¡¡¡¡¡¡¡inicialización global fallida!!!!!!! - página 6

 
SDC:

Utiliza int OnCalculate() en lugar de int start(). Se ejecuta en cada tick como start(). Un antes y un después se vería algo así,

Los parámetros formales de OnCalculate lo hacen más autónomo, el programador no tiene que depender de llamar a todo tipo de globales, lo que aparentemente en los círculos de la oop es un mal codificador, un tirón de orejas. En la práctica no hay mucha diferencia entre usar uno u otro. Además, OnCalculate es el mismo que el de mql5, así que tienes la opción de escribir código compatible.


Gracias, SDC. Creo que entiendo lo que quieres decir. No estoy seguro de que me gusta la dirección que MetaQuotes va con esto. Están haciendo lo mismo que ha hecho Microsoft. Puede facilitar la codificación, pero reduce seriamente la necesidad del programador de entender lo que realmente sucede "bajo el capó", por así decirlo. Eso es un gran problema, en mi opinión, porque reduce la habilidad y la comprensión de los programadores. Si quieres ser un maestro de lo que haces, tienes que entenderlo desde el nivel más básico hasta los conceptos más elevados. Yo empecé a programar en 1978. Escribíamos en código binario y octal. La mayoría de la gente ahora no tendría ni idea. Microsoft lleva muchos años empujando los lenguajes de programación a un nivel que separa completamente al programador del conocimiento de lo que realmente sucede bajo el capó y no es para nuestro beneficio. Su intención es que sólo sus programadores sepan lo que realmente sucede en los niveles bajos y todos los demás tengan que depender de ellos.

Un ejemplo de lo que digo es la evolución de C++ a C#. Ostensiblemente, C# está pensado para facilitar la vida del programador haciendo la "fontanería" de bajo nivel por ellos, liberándoles de la necesidad de saber cómo hacerlo por sí mismos y también acelerando el tiempo de desarrollo en el proceso. Claro que lo ha conseguido, pero ¿a qué precio? Los "veteranos" entendemos perfectamente el acceso directo a la memoria y cómo utilizarlo. Sabemos lo que ocurre "bajo el capó". A menudo he necesitado asignar específicamente una determinada cantidad de memoria o manipular la memoria byte a byte o incluso a nivel de bits. ¿Alguien que sólo conoce la "nube" de alto nivel de C# tiene alguna idea? No. Llama a Microsoft.

Sé que me he puesto a despotricar aquí, pero creo que MetaQuotes se está moviendo en la misma dirección y eso no es algo bueno. Definitivamente no es algo bueno cuando se trata de escribir aplicaciones que tienen que tratar con datos en tiempo real. En nuestro ámbito, un error puede costar mucho dinero a alguien. Puedo vivir con ello si meto la pata en una aplicación que sólo pretendo para mi uso personal. Si lo hago en una aplicación que voy a vender, no es aceptable.

Por cierto, no creo que los globales como se usan en OOP y los globales como se usan en MQL sean el mismo concepto. MQL es todavía un bebé en términos de ser un verdadero lenguaje orientado a objetos. De hecho, "global" no significa nada en OOP. Se llama una variable "estática" y está disponible para todos los objetos creados a partir de la misma clase, así como cualquier clase en una jerarquía derivada. Está mal visto por razones de encapsulación de datos, así como por ser una pesadilla de mantenimiento, especialmente cuando se utiliza en una clase de muy alto nivel de la que depende todo en una aplicación.

 

Básicamente, si quieres obtener los números de la cuenta, sólo tienes que utilizar AccountBalance()

Así que, si realmente quieres saber cómo se obtiene exactamente el saldo, no tienes ni idea. Sólo los desarrolladores lo saben.

 
ProfessorMetal:


Gracias, SDC. Creo que entiendo lo que quieres decir. No estoy seguro de que me guste la dirección que MetaQuotes está tomando con esto. Están haciendo lo mismo que ha hecho Microsoft. Puede facilitar la codificación, pero reduce seriamente la necesidad del programador de entender lo que realmente sucede "bajo el capó", por así decirlo. Eso es un gran problema, en mi opinión, porque reduce la habilidad y la comprensión de los programadores. Si quieres ser un maestro de lo que haces, tienes que entenderlo desde el nivel más básico hasta los conceptos más elevados. Yo empecé a programar en 1978. Escribíamos en código binario y octal. La mayoría de la gente ahora no tendría ni idea. Microsoft lleva muchos años empujando los lenguajes de programación a un nivel que separa completamente al programador del conocimiento de lo que realmente sucede bajo el capó y no es para nuestro beneficio. Su intención es que sólo sus programadores sepan lo que realmente sucede en los niveles bajos y todos los demás tengan que depender de ellos.

Un ejemplo de lo que digo es la evolución de C++ a C#. Ostensiblemente, C# está pensado para facilitar la vida del programador haciendo la "fontanería" de bajo nivel por ellos, liberándoles de la necesidad de saber cómo hacerlo por sí mismos y también acelerando el tiempo de desarrollo en el proceso. Claro que lo ha conseguido, pero ¿a qué precio? Los "veteranos" entendemos perfectamente el acceso directo a la memoria y cómo utilizarlo. Sabemos lo que ocurre "bajo el capó". A menudo he necesitado asignar específicamente una determinada cantidad de memoria o manipular la memoria byte a byte o incluso a nivel de bits. ¿Alguien que sólo conoce la "nube" de alto nivel de C# tiene alguna idea? No. Llama a Microsoft.

Sé que me he puesto a despotricar aquí, pero creo que MetaQuotes se está moviendo en la misma dirección y eso no es algo bueno. Definitivamente no es algo bueno cuando se trata de escribir aplicaciones que tienen que tratar con datos en tiempo real. En nuestro ámbito, un error puede costar mucho dinero a alguien. Puedo vivir con ello si meto la pata en una aplicación que sólo pretendo para mi uso personal. Si lo hago en una aplicación que voy a vender, no es aceptable.

Por cierto, no creo que los globales como se usan en OOP y los globales como se usan en MQL sean el mismo concepto. MQL es todavía un bebé en términos de ser un verdadero lenguaje orientado a objetos. De hecho, "global" no significa nada en OOP. Se llama una variable "estática" y está disponible para todos los objetos creados a partir de la misma clase, así como cualquier clase en una jerarquía derivada. Es mal visto por razones de encapsulación de datos, así como por ser una pesadilla de mantenimiento, especialmente cuando se utiliza en una clase de muy alto nivel de la que depende todo en una aplicación.

Bueno, creo que la dirección de MQ es lograr la compatibilidad mql4 - mql5, usted verá que ya estamos a la deriva en el territorio mql5 con OnTick, OnTimer, OnCalculate, y una serie de funciones mql5 que ahora están disponibles para su uso. Sin embargo, verás que no lo hace más fácil. En todo caso, la nueva versión es más dura que antes, el antiguo mql4 nos permitía escribir un código bastante descuidado y salirse con la suya, el nuevo espera que seamos más precisos.
 

Por eso ya no se puede utilizar el generador de ea. A menos que el código se actualice, realmente necesitas codificar el indi/ea tú mismo.

Prácticamente, la disciplina es la clave para hacer programación. Es duro, pero te vuelves más poderoso en la codificación.

 
SDC:
Bueno, creo que la dirección de MQ es lograr la compatibilidad mql4 - mql5, usted verá que ya estamos a la deriva en el territorio mql5 con OnTick, OnTimer, OnCalculate, y una serie de funciones mql5 que ahora están disponibles para su uso. Sin embargo, verás que no lo hace más fácil. En todo caso, la nueva versión es más dura que antes, el antiguo mql4 nos permitía escribir un código bastante descuidado y salirse con la suya, el nuevo espera que seamos más precisos.


Ya veo a qué te refieres. Estuve mirando algo de la documentación y me di cuenta de que estaba entendiendo mal el uso de los nuevos métodos. OnStart() es para el inicio de los scripts, OnCalculate() sustituye al antiguo start() para los indicadores y se supone que sustituye mucho del negocio de las barras contadas que todo el mundo utilizaba en la antigua encarnación de MQL, así como el inicio de la ejecución del código del indicador cuando se recibe un nuevo tick (siempre que no esté en ejecución) y, finalmente, OnTick() sustituye a start() para los EAs. Junto con otros muchos cambios, tienes razón, no nos facilita la vida porque tenemos que "reaprender" y para los que llevan un tiempo en esto y tienen varias aplicaciones montadas, va a suponer mucha reingeniería para mantenerlas en funcionamiento. En cuanto a mí, apenas estaba empezando a entender el MQL y esto me ha hecho saltar una buena. La mayor parte de lo que había aprendido ahora tengo que "desaprender", por así decirlo.

En cuanto a que las cosas sean más estrictas, en mi opinión es algo bueno. Puede ser una molestia acostumbrarse, pero reducirá el potencial de errores que podrían resultar costosos para nuestros usuarios y para nosotros mismos. Desde la perspectiva de alguien que ha pasado años en el mundo corporativo trabajando en aplicaciones en las que los errores por nuestra parte podrían costar a nuestros usuarios grandes cantidades de dinero (y a nosotros nuestros puestos de trabajo), soy un defensor de la precisión. Lo que quería decir, sin embargo, es que al hacer cosas como introducir el OnCalculate() que hace la mitad del trabajo por ti, se reduce la comprensión de lo que está pasando bajo el capó. Hablo por experiencia cuando hablo del cambio de C++ a C#. Pasas de saber "cómo funciona esto" a "pulso este botón y pasa esto". Tal vez sea de la vieja escuela, pero no creo que la simplificación sea algo bueno. Esta reingeniería tiene puntos buenos y malos.

 
deysmacro:

Por eso ya no se puede utilizar el generador de ea. A menos que el código se actualice, realmente necesitas codificar el indi/ea tú mismo.

Prácticamente, la disciplina es la clave para hacer programación. Es duro, pero te vuelves más poderoso en la codificación.


No hay discusión, amigo. A decir verdad, no creo que los generadores de EA deban usarse nunca. No tienes ni idea de lo que hace realmente una "caja negra". En cuanto a tu segunda afirmación, estoy contigo hasta el final.
 
ProfessorMetal:

Has pasado de saber "cómo funciona esto" a "pulso este botón y sucede esto". Tal vez sea de la vieja escuela, pero no creo que la simplificación sea algo bueno. Esta reingeniería tiene puntos buenos y malos.

Míralo de esta manera: sería un trabajo prácticamente imposible para una sola persona o incluso para una empresa organizada de personas programar algo como MT4 completamente de código binario desde cero. Por no hablar de los modernos juegos de ordenador que existen. Habrá un momento en el que ninguna persona viva tendrá la más mínima idea de binario, octal, hexidecimal o incluso Basic. Primero, se construye de elementos, luego, con el paso del tiempo, se obtienen bloques, luego tal vez historias enteras, libros enteros. Se reensamblan las tramas y se termina con algo aparentemente nuevo, aunque es la misma shi_ de siempre. El mundo cambia, ¡uno no puede quedarse estancado en el mismo escenario de siempre! Uno tiene que reaprender todo el tiempo, leer el manual, primero. Luego, otra vez, y otra vez, y otra vez. De lo contrario, uno se queda atrás y se convierte en un dinosaurio.

 
Dadas:

Míralo de esta manera: sería un trabajo prácticamente imposible para una sola persona, o incluso para una empresa organizada de personas, programar algo como la MT4 completamente de código binario desde cero. Por no hablar de los juegos de ordenador modernos que existen. Llegará un momento en el que ninguna persona viva tendrá la más mínima idea de binario, octal, hexidimensional o incluso Basic. Primero se construye con elementos, luego, con el paso del tiempo, se obtienen bloques, luego tal vez historias enteras, libros enteros. Se reensamblan las tramas y se termina con algo aparentemente nuevo, aunque es la misma mierda de siempre. El mundo cambia, ¡uno no puede quedarse estancado en el mismo escenario de siempre! Uno tiene que reaprender todo el tiempo, leer el manual, primero. Luego otra vez, y otra vez, y otra vez. De lo contrario, uno se queda atrás y se convierte en un dinosaurio.


Entiendo tu punto de vista, Dadas. Y estoy de acuerdo contigo hasta cierto punto. Sin embargo, alguien va a tener que conocer SIEMPRE el tema desde la base o todo el castillo de naipes se va a venir abajo. Te voy a ilustrar lo que quiero decir. He pasado mi tiempo como educador profesional. Tengo el rango de profesor asistente de matemáticas y física. Enseñé en un colegio comunitario y nuestro Departamento de Física "permanente" estaba formado por mí y el jefe del departamento.

En aquella época, el departamento de matemáticas se inclinaba por que toda la instrucción se hiciera enseñando a los alumnos estadística, cálculo, álgebra lineal, etc. mediante programas de ordenador o calculadora. No se les enseñaba nada sobre las materias reales. Lo único que se enseñaba a los alumnos era cómo utilizar los programas. Eso no es aprender matemáticas. Es pulsar el botón de inicio introduciendo algunos números y pulsando el botón "Go". He tenido alumnos que han venido a quejarse amargamente porque han seguido todas las "instrucciones" y aun así se han equivocado en el problema. Mi primera pregunta era: "¿La respuesta que daba la calculadora les parecía razonable?" ¿La respuesta? "Pues no lo sé". ¿Por qué no lo sabían? Porque no sabían una mierda de matemáticas. Todo lo que sabían era pulsar estos botones en esta secuencia y la calculadora escupiría mágicamente la respuesta. ¡INCORRECTO!

Ahora, volviendo a mi punto original. Mi compañero estaba a favor de esto. ¿Su razonamiento? "Bueno, algún día todo se hará así. Nadie va a necesitar saber cómo hacer las matemáticas y la física como nosotros. Los programas lo harán todo". Mi respuesta: "Sí, claro. ¿Y cómo van a saber exactamente si las "respuestas que obtienen son completamente irreales"? Además, ¿quién demonios va a escribir y mantener todo esto cuando la gente ha llegado al punto de no poder ni siquiera hacer matemáticas básicas porque ha sido entrenada para dejar que la máquina lo haga por ellos?" ¿Ves mi punto? Alguien va a tener que saber "cómo funciona" o, en palabras de Jim Morrison, "toda la casa de mierda va a arder en llamas", y ahí, amigo mío, es donde entran los dinosaurios como yo. Puede que caiga pateando y gritando, pero caeré enseñando hasta el final. Cuando la casa de mierda arda en llamas no será porque haya tomado el camino de la pereza. :-)

 
ProfessorMetal:


Entiendo tu punto de vista, Dadas. Y estoy de acuerdo contigo hasta cierto punto. Sin embargo, alguien va a tener que conocer SIEMPRE el tema desde la base o todo el castillo de naipes se va a venir abajo. Te voy a ilustrar lo que quiero decir. He pasado mi tiempo como educador profesional. Tengo el rango de profesor asistente de matemáticas y física. Daba clases en un colegio comunitario y nuestro Departamento de Física "permanente" estaba formado por mí y el jefe del departamento.

En aquel momento, el departamento de matemáticas se inclinaba por que toda la instrucción se hiciera enseñando a los estudiantes estadística, cálculo, álgebra lineal, etc. mediante programas de ordenador o calculadora. No se les enseñaba nada sobre las materias reales. Lo único que se enseñaba a los alumnos era cómo utilizar los programas. Eso no es aprender matemáticas. Es pulsar el botón de inicio introduciendo algunos números y pulsando el botón "Go". He tenido alumnos que han venido a quejarse amargamente porque han seguido todas las "instrucciones" y aun así se han equivocado en el problema. Mi primera pregunta era: "¿La respuesta que daba la calculadora les parecía razonable?" ¿La respuesta? "Pues no lo sé". ¿Por qué no lo sabían? Porque no sabían una mierda de matemáticas. Todo lo que sabían era pulsar estos botones en esta secuencia y la calculadora escupiría mágicamente la respuesta. ¡INCORRECTO!

Ahora, volviendo a mi punto original. Mi compañero estaba a favor de esto. ¿Su razonamiento? "Bueno, algún día todo se hará así. Nadie va a necesitar saber cómo hacer las matemáticas y la física como nosotros. Los programas lo harán todo". Mi respuesta: "Sí, claro. ¿Y cómo van a saber exactamente si las "respuestas que obtienen son completamente irreales"? Además, ¿quién demonios va a escribir y mantener todo esto cuando la gente ha llegado al punto de no poder ni siquiera hacer matemáticas básicas porque ha sido entrenada para dejar que la máquina lo haga por ellos?" ¿Ves mi punto? Alguien va a tener que saber "cómo funciona" o, en palabras de Jim Morrison, "toda la casa de mierda va a arder en llamas", y ahí, amigo mío, es donde entran los dinosaurios como yo. Puede que caiga pateando y gritando, pero caeré enseñando hasta el final. Cuando la casa de mierda arda en llamas no será porque haya tomado el camino de la pereza. :-)


Pues entonces vas a acabar como Don Kichote.

Y sí, no viviremos para verlo, pero va a ser así, tarde o temprano. Al fin y al cabo, nadie sabe una mierda cómo y por qué funciona todo este Universo, y sin embargo funciona. ¿Sabes si estás recibiendo las respuestas correctas del propio Universo? ¿Cómo puedes saberlo? Entiendo la forma de pensar de los matemáticos. Quieren que las fórmulas lo controlen todo y quieren saber/entender de dónde surgen las fórmulas, c/z quieren tener el control. 2+2=4, pero ¿por qué? ¿Es realmente la respuesta correcta? La verdad es que nunca se puede tener el control.

Y, después de todo lo dicho, obtienes "la inicialización global falló" y nadie sabe realmente por qué o cómo solucionarlo.

 
Dadas:


Entonces vas a terminar como Don Kichote.

Y, sí, no viviremos para verlo, pero va a ser así, tarde o temprano. Al fin y al cabo, nadie sabe ni de lejos cómo y por qué funciona todo este Universo, y sin embargo funciona. ¿Sabes si estás recibiendo las respuestas correctas del propio Universo? ¿Cómo puedes saberlo? Entiendo la forma de pensar de los matemáticos. Quieren que las fórmulas lo controlen todo y quieren saber/entender de dónde surgen las fórmulas, c/z quieren tener el control. 2+2=4, pero ¿por qué? ¿Es realmente la respuesta correcta? La verdad es que nunca se puede tener el control.

Y, después de todo lo dicho, obtienes "falla de inicialización global" y nadie sabe realmente por qué o cómo solucionarlo.


LOL Creo que querías decir Don Quijote. En cualquier caso, la cuestión es que tenemos que entender realmente con qué estamos trabajando o nos dirigimos directamente al fracaso.