Errores, fallos, preguntas - página 1440
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
MT 4. Generador de números aleatorios MathRand() dentro de OnTick(). Al probar el búho, se obtienen resultados diferentes cuando se vuelve a ejecutar con la misma configuración. Esto es natural si el número generado afecta al algoritmo.
Al optimizar, obtengo por alguna razón resultados idénticos en una segunda ejecución con la misma configuración. ¿Entonces MathRand() no funciona en modo de optimización?
En segundo lugar (temo equivocarme aquí, espero queAlexander Puzanov me corrija si es que hay algo), si el programador por alguna razón decide añadir un elemento con índice 20 a un array dinámico, no pasará nada malo. El array tomará esta dimensión y escribirá un valor allí e inicializará los índices "perdidos" con valores cero.
Exactamente. ¿Por qué "cero"? ¿Tal vez debería ser EMPTY_VALUE? ¿O WRONG_VALUE ?
El problema de estas asignaciones implícitas es precisamente su naturaleza implícita: el compilador introduce un código, que un programador piensa de una manera, mientras que otro podría pensar de otra.
Además, es ineficaz: no siempre es necesario inicializar una variable inmediatamente, e inicializar un array grande, en un bucle, puede reducir significativamente la velocidad.
Y en tercer lugar, ¡nadie impide que el programador controle la dimensionalidad y el índice utilizado! La única diferencia es que ahora está obligado a hacerlo. )))
Si el compilador lleva la cuenta de la dimensión de un array por sí mismo, ninguna clase podrá limpiar este código. Es muy posible que la eficiencia disminuya.
Al mismo tiempo, si el compilador no se encarga de esta tarea, el programador puede escribir una clase que se encargue de ello y utilizar un array que se pueda expandir e inicializar con ceros cuando sea necesario.
En el segundo caso, la flexibilidad es mayor.
Así que lo que propones también es una buena solución para muchos casos. Pero puede disminuir la eficiencia, lo que no es bueno.
Este es, en principio, un ejemplo sencillo de cómo debería llenarse normalmente un array dinámico. ¡Hace mucho que no escribo en C, no lo recuerdo, pero así es como se llenan los arrays en php! Todo es lógico y comprensible. Si añado un elemento a un array (arr[] = x), el array se expande automáticamente y el elemento se añade al final del array. Y no tenemos que estirarlo por nosotros mismos, y no tenemos que especificar el índice del elemento por nosotros mismos. Pero aquí tenemos que hacer movimientos absolutamente innecesarios:
la diferencia es evidente...
En mi opinión, es extraño, por decir lo menos ))))
Los lenguajes de programación se dividen en estrictamente tipados y no tipados. Su PHP, R y otros lenguajes funcionales pertenecen a los no estrictamente tipados. En lenguajes estrictamente tipados como MQL o C# y Java no se permite este tipo de manipulación de datos ambiguos. Y esto se hace específicamente para la seguridad del propio programador. La tipificación estricta implica que cada uno de tus procedimientos es extremadamente específico: "tomar un elemento en el índice 0 del array" es un procedimiento específico y claro, pero propones sustituirlo por "tomar algo del array y añadirlo a lo que el compilador decida devolver primero". - Estás de acuerdo en que no llegarás muy lejos con esto.
Por otro lado, por supuesto, queremos construcciones sencillas de alto nivel sin el fastidioso dimensionamiento de los arrays y la constante reorganización por parte del usuario. Para eso está la biblioteca estándar. En lugar de utilizar arrays básicos, cambia a las clases del grupo Array. Así es como, por ejemplo, se ve la adición de cero a 16 en la matriz CArrayInt:
Como puede ver, no hay nada demasiado natural. Y no hace falta devanarse los sesos con el tamaño de la matriz actual y otros reajustes. Todo se hace por usted, dentro de una estricta mecanografía, y se le invita a concentrarse directamente en la tarea del usuario. Este es el poder y el sentido de la OOP.
La grabación completa no está disponible. Error de compilación
No encuentro dónde me equivoco.
La tarea consiste en encontrar el valor máximo y mínimo en un intervalo
Orden incorrecto de los argumentos en ArrayMaximum(), ArrayMinimum().
No encuentro dónde me equivoco.
La tarea consiste en encontrar el valor máximo y mínimo en un intervalo
Funciones
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copiar valores de máximos
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copiar valores de mínimos
ya redimensiona el array.
Esto es innecesario
ArrayResize(HI,Kol_Kan); //poner el tamaño del array
ArrayResize(LO,Kol_Kan);
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
Exactamente)) Y aquí estaba pensando...
Funciones
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copiar valores de máximos
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copiar valores de mínimos
ya redimensiona el array.
Esto es innecesario
ArrayResize(HI,Kol_Kan); //poner el tamaño del array
ArrayResize(LO,Kol_Kan);
Lo sabré, gracias.
El autor, en cambio, ya se ha dado cuenta. ))
PabloEs:
Exactamente)) Y aquí estaba pensando...