Разработка AI-системы сентимент-анализа соцсетей для трейдинга
Social sentiment для трейдинга — анализ тональности публикаций в социальных сетях как предикторов движения цены актива. Академические исследования показывают: настроение Twitter предшествует движению цены на 1–2 дня для ряда активов.
Источники социального сентимента
- Twitter/X: высокочастотный финансовый дискурс, профессиональные трейдеры, финансовые эксперты. API v2 (платный, $100+/мес для базового доступа)
- Reddit: r/investing, r/stocks, r/SecurityAnalysis, r/RussiaRubInvesting
- Telegram-каналы: крупные финансовые каналы с уникальным контентом
- StockTwits: специализированная соцсеть для трейдеров (только акции США)
- Пикабу/VC.ru: русскоязычные дискуссии
Обработка социального контента
Социальный текст сложнее обрабатывать, чем новости: сленг, эмодзи, иронию, мемы.
class SocialPost(BaseModel):
text: str
author_id: str
timestamp: datetime
ticker_mentions: list[str] # упомянутые тикеры
sentiment: float # -1 to 1
credibility_score: float # вес автора
engagement: int # лайки + репосты
def calculate_credibility(author: Author) -> float:
"""Взвешивание по репутации автора"""
factors = [
author.follower_count / 1000, # нормализованный охват
author.verified, # верифицированный аккаунт
author.historical_accuracy, # исторически правые прогнозы
1 / (1 + author.spam_score), # штраф за спам
]
return geometric_mean(factors)
Агрегированный индекс настроений
def compute_sentiment_index(posts: list[SocialPost], ticker: str) -> SentimentIndex:
relevant = [p for p in posts if ticker in p.ticker_mentions]
if not relevant:
return SentimentIndex(value=0.0, volume=0, confidence=0.0)
weighted_sentiment = sum(p.sentiment * p.credibility_score for p in relevant)
total_weight = sum(p.credibility_score for p in relevant)
return SentimentIndex(
value=weighted_sentiment / total_weight,
volume=len(relevant),
engagement_weighted=sum(p.sentiment * p.engagement for p in relevant) / sum(p.engagement for p in relevant),
confidence=min(1.0, len(relevant) / 50) # минимум 50 постов для высокой уверенности
)
Манипуляции и wash sentiment
Организованные кампании по накрутке sentiment — реальная проблема (pump-and-dump через координированные посты). Защита:
- Детекция скоординированных аккаунтов (схожие паттерны публикаций)
- Anomaly detection по скорости роста постов о тикере
- Игнорирование аккаунтов < 30 дней и < 100 подписчиков
Бэктестинг
Обязательный этап перед использованием в торговле. Тест: sentiment_index(t) → коррелирует ли с доходностью(t+1, t+2, t+5)? Типичная корреляция: 0.15–0.35 (слабая, но статистически значимая). Sharpe ratio стратегии на sentiment alone редко > 1.0 — использовать как дополнительный фактор, не основной.







