Разработка AI-системы сентимент-анализа финансовых новостей
Финансовый сентимент-анализ отличается от общего: нейтральное в обычном тексте может быть негативным в финансовом контексте. «Снижение темпов роста» — это позитив или негатив? Зависит от ожиданий рынка.
Доменная специфика
Финансовый сентимент не бинарный «хорошо/плохо» — он направленный. «Позитивная новость для компании X» и «позитивная для её конкурентов» — разные вещи. Система должна учитывать:
- Entity-specific sentiment: позитив для Газпрома не равен позитиву для рынка в целом
- Финансовые события: санкции, M&A, дивиденды, ставки — каждое имеет специфическую интерпретацию
- Temporality: «вырос на 5%» vs «упал на 5%» — зависит от базы сравнения
Специализированные модели
FinBERT (ProsusAI): BERT fine-tuned на финансовых текстах Financial PhraseBank. Три класса: positive/negative/neutral. Для английских финансовых новостей — лучший open-source вариант.
Аналоги для русского: нет готовых качественных моделей — нужен fine-tuning ruBERT на русскоязычных финансовых новостях.
Сбор и обработка финансовых новостей
Источники на русском:
- Коммерсантъ, Ведомости, РБК: RSS-ленты
- Интерфакс, ТАСС: новостные API
- Финансовый раздел Telegram-каналов: pyrogram парсинг
- ru.investing.com: новости по тикерам
async def process_financial_news(url: str, ticker: str) -> SentimentResult:
article = await fetch_article(url)
text = f"{article.title}\n{article.text[:2000]}"
result = await llm.parse(f"""Проанализируй сентимент финансовой новости.
Контекст: новость касается {ticker}
Определи:
1. sentiment: positive/negative/neutral для акции {ticker}
2. magnitude: 0.0-1.0 (насколько сильное событие)
3. event_type: earnings/guidance/M&A/regulatory/macro/other
4. brief_explanation: 1 предложение
Новость: {text}""",
response_format=SentimentResult
)
return result
Агрегация и сигналы
Один материал — слабый сигнал. Агрегация за 24–48 часов по тикеру:
- Sentiment ratio: (pos - neg) / total
- Velocity: скорость изменения sentiment за последние 4 часа
- Volume-weighted sentiment: важные СМИ имеют больший вес
Порог для торгового сигнала: sentiment ratio > 0.6 + velocity > 0.3 → bullish signal. Для использования в алготрейдинге требуется строгий backtesting.
Метрики и бэктестинг
- Accuracy на размеченном датасете финансовых новостей
- Корреляция sentiment с последующим движением цены (lag 1–5 дней)
- Sharpe ratio стратегии на основе sentiment vs buy-and-hold







