[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 212

 
Buenas tardes a todos.Dos MAs se cruzan muchas veces en el gráfico.Es posible contar el número de barras después de CADA cruce de MA.Después de la última funciona, pero después de CADA una no.¿Alguien sabe cómo hacerlo?
 
MK07:
Si queremos comprobar el número de barras después de TODOS los cruces de MA, podemos calcular el número de barras después del último, pero después de TODOS no.

Depende de para qué lo necesites. Para un EA un algoritmo, para un indicador - otro.

En general, aproximadamente como sigue: vamos a crear una variable en la que almacenaremos el número de cruces. Puede crear dos variables - para arriba y para abajo, por ejemplo Intersection_UP eIntersection_DN.

Antes del bucle, los inicializamos con ceros.

Crear bucle desde la primera barra hasta Bares: for (int i=1; i<Bars; i++) { // cuerpo del bucle donde contamos las intersecciones ... }.

En cada intersección en la barra i ma1 de abajo hacia arriba ma2 aumenta Intersection_UP, en cada intersección en la barra i ma1 de arriba hacia abajo ma2 aumenta Intersección_DN.

Al final del ciclo tenemos en dos variables el número de cruces hacia arriba y hacia abajo. Súmalos para obtener el número total de intersecciones

 
MK07:
Buenas tardes a todos.Dos MAs se cruzan muchas veces en el gráfico.Es posible contar el número de barras después de CADA cruce de MA.Después de la última funciona, pero después de CADA una no.¿Alguien sabe cómo hacerlo?

Es sencillo. Arregla el cruce y crea un contador. Cuando hay un cruce, el contador añade 1 barra por cada cruce. Cuando hay un cruce, otro contador empieza a contar.
 
alsu:

No nos entendemos, aparentemente

En general, se define la ubicación del problema, la variable estática.

Pero, ¿por qué una función con esta variable compilada en el mismo archivo con el indicador funciona sin problemas (la reinicialización es exitosa y todo funciona bien), pero cuando me dirijo a la misma función colocada en la biblioteca, tengo problemas?

¿Quizás hay algunas restricciones en el uso de ciertos tipos en las funciones de la biblioteca?

 
Hola?
 
polycomp:

En general, se define la ubicación del problema, la variable estática.

Pero, ¿por qué la función con esta variable, compilada en el mismo archivo con el indicador funciona sin problemas (la reinicialización es exitosa y todo funciona bien), pero cuando dirijo la misma función, colocada en la biblioteca, hay problemas?

¿Tal vez haya algunas restricciones en el uso de ciertos tipos en las funciones de la biblioteca?



No soy desarrollador y sólo puedo hacer conjeturas. Entonces, asumo que al reiniciar después de cambiar los parámetros ex4 no se descarga de la memoria, y por lo tanto en un nuevo inicio obtenemos la misma copia de la librería que antes, con toda la estática y sus antiguos valores.

En idea toda la estática del programa debe ser inicializada antes de llamar a init(). Pero la biblioteca ex4 sólo se carga inmediatamente en el momento de la primera llamada a la función de la biblioteca, por lo que ninguna estática de la biblioteca llega al montón común.

Visto así, la explicación es bastante lógica.

 

Aquí está la funciónStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

¿Por qué es necesario?

Según el libro de texto, devuelve el valor de un carácter como un número. Allí,"c" corresponde al valor 99. ¿Cómo puedo entenderlo? ¿Qué utilidad tiene esta función?

Así que devuelve un número... ...¿y qué hace?

Quiero aprender a trabajar con cadenas, así que me encontré con esta función. Por eso pregunto.

 
alsu:

No soy un desarrollador y sólo puedo especular. Entonces, asumo que durante la reinicialización después de los cambios de parámetros, ex4 no se descarga de la memoria, por lo que en el nuevo inicio obtenemos la misma copia de la biblioteca que antes, con toda la estática y sus antiguos valores.

En idea toda la estática del programa debe ser inicializada antes de llamar a init(). Pero la biblioteca ex4 sólo se carga inmediatamente en el momento de la primera llamada a la función de la biblioteca, por lo que ninguna estática de la biblioteca llega al montón común.

Visto así, la explicación es bastante lógica.


Gracias por la aclaración. Parece que es mejor no utilizar la estática en las bibliotecas.
 

Tengo en mi cabeza un array de 3000 valores del mismo tipo.

Pero no entiendo muy bien cómo inicializar un array unidimensional con estos valores.

No entiendo - ¿debo especificar los 3000 valores separados por coma en el operador de asignación al inicializar un array

int Mas_i[3000]= { (Oferta>1.2153)&&(Oferta<1.2160) , (Oferta>1.2156)&&(Oferta<1.2163) ...¿realmente necesito enumerar las 3000 expresiones?}

Por favor, denme una pista o díganme dónde leer. Parece que no encuentro una respuesta a esta pregunta en el tutorial de S.Kovalev..... o no lo entiendo.

Gracias.

 
hoz:

Aquí está la funciónStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

¿Por qué es necesario?

Según el libro de texto, devuelve el valor de un carácter como un número. Allí,"c" corresponde al valor 99. ¿Cómo puedo entenderlo? ¿Qué utilidad tiene esta función?

Así que devuelve un número... ...¿y qué hace?

Quiero aprender a trabajar con cadenas, así que me encontré con esta función. Por eso pregunto.


Para escribir en el gráfico (no confundir con el comentario) hay que codificar un código numérico. Si escribes 99, la letra "s" aparecerá en el gráfico. Todavía no lo he hecho, pero puedes encontrar cómo hacerlo todo en el Dock, y con qué fuente, tamaño, orientación del eje X e Y en píxeles, etc. Si eso es todo lo que te falta ya, hazlo, ¡pero te llevará mucho tiempo! Buena suerte.
Razón de la queja: