Esta página responde:Em que estágio estes dados estão agora e o que vem depois?
Como ler este veredito: o motor olha para o momentum, não para o nível.
Uma pontuação de 6 significa duas coisas completamente diferentes, dependendo de ela ter acabado de subir de 2 ou de ter caído de 9 — o motor pega os últimos 3 pontos e calcula a inclinação recente
(valor atual − o terceiro valor a contar do fim) ÷ 2, e depois subtrai dela a inclinação de toda a série para obter a aceleração.
“Espaço restante” = 10 − valor atual: ele diz o quanto o valor está distante do topo da escala ±10, e não quantos pontos no tempo ainda faltam.
O estágio é decidido por apenas duas grandezas: em que faixa o valor atual cai (as cinco linhas em −8 / −4 / 0 / 5 / 8), e se a inclinação recente dentro dessa faixa é positiva ou negativa, e suficientemente inclinada.
analyze_single_trend (detecção de estágio de série única) — todas as 15 faixas de estágio, as cinco linhas divisórias −8/−4/0/5/8,
as subfaixas 0.5 / 1 / −0.5 / −1 dentro de cada faixa, as fórmulas de remaining_space e score, e a convenção de pegar os últimos 3 pontos para a inclinação.compute_main_line (precisa de 7 sublinhas ponderadas),
cross_validate (precisa de correlação par a par e de lead/lag) e a conclusão geral de predict_trend —
todos eles precisam de “7 cadeias × muitos pontos” como entrada, enquanto esta página tem uma única série.v*2−10 é copiado aqui tal e qual;
o status_label/status_color do banco (rompimento forte / deriva em nível baixo …) não tem fonte de dados nesta página, por isso não é exibido —
ele sempre foi uma convenção diferente do estágio do motor.round() do Python arredonda metade para par, e o pyRound() espelha isso aqui; veja o relatório de comparação no diretório de build./opt/curve_engine/app_v4.2.py, linhas 387-472, analyze_single_trend() (somente leitura; inalterado nesta rodada); o mapeamento de escala v*2-10 está na linha 205. Os números de linha dos limiares estão registrados na ficha de contrato /opt/contracts/curve_engine.md em “limiares / ponderações codificados em código”: as cinco linhas divisórias −8/−4/0/5/8 = 398/402/411/420/433; as inclinações dentro da faixa 0.5/1/−0.5/−1 = 412/421/438/447; remaining = 10 - current = 460; score=(current+10)/20*100 = 471; a inclinação dos últimos 3 pontos = 394-395.2.1,2.8,3.5,4.1,4.9,5.6,6.4,7.2,7.9 → o valor atual 7.9 cai em [5,8) e a inclinação dos últimos 3 pontos é (7.9−6.4)/2 = +0.75 > 0 → deve retornar “Aproximando-se do pico”; o exemplo “Caindo de forma constante” 9.2,8.6,7.8,7.1,6.3,5.4,4.6,3.7,2.9 → o valor atual 2.9 cai em [0,5) e a inclinação é (2.9−4.6)/2 = −0.85 < 0 → deve retornar “Crescimento desacelerando”. Alimentar os mesmos números pela cadeia de if/else em app_v4.2.py 387-472 deve dar exatamente o mesmo resultado, palavra por palavra.
As 15 faixas de estágio do diagnóstico de curva, com as suas condições de decisão e o texto literal da perspectiva
Converte entre si as pontuações de 0~10 e a escala −10~+10 do motor
/opt/slices_build/build.py a partir da especificação /_shared/slices/curve-diagnose.json — para alterar esta página, edite a especificação e rode o gerador de novo; nunca edite o HTML à mão.