Эта страница отвечает:На какой стадии эти данные сейчас и что будет дальше?
Как читать этот вердикт: движок смотрит на динамику, а не на уровень.
Оценка 6 означает две совершенно разные вещи в зависимости от того, поднялась ли она только что с 2 или упала с 9 — движок берёт последние 3 точки и вычисляет недавний наклон
(текущее значение − третье с конца значение) ÷ 2, затем вычитает из него наклон по всему ряду и получает ускорение.
«Оставшийся запас» = 10 − текущее значение: он говорит, насколько значение далеко от вершины шкалы ±10, а не сколько временных точек осталось.
Стадия определяется всего двумя величинами: в какой диапазон попадает текущее значение (пять линий на −8 / −4 / 0 / 5 / 8) и положителен ли недавний наклон внутри этого диапазона и достаточно ли он крут.
analyze_single_trend (определение стадии для одного ряда) — все 15 стадийных диапазонов, пять разделяющих линий −8/−4/0/5/8,
поддиапазоны 0.5 / 1 / −0.5 / −1 внутри каждого диапазона, формулы remaining_space и score и соглашение брать последние 3 точки для наклона.compute_main_line (нужны 7 взвешенных подлиний),
cross_validate (нужны попарная корреляция и опережение/запаздывание) и общий вывод predict_trend —
всем им на вход нужны «7 цепочек × много точек», а на этой странице один ряд.v*2−10 здесь скопирован дословно;
у базы данных есть status_label/status_color (сильный прорыв / дрейф на низком уровне …), но на этой странице для них нет источника данных, поэтому они не отображаются —
это всегда было другое соглашение, чем стадия движка.round() округляет половину к чётному, и pyRound() повторяет это здесь; см. отчёт о сравнении в каталоге сборки./opt/curve_engine/app_v4.2.py, строки 387-472, analyze_single_trend() (только чтение; в этом раунде без изменений); пересчёт шкалы v*2-10 находится в строке 205. Номера строк порогов зарегистрированы в карточке контракта /opt/contracts/curve_engine.md в разделе «жёстко заданные пороги / веса»: пять разделяющих линий −8/−4/0/5/8 = 398/402/411/420/433; наклоны внутри диапазона 0.5/1/−0.5/−1 = 412/421/438/447; remaining = 10 - current = 460; score=(current+10)/20*100 = 471; наклон по последним 3 точкам = 394-395.2.1,2.8,3.5,4.1,4.9,5.6,6.4,7.2,7.9 → текущее значение 7.9 попадает в [5,8) и наклон по последним 3 точкам равен (7.9−6.4)/2 = +0.75 > 0 → должно вернуться «Приближение к пику»; пример «Падает стабильно» 9.2,8.6,7.8,7.1,6.3,5.4,4.6,3.7,2.9 → текущее значение 2.9 попадает в [0,5) и наклон равен (2.9−4.6)/2 = −0.85 < 0 → должно вернуться «Рост замедляется». Пропуск тех же чисел через цепочку if/else в app_v4.2.py 387-472 должен дать слово в слово тот же результат.
15 стадийных диапазонов диагностики кривой, их условия определения и дословный текст прогноза
Пересчитывает оценки 0~10 и шкалу движка −10~+10 друг в друга
/opt/slices_build/build.py по спецификации /_shared/slices/curve-diagnose.json — чтобы изменить эту страницу, правьте спецификацию и перезапустите генератор; никогда не правьте HTML вручную.