[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 366

 

¡Buenas tardes!

¿Puedes decirme cómo encontrar 3 máximos (o mínimos) en un gráfico para un periodo determinado, recordarlos y utilizarlos para cálculos posteriores?

O dame un enlace al código.

He buscado el código en el foro, pero no ha funcionado a través de la búsqueda.

Gracias.

 
LOA:

¡Buenas tardes!

¿Puedes decirme cómo encontrar 3 máximos (o mínimos) en un gráfico para un periodo determinado, recordarlos y utilizarlos para cálculos posteriores?

O dame un enlace al código.

He buscado el código en el foro, pero no ha funcionado a través de una búsqueda.

Gracias.


Por ejemplo, he establecido un período de un día en los Eurobucks. Abrir M15. Echa un vistazo a la captura de pantalla de abajo. Los límites del día se indican con líneas verticales rojas. El indicador fractal muestra que hay más de tres mínimos y máximos en este intervalo. Entonces, ¿cómo debería el código que busca averiguar cuál de estos extremos necesita?

 
LOA:

¡Buenas tardes!

¿Puedes decirme cómo encontrar 3 máximos (o mínimos) en un gráfico para un periodo determinado, recordarlos y utilizarlos para cálculos posteriores?

O dame un enlace al código.

He buscado el código en el foro, pero no ha funcionado a través de una búsqueda.

Gracias.

https://docs.mql4.com/ru/series/iHighest

https://docs.mql4.com/ru/series/iLowest
 

Vladimir y Vadim, ¡muchas gracias por vuestra respuesta!

Una máxima que encuentro...

1.

mas_UP[]//array de extremos superiores.

int index = iHighest(NULL,0,2,MODE_HIGH,20,i);
      double MAX = mas_UP[index];//первый максимум

2. o así (con fractales)

int size_up=ArrayRange(mas_UP,0);
      for (s=i;s<=size_up;s++);
      int index=ArrayMaximum(mas_UP);
      double MAX = UP[s];

Pero, ¿cómo proceder? Me resulta difícil (aún estoy aprendiendo)

Se me ocurre una forma de poner a cero el elemento que se encontró como máximo y luego volver a recorrer el mismo array - encontrará el segundo máximo, luego el tercero.....

if (MAX>0)
      int n=n+1; //счётчик экстремумов
      mas_UP[index]=0;

Pero no estoy seguro de que ese sea el caso.

 
LOA:

Vladimir y Vadim, ¡muchas gracias por vuestra respuesta!

Una máxima que encuentro...

1.

2. más o menos (con fractales)

Pero, ¿cómo proceder? Estoy perdido (todavía estoy aprendiendo).

Se me ocurre una forma de poner a cero un elemento que se encontró como máximo, y luego recorrer la misma matriz de nuevo - encontrar el segundo máximo, luego el tercero.....

Pero no estoy seguro de que ese sea el caso.


Entonces, ¿quieres los tres últimos máximos de un intervalo determinado, o algún otro máximo?
 
drknn:

Entonces, ¿quieres los tres últimos máximos de un intervalo determinado, o cualquier otro máximo?


Tres máximos en el período, no el último. O mejor dicho, no necesariamente la más reciente.

 
LOA:


Tres máximos en un período, no el último. O mejor dicho, no necesariamente los últimos.


Oh. Bueno, te voy a dar el reto completo.

Hay un intervalo de tiempo determinado. Se necesitan tres máximos de muestra de este intervalo.

Para resolver este problema necesitarás lo siguiente:

- Un algoritmo para reconocer los límites de un intervalo dado

- Un algoritmo para encontrar los máximos

- Un algoritmo para reconocer los máximos deseados a partir de los máximos encontrados.

P.D.

Como no se sabe de antemano qué máximos se necesitarán y cómo se identificarán exactamente los máximos, no se encontrará el código listo. Esto significa que la resolución de los problemas anteriores en secuencia le dará exactamente el código que necesita.

 
drknn:


Oh, vaya. Bueno, te voy a dar todo el problema.

Hay un intervalo de tiempo determinado. Se necesitan tres máximos de muestra de este intervalo.

Para resolver este problema necesitarás lo siguiente:

- Un algoritmo para reconocer los límites de un intervalo dado

- Un algoritmo para encontrar los máximos

- Un algoritmo para reconocer los máximos adecuados a partir de los máximos encontrados.


Un problema correctamente formulado es casi una solución. Gracias.

Con el primero puedo manejar, el segundo - también. Pero el último punto - honestamente no sé, pero voy a pensar.

int n=0;//счётчик максимумов
      if (MAX>0)
      int n=n+1;
      mas_UP[index]=0;

¿Es esta opción la idea correcta, o debería indagar en otra dirección, es decir

para poner a cero el elemento de la matriz, que se encontró como un máximo, y luego desplazarse a través de la misma matriz de nuevo - vamos a encontrar el segundo máximo, entonces el tercero.....

 
LOA:


Un problema correctamente formulado es casi una solución. Gracias.

Puedo lidiar con la primera, la segunda también. El último punto - sinceramente no lo sé, pero lo pensaré.

¿Esta es la idea correcta, o debo ir en una dirección diferente, es decir

poner a cero el elemento de la matriz, que se encontró como máximo, y luego desplazarse a través de la misma matriz de nuevo - vamos a encontrar el segundo máximo, entonces el tercero.....


No te interesa en absoluto el código en este momento - haz un algoritmo - ¿cómo debe ser exactamente el programa? De lo contrario, te estancarás. Cualquier programa es una tontería: necesita instrucciones precisas. Para ello, debemos saber exactamente qué debe hacer el programa. Y sólo entonces podemos elegir cómo ponerlo en el código del programa.
 
drknn:

Es posible que ahora no le interese el código, sino hacer un algoritmo, es decir, cómo debe hacerse el programa. De lo contrario, se estancará en el lugar. Cualquier programa es una tontería: necesita instrucciones precisas. Para ello, debemos saber exactamente qué debe hacer el programa. Y sólo entonces podemos elegir cómo ponerlo en el código del programa.

Bien. Tendremos el algoritmo mañana, porque ya son las dos y media de la mañana en San Petersburgo y estamos sin energía.
Razón de la queja: