Lo que devuelven las funciones Lowest y Highest - página 3

 
Candidato, trataré de describir el funcionamiento errático .

Una opción. Hay otros.
Tenemos el primer rayo. Para simplificar - viniendo de la barra de cero. La barra de cero tiene un máximo y un mínimo. El precio se mueve dentro de la barra sin cambiar su extremo. Como los extremos no cambian, el primer rayo debería quedarse quieto y no moverse. Pero no es así. El primer rayo se sacude. Cambia su posición. Esto es simplemente una descripción de la manifestación externa de la inestabilidad. Si el algoritmo funciona de forma estable y los parámetros del mercado (máximo y mínimo de la última barra), de los que depende la operación de zigzag, no cambian, el primer rayo no debería fallar. He luchado con este problema por mi cuenta. Pero las peculiaridades advertidas de las funciones de búsqueda me han obligado a acudir al foro.
========================
Cuando movemos la ventana (shift,shift+ExtDepth) mientras calculamos el indicador, la aparición de un nuevo extremo puede estar relacionada con un nuevo precio o con que el antiguo extremo haya salido de la ventana. - Sería mejor especificarlo explícitamente. Para que quede claro. En la descripción de la lengua. Para no explorar las posibilidades ocultas de la lengua.

Para ello, la línea if(highpos!=shift) val=0,0; . No entiendo cómo se hace esto en el código estándar. A juzgar por el hecho de que los extremos colgantes desaparecen en mi variante, o no se hace correctamente o no se hace en absoluto. - Mi solución a este problema es diferente: si (Alto[shift]=val) ZigZagBuffer[shift]=val; y si (Bajo[shift]=val) ZigZagBuffer[shift]=val;
Pero en sentido es lo mismo. Pero no resuelve todos los problemas. Es la forma de combatir la consecuencia y no la causa. Trató de luchar contra la consecuencia de la misma manera. Pero en el primer rayo no funciona. Lo que pasa es que el algoritmo del zigzag, digamos, no se disecciona. Permítanme explicar esto. El cálculo se realiza sobre todo el historial. Y si corregimos alguna parte, el tratamiento queda incompleto cerca de la barra de cero, por así decirlo. No encuentro las palabras adecuadas. Por lo tanto, este carácter incompleto cerca de la barra de cero pone de manifiesto el problema de identificar correctamente los extremos.

Intenté ajustar los parámetros de la ventana (shift, shift+ExtDepth) no hace mucho tiempo. El otro día también estuve experimentando con la ventana. Pero hasta ahora sin resultado.
 
La cuestión es que el algoritmo en zig-zag, digamos, no se disecciona. Permítanme explicar esto. El cálculo se realiza sobre todo el historial. Y si corregimos alguna parte, el tratamiento sigue siendo incompleto cerca de la barra de cero, por así decirlo. No encuentro las palabras adecuadas. Por lo tanto, este carácter incompleto cerca de la barra de cero pone de manifiesto el problema de identificar correctamente los extremos. <br/ translate="no">.


Este problema es conocido y se arregla teóricamente (tengo el algoritmo en la cabeza hace tiempo). De todos modos, si no aparece ninguna otra solución, optimizaré el algoritmo Zigzag. Se realiza de la siguiente manera:
1) el primer recorrido se hace sobre toda la historia como en el algoritmo actual
2) en cada tick desde la barra cero hasta el fondo de la historia, se buscan dos extremos del Zigzag, el último extremo se mata a la fuerza.
3) a partir de la última (ahora la última) vuelve a seguir el procedimiento estándar de cálculo en zigzag.
4) si el extremo actual (la cola del ZigZag) puede ser teóricamente un extremo (tenemos el Máximo desde el último Mínimo o viceversa), también se convierte en un extremo.
5) con una nueva garrapata de nuevo desde el punto 2)
 
nen:
Pero no sucedió. El primer rayo se mueve. Cambia de posición.

Todavía no he visto esto. ¿Deja un extremo de la viga fijo? Y cuál. Si está en la barra de cero, tal vez habría que mirar más de cerca las condiciones en las que se comparan las variables de tipo doble...

Cuando movemos la ventana mientras calculamos el indicador (shift,shift+ExtDepth), la aparición de un nuevo extremo puede estar relacionada con el nuevo precio o con que el antiguo extremo haya salido de la ventana. - Sería mejor especificarlo explícitamente. Para que quede claro. En la descripción de la lengua.

Esto me parece que se refiere al algoritmo más que al lenguaje. Por lo tanto, un recordatorio de que las funciones que estamos discutiendo están realmente buscando el valor máximo (mínimo) del precio sobre el intervalo, en lugar del extremo, sería apropiado en un libro o en algunos comentarios.
Para hacer esto en mi inserto la línea if(highpos!=shift) val=0.0; . No entiendo cómo se hace esto en el código estándar. A juzgar por el hecho de que los extremos colgantes faltan en mi variante, o se hace incorrectamente o no se hace en absoluto. - Mi solución a este problema es diferente: si (High[shift]=val) ZigZagBuffer[shift]=val; y si (Low[shift]=val) ZigZagBuffer[shift]=val;
Me gusta más mi versión :). Funciona con números enteros. En tal comparación de dobles (como Low[shift]==val) sólo pueden aparecer latidos.
 
Rosh, tengo la misma opción. En mi cabeza. Hay algunos puntos vagos que me impiden realizarlo. Digámoslo así. El punto 4) está algo fuera del algoritmo. Ya es otro algoritmo. Y cuando la sección procesada en el punto 4) esté disponible para la historia, su procesamiento con el algoritmo a partir del punto 1) puede llevar a dibujar otros extremos. Es decir, el tiempo real y la historia serán diferentes. Esto, en mi opinión, no es aceptable.
 
Rosh Tengo la misma opción. En mi cabeza. Hay algunos puntos vagos que me impiden realizarlo. Digámoslo así. El punto 4) está algo fuera del algoritmo. Este es un algoritmo diferente. Y cuando la sección procesada en el punto 4) esté disponible para la historia, su procesamiento con el algoritmo a partir del punto 1) puede llevar a dibujar otros extremos. Es decir, el tiempo real y la historia serán diferentes. Esto, en mi opinión, no es aceptable.


punto 4) en el siguiente tick se procesa con un archivo a través del punto 2)
 
Дело в том, что алгоритм зигзага, скажем так, не расчленяется. Поясню это. Просчет проводится по всей истории. И если мы в какой-то части исправим ошибки, то в районе нулевого бара процесс обработки остается, скажем так, незавершенным. Затрудняюсь подобрать правильные слова. Так вот эта незавершенность в районе нулевого бара и вытаскивает на свет проблему правильного поиска экстремумов.


Este problema es conocido, y se soluciona teóricamente (hace tiempo que hay un algoritmo en mente).
¿Hay una descripción verbal de lo que debe hacer el zigzag? Algo así como una especificación técnica.
 
Todavía no he visto esto. ¿Deja un extremo de la viga unido? Y cuál. Si es en la barra de cero, entonces tal vez habría que mirar más de cerca las condiciones en las que se comparan las variables de tipo doble?
El asunto es que estoy probando el indicador que utiliza el zigzag en condiciones muy estrictas. En minutos y con parámetros 2-1-1. ¿Cuál es el objetivo de estas pruebas? Este tipo de pruebas revela todos los defectos ocultos con bastante rapidez. Además, se desea que el indicador funcione en todos los plazos sin excepción. El mercado es una cosa fractal. Hay mucha gente que comercia con los minutos. ¿Por qué deberíamos privarles de la oportunidad de trabajar con la herramienta conocida en pequeños plazos?

Me gusta más mi versión). Funciona con números enteros. Al realizar dicha comparación de dobles (de tipo Low[shift]==val) puede provocar latidos.
Hasta ahora no he encontrado ninguna dificultad para trabajar con el doble. Estos números se almacenan en la memoria sin cambios. Pero mi comparación toma valores de una sola celda de memoria. Si hay algún problema en este lugar, es una cuestión de hardware (es decir, de ordenador). Hay que hacer algo con el hardware.

Me parece que esto no se refiere al lenguaje, sino al algoritmo. Por lo tanto, un recordatorio de que las funciones que estamos discutiendo están realmente buscando el valor máximo (mínimo) del precio sobre el intervalo, en lugar de un extremo, sería apropiado para un libro o algunos comentarios.

Sólo lo llamé un extremo. En realidad es el máximo y el mínimo del intervalo elegido. Es una pronunciación larga. Pero el significado es el mismo.
 
¿Hay una descripción verbal de lo que debe hacer el zigzag? ¿Algo así como un pliego de condiciones?
Lo hubo durante mucho tiempo en CodeBase.mql4.com. Pero esa descripción es muy difícil de entender. Y contradictorio. Durante el verano, creo que Slava afinó el código del zigzag. Después de eso, sólo quedó una parte de la descripción anterior en el sitio.
 
nen:
Trabajar con el doble no ha causado ninguna dificultad hasta ahora. Estos números se almacenan en la memoria sin cambios. Y mi comparación toma valores de una sola posición de memoria. Si se produce un problema en este caso, es una cuestión de hardware: el ordenador. Hay que hacer algo con el hardware.
Bueno, me guío por el código de la rama. Y calcula val cada vez. Es más seguro no utilizar == cuando se comparan los dou
 
Me baso en el código de la rama. Y calcula val cada vez. Así es, lo hace. Se encuentra el número de una celda. De esta celda (serie temporal) se toma el valor de la barra máxima o mínima. Se considera que el máximo se ha encontrado en esta barra. Este valor se coloca en la memoria intermedia del indicador con el número encontrado. El máximo del indicador debe corresponder al máximo de la barra. En mi código, el máximo también se toma del array (timeseries) con el mismo número encontrado y se compara con el valor de val. Se comprueba si estamos haciendo lo correcto: ponemos el número val en el buffer con este número. También debe ser igual al máximo de la barra. La comparación de los números tomados del mismo lugar es bastante correcta.