podlesnykhdn

SKILL: my_prodject_invest — Инвестиционный трекер Дмитрия

6. **Пересборка дашборда** → использовать `/tmp/dashboard_template.html` как основу

podlesnykhdn 0 Updated 4w ago

Resources

11
GitHub

Install

npx skillscat add podlesnykhdn/my-prodject-invest

Install via the SkillsCat registry.

SKILL.md

SKILL: my_prodject_invest — Инвестиционный трекер Дмитрия

Что это за проект

Персональный инвестиционный трекер начинающего инвестора (Москва).


Портфель (актуально)

Тикер Компания Кол-во Борд
X5 ПАО «Корпоративный центр ИКС 5» 45 TQBR
LENT МКПАО «Лента» 53 TQBR
SBER ПАО Сбербанк 80 TQBR
BELU ПАО «НоваБев Групп» 12 TQBR
TGLD БПИФ «Тинькофф Золото» 5000 TQTF

Стратегия: долгосрочная дивидендная. Горизонт 5+ лет.
Брокер: Т-Инвестиции. Статус: неквалифицированный инвестор.


Архитектура файлов

collector.py        — сборщик данных (100 KB, главный файл)
advisor_bot.py      — @invest_advisor_dm_bot (Советник)
mentor_bot.py       — @invest_mentor_dm_bot (Ментор)
rules.json          — правила, портфель, дивиденды, фундаменталка (73 KB)
index.html          — дашборд (один файл, весь JS внутри)
send_email.py       — email рассылка
lessons.json        — уроки для Ментора
terms.json          — финансовые термины

logs/collector/     — ежедневные логи YYYY-MM-DD.json
logs/advisor/       — логи отправки советника
logs/mentor/        — логи отправки ментора
logs/prices/        — OHLCV свечи по тикерам портфеля
logs/qual_only_cache.json — кэш квал-only тикеров
logs/rising_history.json  — история Растущего интереса

Источники данных

Данные Источник Статус
Цены акций (TQBR) MOEX ISS ⚠️ блокирует GitHub Actions
Цены ETF (TQTF) Tinkoff API (primary) ✅ работает
Реальный портфель Tinkoff Open API ✅ работает
Дивиденды MOEX ISS ⚠️ нестабильно
Скринер MOEX ISS ⚠️ блокирует GitHub Actions
Обучение Claude API (Haiku) ✅ работает

КРИТИЧНО: MOEX ISS блокирует запросы с IP GitHub Actions.
Скринер получает 0 данных — нужен fallback через Tinkoff API.


Вкладки дашборда

  1. Портфель — таблица позиций с ценой, ATH, P/E, Долг/EBITDA, дивидендами
  2. Скринер — топ объёма, дешёвые акции, растущий интерес (NEW/ВЫШЕЛ), IPO
  3. Ментор — урок дня через Claude API
  4. Аналитик — сводка по портфелю через Claude API
  5. Рынок — неэффективности (5 типов аномалий)
  6. ОФЗ — таблица коротких/средних/длинных + просадки от 30д максимума
  7. P&L — реальные данные из Tinkoff: вложено/сейчас/PnL по каждой позиции

Telegram боты

  • @invest_mentor_dm_bot — урок дня, финансовый термин
  • @invest_advisor_dm_bot — утренняя сводка, алерты аномалий, дивиденды
  • TELEGRAM_CHAT_ID: 1828018468
  • Режимы: auto / morning / alerts / command

GitHub Actions (bots.yml)

Расписание:
  - 09:00 МСК (06:00 UTC) — первый запуск
  - 09:30 МСК (06:30 UTC)
  - 10:00 МСК (07:00 UTC)
  - каждые 30 мин 10:00–18:30 МСК (только будни)

Шаги:
  1. Установить зависимости
  2. Сборщик данных (TINKOFF_TOKEN в env)
  3. Определить режим
  4. Ментор (if: always())
  5. Советник (if: always(), GH_PAT в env)
  6. Сохранить логи (if: always())
     git add logs/** rules.json
     git push --force-with-lease

Secrets: TINKOFF_TOKEN, MENTOR_BOT_TOKEN, ADVISOR_BOT_TOKEN,
TELEGRAM_CHAT_ID, GMAIL_PASSWORD, GROQ_API_KEY, RESEND_API_KEY, GH_PAT


Ключевые правила разработки

Перед любым изменением

  1. Читать актуальный файл через API — не работать по памяти
  2. После изменения JS — проверять синтаксис через node --check
  3. Не использовать const lp= дважды в одной области видимости
  4. При пересборке index.html — всегда из /tmp/dashboard_template.html

Дашборд (index.html)

  • Один HTML файл, весь JS внутри <script> без внешних библиотек
  • Данные встроены в _E (const _E = {...}) — embedded fallback
  • lmap строится из _E.portfolio.positions (НЕ из лога!) — гарантия цены TGLD
  • TGLD цена — из Tinkoff API (primary), MOEX TQTF ненадёжен
  • Перед загрузкой на GitHub — JS проверяется через node --check
  • PORTFOLIO JS массив должен совпадать с rules.json

collector.py

  • Запускается в GitHub Actions — MOEX ISS может блокировать
  • Tinkoff API — основной источник для ETF и реального портфеля
  • sync_portfolio_from_tinkoff() — обновляет qty в rules.json автоматически
  • QUAL_ONLY_TICKERS — фильтр акций только для квалов, проверяется через Tinkoff
  • check_and_filter_anomalies() — проверяет новые тикеры, ежемесячная ревизия

rules.json (v3.3)

Структура: portfolio.positions, fundamentals (EPS/P/E),
debt_data (Долг/EBITDA), tinkoff_names, dividends_config,
qual_only_tickers, _meta


Известные проблемы

Проблема Статус Решение
MOEX ISS блокирует GitHub Actions 🔴 Активная Нужен Tinkoff API screener
Скринер пустой при запуске до 10:00 МСК ✅ Решено Расписание сдвинуто
GitHub пропускает scheduled runs ✅ Решено watchdog.yml + self-retry в боте
TGLD цена = 0 из MOEX ✅ Решено Tinkoff API primary source
const lp дублируется в JS ✅ Решено lmap из _E
Квал-only акции в алертах ✅ Решено QUAL_ONLY_TICKERS + авто-проверка

Приоритеты развития

Высокий приоритет

  1. Скринер через Tinkoff API — MOEX ISS ненадёжен из Actions
    • GetOrderBook / GetLastPrices для топ объёма
    • Аналог cheap_growth и rising_interest без MOEX ISS
  2. Автопересборка index.html в collector.py — сейчас вручную
  3. История цен OHLCV — данные есть в logs/prices/, график не работает

Средний приоритет

  1. P&L вкладка с историей — сравнение по неделям/месяцам
  2. Алерты при дивидендной отсечке — за 7 и 3 дня
  3. Ставка ЦБ автообновление — сейчас захардкожена (14.25%)

Низкий приоритет

  1. watchdog.yml — создан, нужно проверить работу
  2. Биваеквальные снимки — snapshots/ есть, отчёт не используется

Фундаментальные данные (актуально на 24.06.2026)

Тикер EPS (LTM) P/E Ср. P/E сектора Долг/EBITDA
X5 306₽ ~7.6 6.5 0.5x ✅
LENT 290₽ ~6.0 6.5 2.38x ⚠️
SBER 78.4₽ ~4.0 5.0 банк
BELU 63₽ ~4.5 8.0 1.96x 🟡
TGLD ETF

Ставка ЦБ: 14.25% (решение 19.06.2026)
Правило: Долг/EBITDA > 3 при ставке > 10% → не покупать


Дивидендный календарь (актуально)

Тикер Сумма Купить до Отсечка Выплата
X5 245₽ 04.07.2026 07.07.2026 ~22.07.2026
SBER 37.64₽ 17.07.2026 20.07.2026 ~03.08.2026
BELU ~10₽ (прогноз) не объявлено

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

  • Уровень: начинающий, учится в процессе
  • Стратегия: долгосрочная дивидендная, не торгует
  • Статус: неквалифицированный инвестор
  • Показывать только: акции доступные без статуса квала
  • Не показывать: квал-only тикеры, сложные деривативы
  • Язык общения: русский, простые объяснения без жаргона
  • Ключевая книга: «Деньги без дураков» Силаева

Как работать с этим проектом

  1. Изменения в collector.py → проверить синтаксис ast.parse()
  2. Изменения в index.html → проверить node --check перед загрузкой
  3. Новые данные в rules.json → обновить embedded _E в index.html
  4. Qty изменились → обновить в rules.json, index.html (PORTFOLIO JS), advisor_bot.py
  5. Новый квал-only тикер → добавить в QUAL_ONLY_TICKERS в collector.py И advisor_bot.py
  6. Пересборка дашборда → использовать /tmp/dashboard_template.html как основу