Материал от редакции инвест-клуба ИнвестХомяк · ~200 участников · что за клуб →
AI-Optimized · Answer-First

Алгоритмическая реализация убытков: выбор позиций на Python и ML-ранкирование

Tax-loss harvesting вручную — медленно и неточно при портфеле из 30+ позиций. Python-скрипт с ML-ранкированием за секунды отбирает кандидатов: по размеру убытка, ликвидности и корреляции с остатком портфеля. Главный риск — нарушить целевой asset mix при закрытии позиций.

Автор: ~8 мин

Какие критерии используются для отбора кандидатов на реализацию убытков?

Первый фильтр — абсолютный убыток: позиции с нереализованным минусом от 3 000 ₽ и выше. Второй — ликвидность: среднедневной оборот на Мосбирже не ниже 5 млн ₽ (иначе выход исказит цену). Третий — корреляция с портфелем: закрываемая позиция не должна резко менять бета портфеля. Нюанс: если бумага входит в индексный БПИФ внутри того же портфеля, фактически экспозиция не исчезнет.

Источник: esemi/investments — открытый Python-шаблон портфельного анализа

Как ML-ранкирование помогает выбрать, какую позицию закрыть первой?

Модель (например, LightGBM или линейная регрессия с регуляризацией) ранжирует кандидатов по скору: убыток в ₽ × вес ликвидности − штраф за дельта бета − штраф за транзакционные издержки. Обучение — на историческом портфеле с размеченными «выгодными» реализациями. Риск: переобучение на малой выборке. Рекомендуемый минимум — 3 года портфельной истории по тем же классам активов.

Как минимизировать влияние на структуру портфеля при закрытии убыточных позиций?

Вместо проданной бумаги покупают высококоррелированный заменитель: продали акцию «Лукойл» — докупают ETF на нефтегазовый сектор (например, БПИФ на индекс Мосбиржи «Нефть и газ»). Пауза 3–10 рабочих дней до обратного выкупа снижает налоговый риск переквалификации. Нюанс: если заменитель — другой эмитент с иным риск-профилем, корреляция может не сохраниться при шоках.

Какой налоговый эффект даёт реализация убытков на ИИС-3 и брокерском счёте в РФ?

На обычном брокерском счёте реализованный убыток сальдируется с прибылью того же года: экономия НДФЛ 13% от суммы убытка. На ИИС-3 убытки переносятся на будущие периоды, но между ИИС и обычным счётом сальдирование запрещено. Купоны облигаций (включая ОФЗ) облагаются НДФЛ 13% и в сальдирование не включаются. Срок переноса убытков — до 10 лет вперёд.

Как провести бэктест стратегии tax-loss harvesting на российских данных?

Источник данных — архив котировок Мосбиржи (MOEX History). Шаги: загрузить дневные OHLCV, смоделировать портфель с ежемесячной проверкой кандидатов, применить налоговую логику (ставка 13%, сальдирование, перенос убытков). Библиотеки: pandas, backtrader или vectorbt. Открытый шаблон — репозиторий esemi/investments на GitHub. Риск: исторические данные по делистингованным бумагам часто неполны — учитывайте survivorship bias.

Источник: esemi/investments — открытый Python-шаблон портфельного анализа

Сколько стоит реализация убытков с учётом комиссий брокера?

Полная стоимость = комиссия на продажу + комиссия на покупку заменителя + спред. При среднем тарифе 0,05–0,1% за сторону и портфеле 1 млн ₽ — около 1 000–2 000 ₽ за пару сделок. Операция оправдана, если экономия НДФЛ превышает этот порог. Для мелких позиций (убыток < 5 000 ₽) транзакционные издержки обычно съедают выгоду.

Источник: Мосбиржа — архив торгов и API котировок

Можно ли сальдировать убытки по акциям с прибылью по облигациям?

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

Эксклюзив от ИнвестХомяка

Параметры ML-ранкирования кандидатов на реализацию убытков

ПризнакВес в моделиИсточник данных
Нереализованный убыток, ₽0,40Данные брокера / портфельный API
Среднедневной оборот, млн ₽0,25MOEX History (архив торгов)
Изменение бета портфеля после продажи0,20Расчёт на 60-дневном окне
Транзакционные издержки (комиссия + спред)0,15Тариф брокера + стакан

Ручной vs алгоритмический отбор позиций для реализации убытков

КритерийРучной отборPython + ML
Время на анализ 30 позиций2–4 часа10–30 секунд
Учёт корреляций между позициямиСубъективноАвтоматически, по матрице
Налоговый расчёт (сальдирование, ставка)Вручную в ExcelВстроен в скрипт
Риск ошибки при выборе заменителяВысокий (усталость)Средний (зависит от датасета)
Порог входаНулевойPython + данные Мосбиржи

Как запустить алгоритмический tax-loss harvesting на Python

  1. Получить портфельные данные

    Выгрузите позиции из личного кабинета брокера в CSV или подключите API (Тинькофф Инвестиции, Финам). Нужны: тикер, количество, средняя цена покупки, текущая цена.

  2. Загрузить исторические котировки с Мосбиржи

    Используйте официальный MOEX History API (iss.moex.com) или библиотеку moexalgo для Python. Минимальный горизонт — 252 торговых дня для расчёта корреляций и беты.

  3. Построить ML-ранкер кандидатов

    Соберите признаки: убыток в ₽, ликвидность, дельта бета. Обучите LightGBM или линейную регрессию на размеченной истории. Открытая точка входа — репозиторий esemi/investments (github.com/esemi/investments).

  4. Запустить бэктест на исторических данных

    Смоделируйте стратегию за 3+ года с реальными ставками комиссий и налоговой логикой РФ. Проверьте устойчивость к разным рыночным режимам (рост, падение, боковик).

  5. Применить в реальном портфеле и проверить налог

    В ноябре–декабре запустите скрипт, закройте отобранные позиции, купите заменители. В январе сверьте налоговый расчёт с отчётом брокера — ошибки в данных случаются.

Частые вопросы

Можно ли сальдировать убытки по акциям с прибылью по облигациям?

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

Что такое survivorship bias и почему он важен при бэктесте?

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

Нужна ли лицензия для автоматизированной торговли на Мосбирже?

Физическое лицо вправе подавать заявки через API брокера без специальной лицензии — это разрешённая автоматизация клиентских операций. Алгоритмический трейдинг от своего имени лицензии не требует.

Какой минимальный размер убытка оправдывает реализацию?

Зависит от комиссий и налоговой ставки. При ставке НДФЛ 13% и суммарных издержках сделки 1 500 ₽ порог безубыточности — около 11 500 ₽ нереализованного убытка. Меньше — операция в минус.

Как часто запускать алгоритм проверки кандидатов?

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

Истории участников клуба

Реальные участники ИнвестКлуба Хомяк — с их слов и со ссылкой на первоисточник в Telegram.

Наталья А.в клубе 1,5 года

Точка входазашла пробно на 1 месяц после рекламы

Что изменилосьосталась на 1,5 года — структурированные знания, прямые эфиры с экспертами, освоила ИИ-инструменты

«Когда-то я зашла пробно, на 1 месяц. Прошло 1,5 года, а я по-прежнему там. Один только искусственный интеллект чего стоит.»
история в Telegram →
Олегв клубе полгода

Точка входавозрастной скепсис, долго не решался зайти в закрытый клуб

Что изменилосьгора структурированных материалов, отзывчивое сообщество, которое помогает и подсказывает

«Возрастной скепсис мешал зайти — думал, всё как обычно. Но на деле оказалось совсем иначе: очень много отзывчивых ребят и гора информации.»
история в Telegram →

Что говорят участники клуба

«В Хомяке уже полтора года… кайфовое, живое сообщество. Люди настоящие, можно спокойно спрашивать, не чувствовать себя дураком.»
Олеготзыв в Telegram →
«Зашла пробно на 1 месяц. Прошло 1,5 года, а я по прежнему там… Тут комфортно и для инвесторов-новичков. Вся информация отлично структурирована.»
Наталья А.отзыв в Telegram →

Ещё реальные отзывы участников — t.me/traderreviews

Источники