# Зона розвороту ±0.15 %

**Пара:** BTC_USDT + 5 монет (ETH, SOL, XRP, BNB, DOGE)
**Клас:** `клас210х10-1х7д/д` (`class210x10m1x7dd`), етап 2 — усі класи проєкту
**Вкладка:** [`/zone15`](http://localhost:8080/zone15)

## Ціль

Зігзаг **2.3 %** стоїть на **ема10** ціни події — той самий, що в
дослідженнях 21–26. Біля кожного півота ціна деякий час тримається його
рівня, і саме цей відрізок тут називається **зоною**:

    зона півота p = суцільний відрізок подій навколо p,
                    де |ема / ема[p] − 1| ≤ 0.0015

Ліва межа — перша подія ліворуч, де ема відійшла більше ніж на 0.15 %,
права — так само праворуч. Зони сусідніх півотів не перетинаються: між
двома півотами ціна проходить щонайменше 2.3 %, а зона обмежена 0.15 %.

Питання одне: **чи є ця зона зоною розвороту** — чи відрізняє
градієнтний бустинг події зони від усіх інших подій ряду, маючи тільки
числа класу, і при якій довжині пачки це виходить найкраще.

## Дані

`data/datasets/<PAIR>/<клас>/{train,val,test}.npz` — шість монет. Подія —
**210 с**. Ема й півоти рахуються з **власної** ціни класу (`price_open`),
тому кожен клас міряється на своїй сітці подій.

Беруться **всі** файли класу — `train.npz`, `val.npz` і `test.npz`.
Розбиття класу тут ні до чого: у старих класів воно випадкове й
перемішане в часі, а замір ділить ряд заново **за датою**:

    подія з 2026-08-14 і до 2026-09-07 00:00 UTC -> валідація
    усе інше                                     -> тест

Валідація — свіже вікно, якого модель не бачила; тест — увесь ряд до
нього, на ньому модель і вчиться.

Ряд датасетів: **2026-02-14 … 2026-09-06** (остання повна доба перед
правим краєм). Межа `END` живе в
[`rules/scripts/build_class210x10x7dc.py`](../../rules/scripts/build_class210x10x7dc.py)
і спільна для всього проєкту.

Зони на `клас210х10-1х7д/д`:

| Монета | Подій | Півотів | Зон | Подій у зонах | Частка ряду | Медіана зони | Найкоротша … найдовша |
| ------ | ----- | ------- | --- | ------------- | ----------- | ------------ | --------------------- |
| BTC_USDT | 70 647 | 94 | 94 | 1 407 | 2.0 % | 12.0 | 1 … 55 |
| ETH_USDT | 71 451 | 129 | 129 | 1 628 | 2.3 % | 10.0 | 2 … 61 |
| SOL_USDT | 70 944 | 140 | 140 | 1 595 | 2.2 % | 10.0 | 2 … 46 |
| XRP_USDT | 64 261 | 126 | 126 | 1 483 | 2.3 % | 10.5 | 1 … 33 |
| BNB_USDT | 71 248 | 96 | 96 | 1 310 | 1.8 % | 12.0 | 1 … 53 |
| DOGE_USDT | 64 260 | 133 | 133 | 1 503 | 2.3 % | 12.0 | 1 … 43 |

Разом **718 зон** на 412 811 подій, медіана довжини **11 подій** (≈ 38 хв),
чверть 7, три чверті 16, найдовша 61. Зона займає близько **2 %** ряду —
це і є база, з якою порівнюється видача моделі.

## План роботи

1. Порахувати зону кожного півота і когорту кожної події ряду.
2. Поставити питання на **кожній події** всіх шести монет: пачка з `K`
   подій, що закінчується на цій події, — чи лежить вона в зоні.
3. Навчити градієнтний бустинг на `K = 1, 2, 3, 4 …` — доки пачка ще
   вміщається в зону.
4. Зміряти видачу на `val` і сказати, чи є зона зоною розвороту.
5. Повторити той самий замір **на кожному класі проєкту** і подивитись,
   чи залежить відповідь від того, яким класом описана подія.
6. Показати видачу сильних класів **рядом на валідації**: ціна, зона і сирий
   сигнал моделі на кожній події.

## Приклад і мітка

Пачка з `K` подій підряд закінчується на події `e`:

    y[e] = 1, якщо всі K подій пачки лежать в одній зоні

Зона — суцільний відрізок, тому досить порівняти її номер на першій і на
останній події пачки. При `K = 1` мітка збігається з «подія в зоні».

Вхід моделі — **сирі числа класу** цих `K` подій, без жодної згортки.
`NaN` і нескінченності йдуть нулями.

Питання ставиться на кожній події ряду, без відбору: ні за суцільністю
часу, ні за наявністю `NaN`. Пачки, всередині яких є пропуск часу,
лишаються в замірі й полічені окремо (`gaps`) — при `K = 11` їх 24 201 з
412 811.

## Довжина пачки

`K` росте `1, 2, 3, 4 …` рівно доти, доки пачка ще вміщається в зону.
Стеля — **медіана довжини зон** цього класу: на ній пачка вміщається
щонайменше в половину зон.

| Подій у пачці | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| ------------- | - | - | - | - | - | - | - | - | - | -- | -- |
| Зон вміщає | 718 | 714 | 707 | 687 | 657 | 608 | 578 | 530 | 482 | 414 | 362 |
| Частка зон | 100 % | 99 % | 98 % | 96 % | 92 % | 85 % | 80 % | 74 % | 67 % | 58 % | 50 % |

## Навчання

| Що | Як |
| -- | -- |
| Модель | `HistGradientBoostingClassifier` |
| Ручки | 200 ітерацій, 31 листок, крок 0.1, `class_weight="balanced"` |
| Seed | 0 |
| Розбиття | приклад цілком по один бік межі: **валідація** — перша подія пачки від `CUT` і остання до `END`, **тест** — усе інше |
| Навчання | усі позитивні пачки тесту і кожна **четверта** негативна: 94 897 рядків із 356 357 при `K = 1` |
| Видача | на **кожній** події валідації — 56 454 пачки, з них 1 191 у зоні |

Проріджування негативних торкається тільки навчання: замір на валідації
йде по всіх подіях підряд.

## Скрипти

| Що | Скрипт |
| -- | ------ |
| Зони, пачки, навчання і замір одного класу | [`scripts/zone_packs.py`](scripts/zone_packs.py) |
| Той самий замір на всіх класах проєкту | [`scripts/zone_classes.py`](scripts/zone_classes.py) |
| Ряд val: ціна, зона і сирий сигнал моделі | [`scripts/zone_series.py`](scripts/zone_series.py) |

```bash
python3 research/27-pivot-zone-015/scripts/zone_packs.py
python3 research/27-pivot-zone-015/scripts/zone_packs.py --max-k 4
python3 research/27-pivot-zone-015/scripts/zone_packs.py --class class210x10x9
python3 research/27-pivot-zone-015/scripts/zone_classes.py
python3 research/27-pivot-zone-015/scripts/zone_series.py
python3 research/27-pivot-zone-015/scripts/zone_series.py --auc 0.6
```

Вихід: [`results/zone_packs.json`](results/zone_packs.json),
[`results/zone_classes.json`](results/zone_classes.json),
[`results/zone_series.json`](results/zone_series.json) і ряд кожної
монети — `results/series_<клас>_<PAIR>.json`.

Тести: [`tests/test_zone15.py`](../../tests/test_zone15.py),
[`tests/test_dashboard.py`](../../tests/test_dashboard.py) → `TestZone15`,
`TestZone15Markup`.

## Вкладка `/zone15`

| Блок | Ендпоінт | Скрипт |
| ---- | -------- | ------ |
| Зона ±0.15 % на ряді монет і скільки зон вміщає пачку | `/api/zone15` | [`scripts/zone_packs.py`](scripts/zone_packs.py) |
| Градієнтний бустинг: рядок на кожну довжину пачки | там само | там само |
| Видача обраної довжини: монета за монетою і крива повноти | там само | там само |
| Усі класи проєкту: рядок на клас і таблиця обраного класу | `/api/zone15/classes` | [`scripts/zone_classes.py`](scripts/zone_classes.py) |
| Видача на валідації рядом: ціна, зона, сигнал і смуги порога | `/api/zone15/series`, `/api/zone15/series/<клас>/<PAIR>` | [`scripts/zone_series.py`](scripts/zone_series.py) |

## Етап 1. Чи впізнає бустинг зону розвороту — `підтверджено`, 2026-09-29

Видача на валідації (14.08 … 07.09), усі шість монет разом. `база` —
частка пачок у зоні, `точність` і `до бази` — при повноті **0.2**.

| Подій у пачці | Чисел на вхід | Пачок валідації | З них у зоні | База | AUC | AP | Точність | До бази | Сигналів на добу |
| ------------- | ------------- | --------- | ------------ | ---- | --- | -- | -------- | ------- | ---------------- |
| 1 | 63 | 56 454 | 1 191 | 2.11 % | 0.642 | 0.032 | 3.42 % | ×1.62 | 51.0 |
| 2 | 126 | 56 448 | 1 080 | 1.91 % | 0.640 | 0.028 | 3.04 % | ×1.59 | 51.7 |
| 3 | 189 | 56 442 | 970 | 1.72 % | 0.622 | 0.023 | 2.28 % | ×1.33 | 62.0 |
| 4 | 252 | 56 436 | 864 | 1.53 % | 0.615 | 0.020 | 1.97 % | ×1.28 | 64.2 |
| 5 | 315 | 56 430 | 762 | 1.35 % | 0.613 | 0.017 | 1.63 % | ×1.21 | 68.3 |
| 6 | 378 | 56 424 | 669 | 1.19 % | 0.616 | 0.015 | 1.53 % | ×1.29 | 64.0 |
| 7 | 441 | 56 418 | 586 | 1.04 % | 0.611 | 0.014 | 1.42 % | ×1.37 | 60.4 |
| 8 | 504 | 56 412 | 505 | 0.90 % | 0.636 | 0.014 | 1.55 % | ×1.73 | 47.6 |
| 9 | 567 | 56 406 | 433 | 0.77 % | 0.640 | 0.012 | 1.20 % | ×1.57 | 52.7 |
| 10 | 630 | 56 400 | 372 | 0.66 % | 0.624 | 0.010 | 1.14 % | ×1.72 | 48.2 |
| 11 | 693 | 56 394 | 319 | 0.57 % | **0.655** | 0.010 | 1.23 % | ×2.18 | 37.8 |

Крива повноти на `K = 11` — найкращій довжині за AUC:

| Повнота | Спіймано | Хибних | Точність | До бази | Сигналів на добу |
| ------- | -------- | ------ | -------- | ------- | ---------------- |
| 0.05 | 16 | 1 496 | 1.06 % | ×1.87 | 11.0 |
| 0.10 | 32 | 2 167 | 1.46 % | ×2.57 | 16.0 |
| 0.20 | 64 | 5 122 | 1.23 % | ×2.18 | 37.8 |
| 0.30 | 96 | 8 665 | 1.10 % | ×1.94 | 63.9 |
| 0.50 | 160 | 16 534 | 0.96 % | ×1.69 | 121.8 |

Монета за монетою, `K = 11`:

| Монета | Пачок валідації | У зоні | База | AUC |
| ------ | --------- | ------ | ---- | --- |
| BTC_USDT | 9 402 | 73 | 0.78 % | 0.607 |
| ETH_USDT | 9 398 | 55 | 0.59 % | 0.711 |
| SOL_USDT | 9 399 | 44 | 0.47 % | 0.709 |
| XRP_USDT | 9 398 | 20 | 0.21 % | 0.722 |
| BNB_USDT | 9 399 | 34 | 0.36 % | 0.719 |
| DOGE_USDT | 9 398 | 93 | 0.99 % | 0.608 |

### Що з цього видно

1. **Зона впізнається, але слабо.** AUC на невидимому часі тримається
   між **0.61 і 0.66** на всіх довжинах пачки: сигнал у класі є, і він
   стабільний — жодна довжина не падає до 0.5.
2. **Довжина пачки майже нічого не додає.** Одна подія дає 0.642,
   одинадцять — 0.655. Одинадцять подій — це в 11 разів більше чисел на
   вхід (693 проти 63) заради +0.013 AUC.
3. **Точність лишається низькою.** База зони — 2.1 %, при повноті 0.2
   точність 3.4 % на `K = 1` і 1.2 % на `K = 11`. Виграш до бази —
   від ×1.2 до ×2.2, і кожен сигнал коштує десятків хибних на добу.
4. **Довша пачка ріже саму мітку.** Зона в медіані 11 подій, тому пачка
   з 11 подій вміщається лише в половину зон: у `val` з 1 191 події зони
   лишається 319 позитивних пачок.
5. **Монети відповідають по-різному.** На `K = 11` ETH, SOL, XRP і BNB
   дають 0.71–0.72, BTC і DOGE — 0.61. При цьому саме в BTC і DOGE
   найбільше подій зони, тому спільна AUC ближча до їхньої.

Відповідь на питання етапу: **зона ±0.15 % — це зона розвороту лише
статистично**. Модель відрізняє її від решти ряду краще за монетку, але
на робочій точці з цього виходить один влучний сигнал на десятки хибних.

## Етап 2. Те саме на всіх класах проєкту — `підтверджено`, 2026-09-29

Зона, мітка, розбиття, грід довжин пачки, модель і її ручки — ті самі,
що в етапі 1. Міняється тільки **клас**.

Клас, у якого немає побудованого датасету жодної з шести монет,
пропускається: `клас210х8` живе всередині пайплайна і свого датасету не
має. Решта 17 класів проєкту заміряні.

Рядок — найкраща довжина пачки цього класу за AUC на валідації;
`до бази` — при повноті 0.2.

| Клас | Подія | Монет | Подій | Зон | Медіана зони | Краще K | Чисел на вхід | валідація: пачок / у зоні | База | AUC | AP | До бази |
| ---- | ----- | ----- | ----- | --- | ------------ | ------- | ------------- | ------------------- | ---- | --- | -- | ------- |
| **клас210х10х7** | 10 × 7 | 6 | 412 811 | 718 | 11 | 11 | 770 | 56 394 / 319 | 0.57 % | **0.701** | 0.020 | ×2.91 |
| **клас210х10х9** | 10 × 9 | 6 | 412 811 | 718 | 11 | 11 | 990 | 56 394 / 319 | 0.57 % | **0.687** | 0.013 | ×2.51 |
| клас210х10-1х7д/д | 9 × 7 | 6 | 412 811 | 718 | 11 | 11 | 693 | 56 394 / 319 | 0.57 % | 0.655 | 0.010 | ×2.18 |
| клас210х10х7дц | 10 × 7 | 6 | 412 811 | 718 | 11 | 1 | 70 | 56 454 / 1 191 | 2.11 % | 0.645 | 0.034 | ×1.78 |
| клас210х10-1х7дц | 9 × 7 | 6 | 412 811 | 718 | 11 | 1 | 63 | 56 454 / 1 191 | 2.11 % | 0.640 | 0.033 | ×1.77 |
| клас210х10-1х2д | 9 × 2 | 6 | 412 811 | 718 | 11 | 1 | 18 | 56 454 / 1 191 | 2.11 % | 0.629 | 0.034 | ×1.98 |
| клас210х10-1х3+1дц | 9 × 4 | 6 | 412 811 | 718 | 11 | 2 | 72 | 56 448 / 1 080 | 1.91 % | 0.589 | 0.024 | ×1.35 |
| клас210х14х4 | 15 × 4 | 6 | 97 903 | 486 | 6 | 1 | 60 | 13 843 / 484 | 3.50 % | 0.584 | 0.043 | ×1.36 |
| клас210х14х4ц | 15 × 4 | 6 | 97 903 | 486 | 6 | 1 | 60 | 13 843 / 484 | 3.50 % | 0.584 | 0.044 | ×1.36 |
| клас210х14х3 | 15 × 3 | 6 | 97 903 | 486 | 6 | 1 | 45 | 13 843 / 484 | 3.50 % | 0.579 | 0.044 | ×1.35 |
| клас210х14х2 | 15 × 2 | 1 | 45 955 | 90 | 12 | 6 | 180 | 6 035 / 69 | 1.14 % | 0.570 | 0.013 | ×1.06 |
| клас210х14х5 | 15 × 5 | 6 | 97 903 | 486 | 6 | 1 | 75 | 13 843 / 484 | 3.50 % | 0.569 | 0.041 | ×1.18 |
| клас210х210х3 | 3 | 1 | 45 955 | 90 | 12 | 3 | 9 | 6 038 / 96 | 1.59 % | 0.526 | 0.017 | ×0.83 |
| клас210х210х4ц | 4 | 6 | 97 903 | 486 | 6 | 1 | 4 | 13 843 / 484 | 3.50 % | 0.504 | 0.036 | ×0.98 |
| клас210х4бема10х10х130 | 13 × 4 | 6 | 97 903 | 486 | 6 | 1 | 52 | 13 843 / 484 | 3.50 % | 0.499 | 0.036 | ×1.11 |
| клас210ема4ц | 4 | 1 | 45 955 | 90 | 12 | 1 | 4 | 6 040 / 114 | 1.89 % | 0.416 | 0.016 | ×0.53 |
| клас210ема4 | 4 | 1 | 45 955 | 90 | 12 | 2 | 8 | 6 039 / 105 | 1.74 % | 0.377 | 0.013 | ×0.56 |

### Три різні датасети під однією таблицею

Класи побудовані різними пайплайнами, тому їхні ряди різної щільності —
усі до 06.09, але з різною кількістю подій:

| Сімʼя класів | Подій на шість монет | Валідація |
| ------------ | -------------------- | --- |
| `клас210х10…` — сім класів | 412 811 | 56 454 пачки, 1 191 у зоні |
| `клас210х14…`, `клас210х210х4ц`, `клас210х4бема…` — шість класів | 97 903 | 13 843 пачки, 484 у зоні |
| `клас210х210х3`, `клас210х14х2`, `клас210ема4`, `клас210ема4ц` — лише BTC | 45 955 | ≈ 6 040 пачок, 69–114 у зоні |

Сімʼя `клас210х10…` будується із заповненням коротких пропусків
(`--fill-gaps 60`), решта — без нього, тому в них подій учетверо менше на
тому самому відрізку.

### Що з цього видно

1. **Найкраще зону впізнають сирі рівні стакана.** Попереду
   `клас210х10х7` (0.701) і `клас210х10х9` (0.687) — ті, де в події
   лежать самі рівні й обʼєми блоків. Похідні класи (`дц`, `д/д`, `2д`)
   дають 0.59–0.66.
2. **Похідна коштує сигналу.** Перехід `клас210х10х7` →
   `клас210х10х7дц` (перші похідні по блоках) забирає 0.06 AUC. Для
   **зони** — тобто для рівня ціни — інформативний сам рівень, а не його
   зміна.
3. **Довжина пачки допомагає тільки сирим класам.** У `210х10х7` і
   `210х10х9` найкраще `K = 11`, у похідних класів — `K = 1` або `2`:
   складати десять подій похідних немає сенсу, вони вже про зміну.
4. **Класи старої сімʼї не показують нічого.** `клас210х210х4ц` і
   `клас210х4бема10х10х130` дають 0.50 — це монетка, а `клас210ема4` і
   `клас210ема4ц` — 0.38 і 0.42, тобто **нижче** монетки: те, що на
   тесті виглядало ознакою зони, на валідації перевертається.
5. **Ема ціни події зони не знає.** Чотири числа ЕМА на подію — це
   згладжена ціна, і півот у ній не видно ні в який бік.

Відповідь етапу: **клас має значення**. Найсильніший опис зони —
`клас210х10х7`: 10 блоків × 7 рівнів, пачка з 11 подій, AUC 0.701 і
×2.91 до бази при повноті 0.2. Але навіть він на робочій точці лишає
одиниці влучних сигналів на тисячі пачок — висновок етапу 1 не
змінюється.

## Етап 3. Видача на валідації рядом — `підтверджено`, 2026-09-29

Таблиці етапу 2 кажуть, **скільки** модель влучає. Цей етап показує,
**де**: ряд валідації кожної монети з ціною, зігзагом, зоною і сирим
сигналом моделі на кожній події.

У ряд ідуть класи, у яких найкраща довжина пачки дала на валідації
**AUC вище 0.68** — решта від монетки не відрізняється. Таких класів два.

### Компоновка плашки

Порядок згори вниз — за [`rules/05-visualization.md`](../../rules/05-visualization.md):

| Смуга | Що на ній | Висота |
| ----- | --------- | ------ |
| опис | монета, відрізок, скільки подій і півотів, який клас і яке `K` | — |
| **графік** | ема10 ціни із зігзагом 2.3 % і півотами | 260 |
| зона | 1 там, де пачка події лежить у зоні ±0.15 % | 56 |
| сигнал | сира видача моделі на кожній події і горизонталь порога | 90 |
| влучив / хибний / проґавив | що вийшло з сигналу після порога | 56 |
| легенда | колір кожної позначки і числа під нею | — |

Усі смуги мають **спільну вісь X** з графіком і **скейляться під свої
дані**: межі осей рахуються з самих рядів. Зум, зсув і перехрестя —
спільні для всієї плашки. Поріг рухається повзунком, і смуги
перераховуються на льоту: файл несе сирий сигнал, а не готові смуги.

### Поріг за замовчуванням

Поріг стоїть на **тесті** при повноті **0.2**. Оцінки тесту беруться від
моделі, яка цієї монети не бачила (`відкладена монета`); клас,
побудований на одній монеті, відкласти нема чого — там поріг стоїть на
оцінках у межах навчання, і це написано в плашці.

### Що показано

Ряд валідації: **2026-08-14 00:37 … 2026-09-06 23:53**, 9 400 подій на
монету.

| Клас | K | AUC | Поріг | Монет | Сигналів | Влучних | Хибних | Проґавлено | Точність |
| ---- | - | ------- | ----- | ----- | -------- | ------- | ------ | ---------- | -------- |
| клас210х10х7 | 11 | 0.701 | 0.5283 | 6 | 6 820 | 95 | 6 725 | 224 | 1.39 % |
| клас210х10х9 | 11 | 0.687 | 0.4540 | 6 | 17 506 | 177 | 17 329 | 142 | 1.01 % |

`клас210х10х7`, монета за монетою:

| Монета | Подій валідації | У зоні | Півотів | Влучив | Хибних | Проґавив |
| ------ | --------- | ------ | ------- | ------ | ------ | -------- |
| BTC_USDT | 9 402 | 73 | 11 | 40 | 1 221 | 33 |
| ETH_USDT | 9 398 | 55 | 14 | 29 | 2 300 | 26 |
| SOL_USDT | 9 399 | 44 | 18 | 8 | 1 013 | 36 |
| XRP_USDT | 9 398 | 20 | 33 | 2 | 455 | 18 |
| BNB_USDT | 9 399 | 34 | 9 | 8 | 1 347 | 26 |
| DOGE_USDT | 9 398 | 93 | 26 | 8 | 389 | 85 |

### Що з цього видно

1. **Сигнал іде смугами, а не поодинці.** На порозі з тесту модель
   піднімається над ним на цілих ділянках ряду: 6 820 сигналів на 95
   влучань. AUC 0.701 означає лише порядок, а не поділ: розподіли
   зони й решти ряду накладені.
2. **Зона майже завжди відмічена — разом із половиною ряду.** З 319
   пачок зони поріг ловить 95 і ґавить 224, але платить за це 6 725
   хибними: смуга «хибний сигнал» під графіком ширша за смугу зони на
   два порядки.
3. **Поріг спільний, а монети різні.** DOGE_USDT дає 389 хибних, ETH —
   2 300 при тій самій кількості подій: розподіл сигналу в них зсунутий
   по-різному, і один поріг на всіх не підходить.
4. **Більше чисел на вхід — більше хибних.** `клас210х10х9` (990 чисел)
   ловить удвічі більше подій зони, ніж `клас210х10х7` (770), але дає
   в 2.6 раза більше хибних, і його точність нижча.

## Результат

Зона розвороту ±0.15 % на ема10 займає 2 % ряду і в медіані триває 11
подій. Градієнтний бустинг на сирих числах `клас210х10-1х7д/д` впізнає
її на невидимому часі (14.08 … 07.09) з AUC 0.61–0.66; довжина пачки від
1 до 11 подій змінює цю цифру в межах 0.05 і при цьому вчетверо зменшує
число розворотів, на яких вона виміряна.

На всіх 17 класах проєкту з датасетом відповідь та сама за формою, але
різна за силою: найкраще зону описують сирі рівні стакана
(`клас210х10х7` — AUC 0.701, `клас210х10х9` — 0.687), похідні класи
дають 0.59–0.66, класи на ціні (`клас210х210х4ц`,
`клас210х4бема10х10х130`) — 0.50, а `клас210ема4` і `клас210ема4ц` на
val падають нижче монетки. Самої зони на класі для торгового сигналу
недостатньо в жодному з них.

Ряд валідації це показує прямо: на порозі з тесту `клас210х10х7` дає 6 820
сигналів на шести монетах і 95 влучань у зону — смуга хибних під
графіком ширша за смугу зони на два порядки.
