Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 264

 
pero eso es lo que parece. Si el tamaño del array no está preestablecido, entonces definitivamente debe ser ArrayResize. Y al final del ArrayResize(array,0); sí, eso es justo, nunca pensé en eso...........Uchtu....... Gracias))))
 
¡¡¡¡¡¡¡No se puede hacer un ArrayResize en cada tick!!!!!!! De lo contrario, te empantanarás en los cálculos................... Y ningún procesador multinúcleo te salvará........
 
El artículo "ShowCandleSize" publicado el 11.11.2013 07:54 no se muestra correctamente y no se puede editar por alguna razón desconocida.
Me puse en contacto con el servicio de asistencia técnica el 15 de noviembre con este problema en noreply@metaquotes.net, pero no recibí respuesta.
Por favor, pueden indicarme la dirección correcta para tal pregunta.
Respetuosamente.
--
Vladislav Shurkin,
El 20 de noviembre de 2013.
 
artmedia70:
Todos los resultados de las operaciones cerradas pueden verse en el historial de la cuenta. Con el software. ¿Es necesario atiborrar una matriz con ellos todo el tiempo? Puede haber muchos. Es mejor limitar la profundidad necesaria de la historia y llenar la matriz, si realmente no puede vivir sin ella.

Gracias por la aclaración.

"Todos los resultados de las operaciones cerradas pueden verse en el historial de la cuenta. Por software" - ¿Cómo?
 
VladislavVG:


Al finalizar el programa, la memoria asignada dinámicamente debe ser liberada para evitar fugas de memoria. No sé si los desarrolladores de MKL siguen esto



Lo hacen, por eso los arrays se hacen estáticos, para recogerlos en un lugar y liberarlos después. ArrayResize(a,0) al final del programa no tiene mucho sentido, aunque sólo sea por seguridad.
 
Leo59:
Gracias por la aclaración.

"Todos los resultados de las operaciones cerradas pueden verse en el historial de la cuenta. Programáticamente" - ¿Cómo?

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

o

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)

 
alsu:

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)

o

OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)




Gracias!


¿Qué tiene de bueno el tutorial de Kovalev? Creo que es bueno porque se aprende a resolver problemas sencillos utilizando ejemplos simples de código de programa.

En realidad, empecé a aprender a programar a partir del código de los indicadores de Vladislav Goshkov. Dibujé ese indicador con los rayos de soporte y resistencia de De-Mark. Había las siguientes líneas:
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
Lo he colocado. Lo miré en el probador y vi cómo funcionaba. Dibuja rayos por fractales pero mira al pasado en lugar de al futuro... )))). Empecé a hacer preguntas y me salió bien. ¡¡¡¡Respeto a Vladislav!!!!
Más tarde me encontré con el libro de texto de Kovalev. Me gustaría que se respondieran más preguntas en este formato.

Y una cosa más.
"¿Quieres escribir tu propio experto y no sabes por dónde empezar? Con la aparición de los artículos de Rosh en el sitio web de Alpari, los primeros pasos en la creación de un experto pueden ser fáciles e indoloros.
Rosh describe los pasos por los que pasa todo escritor de EA de forma sencilla y accesible. Muchos de los matices de la programación, cuyo conocimiento se adquiere con una larga experiencia, están ahora al alcance de todos.
Paso a paso, partiendo de lo más básico, aprenderá los entresijos de la programación de Forex".

¿Quizás sepa en qué enlace se puede leer este resumen del artículo?
 
VladislavVG:


Porque no es una matriz, para ser precisos. Si quiere más detalles - vea las descripciones de C. Me refiero a ello, porque los desarrolladores desde el principio dijeron que sobre todo lo que no está claro o se presenta de forma incompleta - vea la norma C.

Cuando declaras la variable double buffer[]; asignas memoria para una variable, que en términos de C se llama "puntero", tiene tipo entero y almacena la dirección de la celda de memoria desde la que comenzará el array. Si se comprueba la dimensionalidad de la variable en MCL, se obtiene el valor 0. Esto significa que el array en sí no tiene memoria asignada y cuando intentas asignar un valor, no hay dónde escribirlo: en la ACM no hay aritmética de direcciones y no se pueden manejar punteros. En C se puede escribir, pero con la memoria "no asignada" suele provocar un fallo del sistema. Cuando se aplica AreiResize(array,N), (N>0), esto asigna memoria para el array (al menos un elemento) y crea espacio para escribir valores. Entonces, cuando se compruebe, la dimensión del array será diferente de 0.

El concepto de matriz estática en términos de C tiene varios significados:

1. Un array estático (así como una variable/tipo estático) son aquellas variables/arreglos cuya dimensionalidad se conoce en la fase de compilación (precompilación para MKL4) . Por ejemplo, cuando se describe double buff[10000];, el compilador recibe el tamaño de la variable y puede asignar memoria inmediatamente. En contraposición a este concepto, existe el de "matriz dinámica", es decir, una matriz cuyo tamaño se desconoce en tiempo de compilación y sólo se conoce en tiempo de ejecución; todas ellas son matrices de tamaño variable. Cuando se accede a estas matrices, hay que asignar previamente la memoria. La memoria se asigna fuera de la memoria estática del programa.

En C/C++, si un array se describe en un bloque, su visibilidad está limitada por el bloque, ya sea un array estático o dinámico. Los errores en los programas como las "fugas de memoria" se asocian a las matrices dinámicas definidas localmente, es decir, cuando un puntero de memoria se destruye porque sale del ámbito, pero la memoria asignada a él sigue ocupada.

2 El concepto de matriz "estática" como una variable descrita con el modificador static - tales variables no se destruyen al salir del ámbito del bloque - se encuentran en un área de memoria separada - por lo tanto los valores en ellos se conservan. Se reduce el riesgo de fugas de memoria. Una matriz declarada como dinámica en el sentido de p.1 (es decir, el tamaño de la matriz no se conoce en la fase de compilación), también puede ser estática en el sentido de p.2, es decir, declarada con el modificador "static".

Al terminar los programas, la memoria asignada dinámicamente debe ser liberada para evitar fugas de memoria. No sé si los desarrolladores de MKL siguen esto, pero en mis programas siempre libero memoria - costumbre de C - ArreyResize(array,0);

En MKL todas las matrices son estáticas en el sentido del punto 2.

Ahora, con respecto a su pregunta: "¿Por qué no se puedenasignar valores a un array estático double buffer[]; ? Porque no se le asigna memoria (de hecho, es un array dinámico con un modificador estático). Antes de asignar los valores, se debe asignar memoria, es decir, se debe aplicar ArrayResize con un tamaño superior a 0 a este array. En el caso de los arrays, es necesario controlar el rebasamiento de la memoria (fuera del array).

SZ Espero haber sido claro. He intentado hacerlo lo más sencillo posible.

"¡No se puede perder la artesanía!"
¡¡¡¡¡¡¡¡Gracias!!!!!!!!
 
VladislavVG:

Porque no es una matriz, para ser precisos. Si quieres más detalles, consulta las descripciones del lenguaje C. Me refiero a ello porque los desarrolladores dijeron desde el principio que para cualquier cosa que no esté clara o sea incompleta, consulta el estándar C.
........

Muchas gracias. Me he levantado con los ojos pegados pero muy contento de haberlo leído todo, gracias de nuevo.
 
Leo59:


¿Conoce usted, tal vez, un enlace donde se pueda leer la reseña de este artículo?


https://www.mql5.com/ru/articles/mt4


Ah no, ya no se abre(((.