Esta página responde:¿En qué etapa están estos datos ahora y qué viene después?
Cómo leer este veredicto: el motor observa el impulso, no el nivel.
Una puntuación de 6 significa dos cosas completamente distintas según si acaba de subir desde 2 o ha vuelto a caer desde 9 — el motor toma los últimos 3 puntos y calcula la pendiente reciente
(valor actual − el tercer valor desde el final) ÷ 2, y luego le resta la pendiente de toda la serie para obtener la aceleración.
«Margen restante» = 10 − valor actual: indica a qué distancia está el valor de la cima de la escala ±10, no cuántos puntos temporales quedan.
La etapa se decide con solo dos cantidades: en qué banda cae el valor actual (las cinco líneas en −8 / −4 / 0 / 5 / 8) y si la pendiente reciente dentro de esa banda es positiva o negativa, y lo bastante pronunciada.
analyze_single_trend (detección de etapa de una sola serie) — las 15 bandas de etapa, las cinco líneas divisorias −8/−4/0/5/8,
las subbandas 0.5 / 1 / −0.5 / −1 dentro de cada banda, las fórmulas de remaining_space y score, y la convención de tomar los últimos 3 puntos para la pendiente.compute_main_line (necesita 7 sublíneas ponderadas),
cross_validate (necesita correlación por pares y adelanto/retraso) y la conclusión global de predict_trend —
todas ellas necesitan «7 cadenas × muchos puntos» como entrada, mientras que esta página tiene una sola serie.v*2−10 se copia literalmente aquí;
el status_label/status_color de la base de datos (ruptura fuerte / a la deriva en un nivel bajo …) no tiene fuente de datos en esta página, así que no se muestra —
siempre fue una convención distinta de la etapa del motor.round() de Python redondea al par más cercano, y pyRound() lo replica aquí; véase el informe de comparación en el directorio de compilación./opt/curve_engine/app_v4.2.py, líneas 387-472, analyze_single_trend() (solo lectura; sin cambios en esta ronda); la asignación de escala v*2-10 está en la línea 205. Los números de línea de los umbrales están registrados en la tarjeta de contrato /opt/contracts/curve_engine.md bajo «umbrales/pesos codificados de forma fija»: las cinco líneas divisorias −8/−4/0/5/8 = 398/402/411/420/433; las pendientes dentro de banda 0.5/1/−0.5/−1 = 412/421/438/447; remaining = 10 - current = 460; score=(current+10)/20*100 = 471; la pendiente de los últimos 3 puntos = 394-395.2.1,2.8,3.5,4.1,4.9,5.6,6.4,7.2,7.9 → el valor actual 7.9 cae en [5,8) y la pendiente de los últimos 3 puntos es (7.9−6.4)/2 = +0.75 > 0 → debería devolver «Cerca del pico»; el ejemplo «Bajada constante» 9.2,8.6,7.8,7.1,6.3,5.4,4.6,3.7,2.9 → el valor actual 2.9 cae en [0,5) y la pendiente es (2.9−4.6)/2 = −0.85 < 0 → debería devolver «Crecimiento desacelerando». Introducir los mismos números en la cadena if/else de app_v4.2.py 387-472 debería dar palabra por palabra el mismo resultado.
Las 15 bandas de etapa del diagnóstico de curva, con sus condiciones de decisión y el texto literal de su perspectiva
Convierte entre sí las puntuaciones de 0~10 y la escala −10~+10 del motor
/opt/slices_build/build.py a partir de la especificación /_shared/slices/curve-diagnose.json — para cambiar esta página, edita la especificación y vuelve a ejecutar el generador; nunca edites el HTML a mano.