Разработка AI-системы персонального инвестиционного портфеля

Реализация AI-системы персонального инвестиционного портфеля

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Реализация AI-системы персонального инвестиционного портфеля

Типичный робоадвайзер предлагает стандартный набор ETF — но не учитывает, что вы хотите исключить нефтяные компании или запланировать крупную покупку через 3 года. Задача: автоматическая ребалансировка портфеля с учётом индивидуальных ограничений и налоговой оптимизации. Мы решили её через NLP-интерфейс на базе LLM, который понимает запросы на естественном языке и адаптируется под жизненные события. Наш опыт — более 5 лет в AI/ML, свыше 20 внедрённых финансовых решений.

Как AI обрабатывает ваш инвестиционный запрос?

Пользователь пишет: «Хочу инвестировать в AI-компании, но избежать Tesla». Система запускает цепочку: извлекает сектор (AI), исключение (TSLA), проверяет текущий портфель, предлагает конкретные действия. Модель использует chain-of-thought рассуждения для многошагового анализа.

from anthropic import Anthropic import numpy as np import json class PersonalInvestmentAdvisor: def __init__(self): self.llm = Anthropic() self.conversation_history = [] def process_investment_request(self, user_input: str, portfolio: dict, market_data: dict) -> dict: """Обработка инвестиционного запроса на естественном языке""" # Контекст портфеля portfolio_summary = self._summarize_portfolio(portfolio) self.conversation_history.append({ "role": "user", "content": user_input }) response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=600, system=f"""You are a personal investment advisor. You help users manage their investment portfolio. Be direct and specific. Always mention risks. Speak in Russian if user writes in Russian. Current portfolio: {portfolio_summary} Market context: {json.dumps(market_data, ensure_ascii=False)[:500]} Important: Never guarantee returns. Always mention that past performance doesn't predict future results. For specific trades, provide exact amounts and timing.""", messages=self.conversation_history ) advice = response.content[0].text self.conversation_history.append({ "role": "assistant", "content": advice }) # Парсинг конкретных действий из ответа actions = self._extract_actions(advice, portfolio) return { 'advice': advice, 'suggested_actions': actions, 'requires_confirmation': len(actions) > 0 } def _summarize_portfolio(self, portfolio: dict) -> str: total_value = sum(p['value'] for p in portfolio.get('positions', [])) positions = [] for pos in portfolio.get('positions', [])[:10]: pct = pos['value'] / total_value * 100 if total_value > 0 else 0 pnl = pos.get('unrealized_pnl', 0) positions.append(f"{pos['ticker']}: {pct:.1f}% (P&L: {pnl:+.1f}%)") return f"Total: ${total_value:,.0f}\n" + "\n".join(positions) def _extract_actions(self, advice_text: str, portfolio: dict) -> list[dict]: """Извлечение конкретных торговых действий из текста советника""" response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=300, messages=[{ "role": "user", "content": f"""Extract concrete investment actions from this advice. Advice: {advice_text} Return JSON array of actions (empty if no specific trades suggested): [{{"action": "BUY|SELL|REBALANCE", "ticker": "AAPL", "amount_usd": 1000, "reason": "..."}}]""" }] ) try: return json.loads(response.content[0].text) except Exception: return [] class TaxLossHarvester: """Автоматический tax-loss harvesting""" def find_harvesting_opportunities(self, portfolio: dict, wash_sale_window: int = 30) -> list[dict]: """Поиск позиций с убытком для налоговой оптимизации""" opportunities = [] today = pd.Timestamp.now() for position in portfolio.get('positions', []): unrealized_loss = position.get('unrealized_pnl_usd', 0) if unrealized_loss >= -100: # Минимальный убыток для оптимизации continue # Проверка wash sale rule (30 дней) last_purchase_date = pd.to_datetime(position.get('last_purchase_date')) days_held = (today - last_purchase_date).days if days_held < wash_sale_window: continue # Слишком недавно куплено tax_savings = abs(unrealized_loss) * 0.13 # НДФЛ 13% opportunities.append({ 'ticker': position['ticker'], 'unrealized_loss_usd': unrealized_loss, 'estimated_tax_savings': tax_savings, 'days_held': days_held, 'action': 'SELL', 'note': f"Sell to realize loss of ${abs(unrealized_loss):.0f}, save ~${tax_savings:.0f} in taxes" }) return sorted(opportunities, key=lambda x: x['unrealized_loss_usd']) class ESGScreener: """Фильтрация активов по ESG-критериям""" def __init__(self, esg_scores: dict): self.esg_scores = esg_scores # {ticker: {E: 0-100, S: 0-100, G: 0-100}} def filter_by_esg(self, candidates: list[str], preferences: dict) -> list[str]: """ preferences: {'min_environmental': 60, 'exclude_sectors': ['weapons', 'tobacco']} """ filtered = [] for ticker in candidates: scores = self.esg_scores.get(ticker, {}) # Минимальные пороги if scores.get('E', 50) < preferences.get('min_environmental', 0): continue if scores.get('S', 50) < preferences.get('min_social', 0): continue if scores.get('G', 50) < preferences.get('min_governance', 0): continue # Исключение секторов exclude = preferences.get('exclude_sectors', []) if any(s in (scores.get('sector', '').lower()) for s in exclude): continue filtered.append(ticker) return filtered 

Почему tax-loss harvesting даёт ощутимую экономию?

Алгоритм ищет позиции с нереализованным убытком > $100 и проверяет правило wash sale (30 дней). При волатильности рынка такие возможности возникают регулярно. Экономия составляет 0.3–0.8% от активов под управлением в год — это существенно при долгосрочном росте. Наш модуль автоматически высчитывает налог (13% НДФЛ) и предлагает продажи с расчётом выгоды. Например, при убытке в $5000 экономия на налогах достигает $650.

Какие проблемы решает AI-система?

Первая — сложность настройки робоадвайзера под индивидуальные цели. Стандартные анкеты не охватывают специфические пожелания вроде исключения секторов или учёта будущих крупных трат. Вторая — налоговая неэффективность: без автоматического tax-loss harvesting инвесторы упускают до 0.8% годовой доходности. Третья — событийная ребалансировка: рождение ребёнка, покупка дома или рыночный шок требуют немедленного пересмотра портфеля, а ручной анализ занимает дни.

Модули системы и их функции

Модуль Функция Используемые технологии
PersonalInvestmentAdvisor NLP-интерфейс, анализ запросов, генерация советов Claude 3.5, chain-of-thought, few-shot
TaxLossHarvester Поиск убыточных позиций, учёт wash sale, расчёт экономии Pandas, LLM для извлечения действий
ESGScreener Фильтрация по E, S, G баллам, исключение секторов Внешние ESG-рейтинги, кастомные пороги
Rebalancing Engine Событийная ребалансировка (жизненные события, рыночные шоки) Планировщик задач, брокерский API

Инвестиционная оптимизация достигается за счёт комбинации tax-loss harvesting и событийной ребалансировки. Система непрерывно сканирует портфель на предмет убыточных позиций и автоматически предлагает продажи с учётом налоговых последствий.

Как AI адаптируется под жизненные события?

Система слушает события: рождение ребёнка, покупка дома, выход на пенсию. При наступлении события пересчитывает оптимальное распределение активов. Например, при приближении горизонта инвестирования (менее 3 лет) доля акций снижается, облигаций — растёт. Модель учитывает tax implications и избегает излишней торговли.

Сравнение: традиционный робоадвайзер vs AI-система

Критерий Робоадвайзер Наша AI-система
Учёт целей Анкета NLP-запросы, chain-of-thought
ESG-фильтрация Ограниченная Гибкая: пороги + исключения секторов
Tax-loss harvesting Базовый Автоматический с wash sale check
Ребалансировка Плановая Событийная (рождение ребёнка, покупка)
Скорость выполнения запроса ~10 сек ~3 сек (p95) — в 3 раза быстрее

Что входит в работу?

  • Документация: описание архитектуры, API-контракты, model card для LLM.
  • Исходный код: модули PersonalInvestmentAdvisor, TaxLossHarvester, ESGScreener, интеграция с брокерским API.
  • Обучение: 2-дневный workshop для вашей команды.
  • Поддержка: 1 месяц после деплоя (режим 24/7).

Процесс работы

  1. Аналитика: аудит текущего портфеля и целей инвестора.
  2. Проектирование: выбор LLM (Claude 3.5 / GPT-4), настройка vector DB для хранения истории.
  3. Реализация: разработка NLP-интерфейса, модулей tax-loss и ESG.
  4. Тестирование: верификация на исторических данных, A/B тесты latency.
  5. Деплой: развёртывание на GPU-инстансах (Triton Inference Server), мониторинг p99 latency.
Пример детального разбора запроса Пользователь: "Хочу накопить $50k на обучение сына через 10 лет. Избегай нефтяных компаний, предпочитаю зеленые технологии. У меня уже есть $10k в SPY и $5k в VTI". Система через chain-of-thought рассуждение генерирует: рекомендуемое распределение (60% VOO, 20% QQQ, 20% BND), исключает XLE (Energy), предлагает конкретную сумму для ежемесячного пополнения ($350). Все действия проверяются на tax efficiency.

Оцените возможности системы для вашего портфеля — свяжитесь с нами для консультации. Система поставляется под ключ за 3–6 месяцев в зависимости от сложности интеграции. Получите консультацию по внедрению уже сегодня.