Diagnóstico de curva

Idioma English Español Português العربية Русский 中文

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.

O que esta página porta e o que ela não porta (dito com clareza)
· Portado: 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.
· Não portado (não é necessário nesta página, e não por desalinhamento): 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.
· Diferença de convenção: na versão em Python, uma sublinha vem de uma das 7 colunas do banco de dados, e o mapeamento de escala 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.
· Ponto flutuante: o 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.

Defeitos conhecidos (medidos, ditos com clareza)
· A faixa “Mergulho” nunca pode disparar dentro do intervalo 0–10. A condição dela equivale a “o terceiro ponto a contar do fim > valor atual + 2” e, depois do mapeamento, o teto é 10, então ela é inalcançável. Uma varredura exaustiva de 0–10 em passos de 0.1 sobre todas as triplas (1,030,301 combinações) produziu 0 ocorrências; a inclinação negativa mais íngreme dentro do intervalo sempre cai apenas em “Caindo do pico”.
· Apenas entrada fora do intervalo (valores brutos > 10 — montantes, contagens, qualquer coisa numa escala muito maior) pode produzir um “Mergulho”.
· Portanto: se você estiver colando montantes ou contagens, normalize-os para 0–10 antes de diagnosticar, caso contrário o comportamento muda e o motor não vai te avisar. Por enquanto, leia essa faixa como um alarme de valor fora do intervalo.

[Seção de evidências · onde cada número pode ser conferido]
(1) Fonte: a máquina de portabilidade de algoritmos /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) Três categorias
· [Verificável] As 15 faixas de estágio, as cinco linhas divisórias, as subfaixas de inclinação dentro da faixa, as fórmulas de remaining_space e score, e a convenção da inclinação dos últimos 3 pontos — cada uma bate palavra por palavra naqueles números de linha do app_v4.2.py.
· [Convenção de exibição desta página] O gráfico de linha em SVG (escala ±10, markLine, marcadores de ponto) é desenhado por esta página e não é saída do código-fonte; o motor só emite campos numéricos.
· [Nenhuma fonte encontrada] Por que as cinco linhas ficam em −8 / −4 / 0 / 5 / 8 não tem nota de procedência no código-fonte do motor nem na ficha de contrato (a ficha registra os números de linha, mas não a origem delas).
(3) Como verificar você mesmo: rode o exemplo “Subindo de forma constante” desta página 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.

O que você pode fazer em seguida

Atlas de estágios

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

Por que este link: Esta página produz trend_verdict, e este slice usa trend_verdict como entrada

Conversão de escalas

Converte entre si as pontuações de 0~10 e a escala −10~+10 do motor

Por que este link: Continuação escolhida manualmente (score-map)
Gerado por /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.