6. **Пересборка дашборда** → использовать `/tmp/dashboard_template.html` как основу
Resources
11Install
npx skillscat add podlesnykhdn/my-prodject-invest Install via the SkillsCat registry.
SKILL: my_prodject_invest — Инвестиционный трекер Дмитрия
Что это за проект
Персональный инвестиционный трекер начинающего инвестора (Москва).
- GitHub Pages: https://podlesnykhdn.github.io/my_prodject_invest/
- Репозиторий: podlesnykhdn/my_prodject_invest
- Стек: Python (GitHub Actions) + чистый HTML/JS (без фреймворков)
Портфель (актуально)
| Тикер | Компания | Кол-во | Борд |
|---|---|---|---|
| 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.
Вкладки дашборда
- Портфель — таблица позиций с ценой, ATH, P/E, Долг/EBITDA, дивидендами
- Скринер — топ объёма, дешёвые акции, растущий интерес (NEW/ВЫШЕЛ), IPO
- Ментор — урок дня через Claude API
- Аналитик — сводка по портфелю через Claude API
- Рынок — неэффективности (5 типов аномалий)
- ОФЗ — таблица коротких/средних/длинных + просадки от 30д максимума
- 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-leaseSecrets: TINKOFF_TOKEN, MENTOR_BOT_TOKEN, ADVISOR_BOT_TOKEN,
TELEGRAM_CHAT_ID, GMAIL_PASSWORD, GROQ_API_KEY, RESEND_API_KEY, GH_PAT
Ключевые правила разработки
Перед любым изменением
- Читать актуальный файл через API — не работать по памяти
- После изменения JS — проверять синтаксис через
node --check - Не использовать
const lp=дважды в одной области видимости - При пересборке 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— фильтр акций только для квалов, проверяется через Tinkoffcheck_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 + авто-проверка |
Приоритеты развития
Высокий приоритет
- Скринер через Tinkoff API — MOEX ISS ненадёжен из Actions
- GetOrderBook / GetLastPrices для топ объёма
- Аналог cheap_growth и rising_interest без MOEX ISS
- Автопересборка index.html в collector.py — сейчас вручную
- История цен OHLCV — данные есть в
logs/prices/, график не работает
Средний приоритет
- P&L вкладка с историей — сравнение по неделям/месяцам
- Алерты при дивидендной отсечке — за 7 и 3 дня
- Ставка ЦБ автообновление — сейчас захардкожена (14.25%)
Низкий приоритет
- watchdog.yml — создан, нужно проверить работу
- Биваеквальные снимки — 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 тикеры, сложные деривативы
- Язык общения: русский, простые объяснения без жаргона
- Ключевая книга: «Деньги без дураков» Силаева
Как работать с этим проектом
- Изменения в collector.py → проверить синтаксис
ast.parse() - Изменения в index.html → проверить
node --checkперед загрузкой - Новые данные в rules.json → обновить embedded
_Eв index.html - Qty изменились → обновить в rules.json, index.html (PORTFOLIO JS), advisor_bot.py
- Новый квал-only тикер → добавить в QUAL_ONLY_TICKERS в collector.py И advisor_bot.py
- Пересборка дашборда → использовать
/tmp/dashboard_template.htmlкак основу