[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 60

 
TheXpert >> :

¡Recordado! Una peculiaridad de la implementación de las cadenas. Después de cambiar el tamaño de la matriz, hay que recorrerla y ponerla a cero:

Podría estar equivocado pero debería ayudar.

Gracias por la respuesta. Lo intenté, pero desgraciadamente no sirvió de nada. La puesta a cero funciona antes de empezar a hacer algo con el array. Y la puesta a cero se hace a través de la asignación explícita del VALOR de la cadena, mientras que en el caso que he señalado, a los elementos del array se les asigna el resultado de la función (que debería devolver un VALOR de tipo cadena) pero en realidad devuelve una REFERENCIA a la dirección de la cadena en memoria, lo que creo que es incorrecto. Y el resultado con valores idénticos se debe a que la función es llamada varias veces seguidas y después de cada llamada la siguiente utiliza realmente la misma memoria, poniendo allí nuevos datos. Si hacemos cualquier manipulación entre las llamadas (llamadas de cualquier f-ión, declaración de variables, etc) el resultado será muy probablemente aún peor, es decir, los valores en el elemento de la matriz de cadenas apuntará a la basura en la memoria.


Me gustaría que los desarrolladores de mql4 comentaran esta situación y explicaran la forma correcta de trabajar con arrays de cadenas, si es posible.

 
xruss писал(а) >>
¿hay algún tipo de error?

Se selecciona la última orden cerrada del historial y se asigna su tipo a la variable ORDtype antes de generar la señal de apertura. Es decir, si el historial no está vacío, obviamente ORDtype no será igual a -1. Por lo tanto, la condición para que aparezca la señal no se cumple ya que

if ((ORDtype==-1)&&(...))

 
Everlost >> :

Se selecciona la última orden cerrada del historial y se asigna su tipo a la variable ORDtype antes de generar la señal de apertura. Es decir, si el historial no está vacío, obviamente ORDtype no será igual a -1. Por lo tanto, no se cumple la condición de ocurrencia de la señal ya que

if ((ORDtype==-1)&&(...))

Y un problema más: las posiciones no se abren aunque el historial esté vacío ((

 
Yug >> :

Gracias por la respuesta. Lo intenté, pero desgraciadamente no sirvió de nada. La puesta a cero funciona antes de que empecemos a hacer algo con el array. Y la puesta a cero se hace mediante la asignación explícita de un VALOR de cadena, mientras que en el caso que he señalado se asigna a los elementos del array el resultado de la función (que debería devolver un VALOR de tipo cadena) pero en realidad devuelve una REFERENCIA a la dirección de la cadena en memoria, lo que creo que es incorrecto. Y el resultado con valores idénticos se debe a que la función es llamada varias veces seguidas y después de cada llamada la siguiente utiliza realmente la misma memoria, poniendo allí nuevos datos. Si hace cualquier manipulación entre las llamadas (llamadas de cualquier tipo, declaración de variables, etc.) el resultado será probablemente aún peor, es decir, los valores en el elemento de la matriz de cadenas apuntará a la basura en la memoria.


Pido a los desarrolladores de mql4 que comenten esta situación si es posible y expliquen cómo trabajar con arrays de cadenas correctamente.

Inténtalo de esta manera:

string tmp = func();
array[0] = tmp;

Un huerto, por supuesto, pero debería funcionar...

 

¿Qué significa MT4 en el probador -Optimización, dónde se marca? ¿Qué es esta función? ¿Sintoniza el EA con alguna configuración específica (estándar) o muestra en qué periodo (TF) funciona mejor?

 
rafex >> :

¿Qué significa MT4 en el probador -Optimización, dónde se marca? ¿Qué es esta función? ¿Sintoniza el EA con alguna configuración específica (estándar) o muestra en qué marco temporal (TF) funciona mejor?

Esta casilla sólo se puede tocar después de pulsar F1 y estudiar detenidamente la sección "Autotrading".

 
komposter >> :

Inténtalo de esta manera:

Un huerto, por supuesto, pero debería funcionar...

Lo probé anteayer. El resultado es el mismo. En realidad, la referencia se copia primero en la cadena temporal, y luego la misma referencia se copia en un elemento del array :(

 
Yug >> :

Lo probé anteayer. El resultado es el mismo. En realidad, la referencia se copia primero en la cadena temporal y luego se copia en el elemento del array :(

Declarar la cadena de retorno como estática en la función, sólo entonces la inicialización debe hacerse después de la declaración.

 
Estimados expertos, por favor, no ignoren mi pregunta.

¿Existe algún indicador que cuente la volatilidad, por ejemplo diariamente? Pero no el que da un número indefinido como 0,34. Pero debería calcular el número de velas por día y dividirlo por un periodo determinado (número de días) para que el indicador conozca el valor medio. Ejemplo: Apertura 100, cierre 200; el segundo día - apertura 200, cierre 250. Volatilidad media para estos 2 días = ((200-100)+(250-200))/2 días=(100+50)/2=75
Donde descargar si está disponible.
 
TheXpert >> :

Declarar la cadena de retorno como estática en la función, pero entonces la inicialización debe hacerse después de la declaración.

Yo también probé esta variante. El resultado es el mismo, es decir, se devuelve la referencia de memoria en lugar del valor.

Razón de la queja: