Блог им. empenoso

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?

Время после нового года решил провести с пользой и окунуться в машинное обучение. Заняться Machine Learning — и посмотреть получится что‑то или нет с российским рынком акций на Московской бирже.

Моей целью было построить такую систему, которая будет учиться на истории и в перспективе торговать лучше чем случайное блуждание 50/50. Но из‑за комиссий и спреда подобные блуждания изначально отрицательны — чтобы выйти в плюс надо как минимум покрывать комиссии.
Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?
Если говорить о результатах очень кратко, то технически всё работает, но вот финансовый результат на грани безубыточности.

Если Вы только интересуетесь этой темой Вы можете посмотреть какие‑то шаги в моей статье, а если Вы уже опытный разработчик подобных систем, то можете подсказать что‑нибудь в комментариях.

Причём вся эта работа выглядит совершенно не так как показывается в фильмах про уолл‑стрит: фактически это написание скриптов и монотонный запуск и всё происходит полностью локально на компьютере.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Скриншот VS Code открытым деревом проекта

Охота за данными

Вообще данные очень важны. Иначе получается что мусор на входе просто перетекает в мусор на выходе.

Для отбора бумаг я руководствовался следующей логикой: сначала ищу общий список всех акций, торгуемых на Московской бирже и делаю выборку — в неё входят только те, у которых есть фьючерсы. Дальше оставляю только тикеры акций, которые имеют фьючерсы.

Потом беру два API — одно от брокера, а второе API, предоставляющее информацию по всем юридическим лицам России — это API DaData. У каждой акции ведь есть ИНН компании. Используя оба этих API — оба бесплатных кстати — обогащаю каждую запись дополнительными сведениями.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Фрагмент файла tickers_full_market.json с общим список тикеров

После этого скачиваю котировки акций с Московской биржи. И загружаю три индекса: IMOEX, IMOEX2, RTSI, RGBI.

Для этого скачиваю минутки — они готовые и сразу в архивах через API брокера — можно очень быстро скачать полностью все бумаги.

С индексами сложнее. Брокерский API не отдавал историю по IMOEX и RGBI, видимо, из‑за ограничений лицензии биржи (привет, MOEX AlgoPack). Пришлось писать парсер для прямого API Московской биржи (ISS MOEX) — скорость гораздо медленнее, но я скачиваю тоже минутки. Скачать все доступные минутки с IMOEX, IMOEX2, RTSI, RGBI занимает около 20 минут.

Котировки индексаКотировки индекса

Работа со временем

Я начал работу с того, что выделил три интересующих меня таймфрейма. 15 минут, 1 час и 1 день, основной 1 час.

Написал скрипт который преобразует архивы с минутками от API брокера в файлы с котировками нужных таймфреймов.

Итерация 1,3,4: временнЫе бары (обычные)

Сначала я просто агрегировал минутки в 15 минут, 1 час и 1 день через скрипт, но рынок неравномерен. Возможно для ML‑модели временные свечи могут быть очень шумные, так как содержат разное количество информации.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Скрипт normalization_quotes_stock.py который читает 1-минутные архивы (ZIP) из quotes/1min_zip и агрегирует данные в 15min, 1h, 1d

Итерация 2: свечи рублевого объема

Потом я временно перешёл к событийным барам. Новая свеча формируется не по времени, а когда проходит фиксированный объем в рублях, например, 50 млн руб., но для разных акций этот порог разный, потому что рассчитывается динамически. Разделил их по условным классам:

  • A: порог выше.

  • B: порог ниже.

  • C: отбрасываются.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Скрипт который создаёт из минутных котировок свечи рублевого объема и классифицирует бумаги по классам

Учитель для робота. Разметка

Как объяснить машине, что такое «хорошая сделка»? Рынок может продолжать рост, но перед этим выбить по стопу.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Книга Маркос Лопез де Прадо «Машинное обучение: алгоритмы для бизнеса»

Для установки цели я использовал тройной барьер по де Прадо:

  • Верхний барьер (Take Profit): Цена + N×ATR

  • Нижний барьер (Stop Loss): Цена — M×ATR

  • Вертикальный барьер (Time Limit): Если прошло 100 баров, а цена никуда не пришла — выходим.

Скрипт расставляет метки:

Метка 1: сработал Take Profit.

Метка 0: вышло время, выход в ноль (минус комиссия).

Метка -1: сработал Stop Loss, потеря денег.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Фрагмент в Visual Studio Code

Глаза модели: инженерия признаков

Я использовал CatBoost (Categorical Boosting) это библиотека машинного обучения с открытым исходным кодом от «Яндекса», основанная на градиентном бустинге над деревьями решений. Я не подаю сырые цены (OHLCV: Open (цена открытия), High (максимальная цена), Low (минимальная цена), Close (цена закрытия) и Volume (объем торгов)), так как они не стационарны, потому что цена 100 ₽ в 2010 и 100 ₽ в 2024 — это разные сущности, а использую только относительные величины.

Я старался подавать именно Log Returns (логарифмические доходности), потому что Log returns аддитивны и симметричны: падение на 50% и рост на 100% имеют одинаковый масштаб в логарифмах.

Сами признаки, в разных итерациях по разному было:

  • Качество импульса: не просто «цена выросла», а как она выросла. Использую автокорреляцию и эффективность тренда.

  • Микроструктура: что происходило внутри этой свечи рублевого объема? Какая концентрация объема?

  • Межрыночные связи: как актив ведет себя относительно индекса Мосбиржи и индекса гособлигаций RGBI.

  • Классика: RSI (нормализованный через Z‑score), расстояния до скользящих средних.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Файл для генерации признаков и разметки

Моделирование

Для того чтобы заниматься ML все инструменты у меня были: компьютер 32 Гб оперативки с видеокартой GPU 16 Гб, Python как основной язык, Docker чтобы не зависеть от капризов драйверов, Numba для ускорения расчётов, Linux для администрирования Docker контейнеров.

Для моей задачи как будто даже избыточная конфигурация — потому что все расчёты протекают очень быстро.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Dockerfile

Делаю это из под Ubuntu, хотя всю разработку веду из‑под Windows.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?01_build.sh

Ещё использую измененную версию пошагового тестирования (Walk‑Forward Optimization), которая используется в трейдинге для поиска и проверки торговых стратегий, но добавляя «очистку» (purging) данных: она избегает перекрытия обучающих и тестовых периодов, чтобы предотвратить подгонку стратегии под шум истории, делая результаты более реалистичными и устойчивыми к будущим изменениям рынка.

Результаты и боль

При просмотре результатов магия машинного обучения быстро испаряется.

Я учитываю комиссии:

<code class="cmake">COMMISSION_PCT = 0.04 / 100  # комиссия брокера
SLIPPAGE_PCT   = 0.02 / 100  # проскальзывание  </code>

Каждая сделка автоматически теряет 0,06% или 0,12% на круг для акций. Кажется мелочью, но при сотнях сделок именно эти десятые доли процента превращают модель в убыточную. Модели нужно предсказывать движения >0,3-0,5%, чтобы быть в плюсе.

По качеству прогнозов мой ML стабильно показывает AUC 0,54–0,55. Формально это лучше случайного угадывания (0.50), но до Грааля тут очень далеко. Почему? Даже небольшая ошибка в вероятностях, умноженная на комиссии и шум, быстро съедает весь перевес.

Чтобы понимать, что именно я меряю, важно разобраться в трёх ключевых метриках.

AUC (Area Under the Curve) — это мера того, насколько хорошо модель умеет отличать «хорошие» сделки от «плохих». Если AUC = 0.5, модель — это монетка. Если 0.55 — она угадывает чуть чаще, чем случайность. В вакууме это звучит неплохо, но в трейдинге такого преимущества часто недостаточно, чтобы перекрыть издержки.

Fold — это один из прогонов в Walk‑Forward Optimization. История рынка режется на последовательные отрезки: на одном модель учится, на следующем тестируется. Каждый такой отрезок — отдельный fold. Это имитация реальности: мы всегда торгуем на будущем, которого модель «не видела». Поэтому один fold может быть прибыльным, а следующий — убыточным, просто потому что режим рынка поменялся.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?Тесты

Precision (точность) — это ответ на вопрос: «если модель сказала „покупай“, как часто она оказывается права?». Это критично для торговли, потому что даже модель с неплохим AUC может генерировать кучу ложных сигналов, которые будут съедать депозит комиссиями и стоп‑лоссами.

И вот здесь появляется самая болезненная часть. На одном из фолдов я получаю красивую Equity Curve, где капитал растёт.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?График fold_2_best_equity

На другом — та же самая модель превращает счёт в “пилу”: заработали на тренде, потом долго и мучительно всё отдали на боковике.

Machine Learning на Мосбирже - почему AUC 0.55 - это всё ещё больно?График fold_3_best_equity

Когда я писал этот текст мне в голову пришло, а что если модель обучать на максимизацию финансового показателя, такого как Коэффициент Шарпа?

Заключение: вопросы к залу

Я проделал некоторую работу, но результаты пока выглядят не особо приятными.

Мои гипотезы:

  1. Ошибка в методологии?

  2. Мало данных?

  3. Предсказывать не направление, а волатильность?

  4. Перейти на более высокие таймфреймы (4H, 1D), где комиссия съедает меньшую долю движения?

  5. Нужно использовать данные из стакана (Order Book)? С получением истории стакана для частного лица большие проблемы. Бесплатно доступен лишь очень ограниченный набор инструментов.

  6. CatBoost слишком прост, нужны трансформеры?

Я занимаюсь Machine Learning (ML), когда система учится на таблицах. Но есть ведь ещё Deep learning (глубокое обучение) когда идёт анализ больших объёмов данных и выявления сложных закономерностей автономно. Но боюсь для моей задачи слишком мало данных. Наверное только на истории стаканов OrderBook будет работать.

Приглашаю в комментарии: кто реально запускал Machine Learning на Мосбирже в плюс? Или просто опытных людей. Где я свернул не туда?

Не сдерживайте себя — напишите комментарий — буду рад любой критике в комментариях.

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

13 января 2026 г.

| ★12
43 комментария
если «смотреть» только в направлении тренда:
есть тренд на рост те покупаем, в др направлении шортим..
… от «средней» для каждого таймфрейма, считаем «стандарт отклонения S»
при повышении «выбросе» на 3S те уже не «случайном» становимся по направлении тренда.
..
(?)
анализировать надо:
по таймфрейм для применения нескольких одновременно,
алгоритм «если-если» то..
..
уменьшить количество сделок чтобы не терять на комиссиях!
..
ловим при этом не начало роста а уже процесс. конечно при ТА это видно " не вооружённом глазом".
..
зато анализировать можно большое количество папир автоматически и без человеческого участия.
avatar
ПлощадьДНР, спасибо! Критерии выхода из позиции — мне кажется как-то непрозрачно здесь берутся (в моём случае)
Михаил Шардин, я математик и алго 22 года, напишите мне в личку, дам много ценной информации 
avatar
Я (пока что) отказался от машинного обучения в алготрейдинге.

1) Огромный шум.
2) Нелинейность — по критическим режимам рынка данных очень мало
3) Экстремальность — критические режимы рынка несут огромное значение, но очень редки и по ним мало данных.
4) Играть приходится против акул у которых больше и точнее данные, выше скорость, и которые вероятно умнее. Для игры с нулевой суммой это плохой расклад, если есть выбор в такие игры лучше не играть вовсе.
5) Даже если ML даст прибыль, не факт что будет сильно больше чем индекс (либо формула гринблатта) + пут опционы. При этом усилий потребуется х100 раз больше.

Как при таком раскладе использовать сложные модели/ML непонятно.

Я перевернул задачу, и решаю другую — вместо максимума прибыли — создать максимально защищенную позицию которая позволит безопасно находиться в рынке, в том числе во время шторма. И позволить сюрпризам и неожиданностям которые я не знаю но которые могут случится быть положительными. Т.е. все усилия и расчеты направлены на защиту, прибыль не расчитывается, случайна и неожиданна.

Это мое понимание на текущий момент… Но, учитывая огромную прибыль Джима Симонса и других товарищей, возможно способ таки есть…
avatar
Alex Craft, спасибо за ваш развернутый ответ
Alex Craft, торговля от защиты  
avatar
Забудьте про % сделок.
Максимизируйте доходность или к-т Шарпа по эквити. Тупой к-т шарпа, без вычитания процентной ставки. 
Транзакционные издержки учитывайте сразу, до включения числовой мельницы. 
Да, RSI не использую. 
Вот как-то так.
 

avatar
С эквити тоже можно работать. Нужно выделить плохие участки и работать с ними. Есть такой метод — Когда мы к ТС1 добавляем ТС2 которая страхует ТС1. Некоторые называют это риск-менеджмент итп., но это просто алгоритм.
Идеальная оппозиция ТС1 это (-)ТС1 тогда результат будет ноль, поэтому задача всегда подбирать такую ТС2 которая сглаживает плохие моменты ТС1. Устраняет просадки, страхует плохие дни, итп. но не обнуляет полностью. Итд… дальше думаю поняли. В результате из 20 эквити в сумме получается идеальная, прямая, красивая эквити… Когда ты уверен что учел всё))
Этот метод я бы назвал «Финалом или квинтэссенцией всей линейной торговли».
avatar
По вопросам в конце поста:

1. Думаю, это основной момент. Я не назову это ошибками методологии, я бы назвал это эксперименты с методологией. Оно покрывает многое. Например под пунктом (2) идет вопрос про мало данных, по идее через методологию этот и аналогичные вопросы можно закрывать: обучил на меньшем объеме, обучил на большем, обучил на самом большом — сравнил результаты — получил ответ на вопрос про достоверность данных, с некоторой достоверностью. Нужна большая достоверность — организуешь эксперимент соответствующим образом. Получил ответ на вопрос — корректируешь методологию/пайплайн в соответствии с «ответом» и так же поступаешь с другими «вопросами» и гипотезами. В какой-то момент приходишь к работающему пайплайну.

4. Безусловно, помогает, но надо понимать как это влияет на объем данных.

6. Catboost само то на мой взгляд — бустинги и леса мало что обгоняет на таблицах, при этом Catboost ещё и шустрый в производительности.
avatar
Похоже ты находишься в начале пути. В России есть сильные алгокоманды, либо найди и присоединись к ним (если примут), либо создавай свою. 
avatar
iAlexander, я в Перми живу, наверное это может быть некоторым препятствием
Михаил Шардин, это не проблема 
avatar
AUC 0.55 это почти рандом (0.5 это полный рандом), поэтому и торговые результаты такие
avatar
переходите в HFT
avatar
sniper, выглядит что это дорого
Вообще данные очень важны.
....
Для этого скачиваю минутки —
Краткое пояснение — минутки — это значит 99% данных сразу отправляются в мусор.

Результаты и боль
...
Мало данных?
 Что же делать?
Перейти на более высокие таймфреймы (4H, 1D)
Краткое пояснение — теперь 99.99% данных отправляются в мусор.

Л. — логика!
avatar
Я нахожусь примерно на том же этапе, что и вы, читаю Прадо и работы из интернета по ML в трейдинге, делаю бэктестинг — поэтому мой комментарий теоретический.

Из того, что я увидел в современных подходах, более перспективно считается подавать на вход для ML алгоритмов не сырые сигналы (свечи, объем), а создавать факторы (через PCA анализ, фактор модели, и другие подходы), и модель уже учить на факторах, чтобы отсекать шум.

А, еще где-то видел замечание, что ML перспективней применять для определения режимов, а не для генерации сигналов входа-выхода.
avatar
IgorK, спасибо
Надо с самого начала задаться вопросом: «МЛ, не МЛ, а с какого… идея обучиться на прошлом должна давать в будущем какое-то преимущество по сравнению с 50/50?».
Вы что, какое-то унутреннее свойство движения цен выловили, которое меняется плавно и медленно? До сих пор это никому не удавалось. Даже существование такого свойства не доказано.
avatar
Исходя из практики, предложил бы покопать МЛ такую схему торговли:
1. Какую долю времени цена шаталась в боковиках? Известно, что больше половины. Как формируются верхняя и нижняя границы текущего боковика? Если хотя бы одна из границ определилась, торгуем отбой от неё (триггером). Внутрь текущего боковика. Отошли от границы в позиции — ставим трейлинг-стоп. Например, треть случаев так даст нужные 0,5% (трейлиг-стоп сработал). Если границу пробило, считаем ложным и ставим триггер выше границы на возврат в боковик. Рассчитываем до куда пересиживаем, если против ожидаемого идёт. Там стоп. Потом повторный вход внутрь боковика (или ещё дальше, или на границе боковика, какой сработает). Удачные пересиживания дают вторую треть с итогом 0,5% (например). После повторного входа и при неудаче есть итоговый стоп, втрое дальше рабочих. Итоги примерные: 30% случаев — в мелкий плюс и быстро, 30% случаев — в мелкий плюс после пересиживания, 10% случаев — большой плюс когда трейлинг-стоп несколько раз удалось передвинуть. 20% случаев — большой минус — примерно 3-4 крат от мелких плюсов. Пусть МЛ найдёт лучшие размеры для всего этого.
avatar
Я бы пытался обыграть не чистый рандом (50 на 50), а некий простейший торговый алгоритм типа скользящей средней.

Ищем сложную мл-модель там, где работает простая (сма). Сперва проверяем сма, находим стабильные области параметров, при которых сма даёт прибыль, лучшую, чем пассивное удержание того же Сбера.

Потом уже, поняв теоретические (но разумные) границы прибыльности сма на Сбере, ставим задачу — улучшить вдвое результаты при помощи мл.

Ну и далее МЛ. Если МЛ даже в теории работает хуже сма, в топку мл. Если на том же уровне — в топку. Если даёт преимущество но не вдвое, я бы не стал отказываться от простой модели в пользу сложной.

Если же МЛ даёт прирост доходности более, чем вдвое, тогда уже имеет смысл переключаться на сложную МЛ-модель и исследовать её. Насколько устойчива, какие у неё теоретические границы прибыльности. Насколько они разумны в плане переподгонки итд.

Конечно, всегда всё с издержками. Издержки лучше закладывать с запасом.

avatar
Sergey Pavlov, у меня сразу на всем рынке — всего 160 бумаг. Видимо часть лучше отбросить по какому-то принципу
Михаил Шардин, 160 бумаг это и хорошо и плохо.
Я бы тут делал двумя подходами:
1. Большой пул, в котором все бумаги равны. Но урезаем хотя бы до 100, чтобы уж совсем неликвидные отбросить. В этом большом пуле ищем некий аналог медленного инвестирования типа моментума. Пусть МЛ пытается из всего пула держать 10-20-30 бумаг и изредка что-то добавляет/убирает.
2. Более активный трейдинг. Но не более 2 сделок в день в среднем. Тут уже и не 100 и не 50, а выбрать 10-20 самых ликвидных и волатильных за последний год хотя бы и так скользящим окном двигаться строить МЛ-модель.
Но в первом и втором подходе нужен ориентир. Иначе как понять, хороша или плоха МЛ-модель. Я бы всё равно там же использовал сма-торговлю в роли бенчмарка. Во-первых, чтобы понять, что бумага торгуема. Во-вторых, чтобы надеяться, что она поддаётся алгоритму, т.е. предсказуема. Искать в голом шуме МЛ-моделью что-то в лоб я бы сейчас не решился без уверенности, что там не только шум.
avatar
Sergey Pavlov, шум есть всегда. Базовый для меня  вопрос, ответа на который не знают и не собираются узнать люди, которые используют МЛ как черный ящик, звучит так.
Что делает данный алгоритм МЛ в условиях низкого отношения сигнала к шуму. 
Применительно к ценовом ряду, когда нельзя просто описать раздельно свойства шума и сигнала, как это принято, например, у радиолокационщиков или гидроакустиков, можно задать вопрос, какие из алгоритмов МЛ вообще применимы. Тут простая ЭСС годится как база для сравнения. И, я уверен, большинство стандартных алгоритмов МЛ умрут, но не сдюжат.
avatar
Михаил, очень интересный пост спасибо что делитесь своим опытом.
1) Попробуйте сделать разметку через фракталы чтобы модель умела находить точки перелома для трендовых моделей это важно. И задачка сразу превратится из бинарной в многоклассовую (вход, выход, отдыхаем).
2) Из поста не увидел как Вы сами модели заворачиваете, оберните их в sklearn обертку через BaseEstimator, ClassifierMixin (хотя скорее всего Вы так делали просто не увидел). Это позволит удобно собрать пайплайн и покрутить гиперпараметры.

AUC 0,55 это мало конечно..

С уважением!
avatar
Whalerman, спасибо!
Михаил Шардин, Вы точно учли во всех этих акциях сплиты, дивиденды и пропуски торгов? 
avatar
SergeyJu, да кстати это важный момент именно поэтому я написал свой движок для тестов и торговли чтобы добавлять это удобно а не решения из коробки. Но кстати можно просто сделать типа adjusted price по аналогии с yahoo и учесть дивиденды.
avatar
Честно говоря эту портянку читать было сложно и я так и не понял сеттинг, на вход подаются фичи и у нас 3 возможных исхода? т.е. мы каждый раз принимаем решение отдельно, а последовательность никак не учитывается?


по поводу catboost:
lightgbm вроде как побыстрее
пробовали ли вы линейные модели? может у catboost происходит переподгонка на данных (оверфитинг).
avatar
open-russian-market, да, три исхода. А как лучше сделать?
__rtx, спасибо за столь развернутый ответ, наверное его можно было даже отдельным постом оформить и дать ссылку на него как на пост ответ
Смотри, попробую объяснить. Джим Саймонс как бэ авторитет? Ну да, как бы. Много он распространялся насчет своих алгоритмов при жизни? Ну нет же.  Почему? Эдж же. Чем меньше знает про это широкая публика — тем лучше.  Ты же с удовольствием будешь копаться и уничтожать весь эдж, который найдешь, ну когда-то же найдешь, своими публикациями. Человеки, которые хоть что-то нашли ничего никогда тебе, да никому, не скажут. ПРОСТО ПОТОМУ ЧТО ЭТО ГЛУПО. ТУПО. Судя по тому, что ты и здесь и на хабре и т.д., ты писатель, кайфуешь от исследований, общения. Пацаны, возьмите чела уже в алгокоманду, займите его чем-нибудь, и подпишите с ним соглашение о нераспространении. Или займись исследованиями новых медицинских препаратов или еще чем то общественнополезным. И там точно будут помогать.
avatar
kvazar, если вещь работает зачем писать о ней статью, а если нет — почему бы и не написать?
Смотри, попробую объяснить. Джим Саймонс как бэ авторитет? Ну да, как бы. Много он распространялся насчет своих алгоритмов при жизни? Ну нет же.  Почему? Эдж же. Чем меньше знает про это широкая публика — тем лучше. 
 Чем лучше то? Все что он делал хорошо, он публиковал. Может просто не о чем было особенно распространяться? Портить себе только репутацию ученого.
avatar
Обязательно попробуйте на длинных фреймах. На длинных фреймах может быть сильнее влияние неэффективности рынка, плюс существенно ниже влияние комиссии. Не слушайте никого, кто навевает пессимизм, и тестируйте на длинных фреймах. Буду ждать с нетерпением результата!
avatar
Иван Чащин, спасибо

Читайте на SMART-LAB:
Фото
Т-тех покупает Точку
Т-технологии планируют консолидировать 100% акций АО “Точка”.  Компания объявила о намерении приобрести одну из самых быстрорастущих финансовых...
Фото
📆 Друзья, по традиции делимся датами публикации годовой отчетности Positive Technologie
▶️ Предварительные данные по отгрузкам за 2025 год мы опубликуем 9 февраля. ▶️ А 7-го апреля представим консолидированную финансовую отчетность...
Фото
Финансовые результаты Аэрофлота по РСБУ за 2025 год
Всем привет! Публикуем финансовые результаты Аэрофлота по РСБУ за 2025 год. ✈️ Выручка увеличилась на 6,7% по сравнению 2024 годом и достигла...
Фото
Хэдхантер. Ситуация на рынке труда в январе. Хуже - чем просто хуже некуда
Вышла статистика рынка труда за январь 2026 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика hh.индекса...

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн