Разработка AI-бота для торговли по сантименту соцсетей Sentiment Trading
Social sentiment — ранний индикатор для активов с сильной retail-базой: мемные акции, криптовалюты, некоторые сырьевые товары. GameStop WallStreetBets события показали: соцсети могут двигать рынки.
Источники социальных данных
Twitter/X
Наиболее информативен для финансов. API v2: academic track для исторических данных, elevated access для real-time. Стоимость стала значительной после изменений Маска, но данные уникальны.
Ключевые сигналы: cashtag ($BTC, $AAPL) упоминания + sentiment, объём твитов vs. baseline, engagement (retweets, likes) как proxy влияния, influential account vs. ordinary user.
r/wallstreetbets: исторически предсказательный для gamma squeeze events. r/cryptocurrency, r/bitcoin для крипто. Pushshift API для исторических данных. API для real-time.
Метрики: upvote ratio, comment count, mention velocity, emotion intensity в тексте.
StockTwits
Специализированная финансовая соцсеть. Пользователи сами помечают bullish/bearish. Более чистый сигнал, но меньший охват.
Telegram / Discord
Закрытые каналы — требуют human agents или public channel monitoring. Высокая ценность для крипто (крупные проекты ведут Telegram каналы).
NLP пайплайн
Data Collection
import tweepy
from textblob import TextBlob
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
class SentimentCollector:
def __init__(self):
self.tokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert")
self.model = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert")
def get_sentiment(self, text):
inputs = self.tokenizer(text, return_tensors='pt', truncation=True, max_length=512)
outputs = self.model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
# Returns: positive, negative, neutral probabilities
return {
'positive': probs[0][2].item(),
'negative': probs[0][0].item(),
'neutral': probs[0][1].item()
}
def aggregate_sentiment(self, texts, weights=None):
sentiments = [self.get_sentiment(t) for t in texts]
if weights:
# Weighted by follower count / upvotes
bull_score = sum(s['positive'] * w for s, w in zip(sentiments, weights))
else:
bull_score = np.mean([s['positive'] for s in sentiments])
return bull_score
Aggregate Signal Construction
- Hourly/daily sentiment score per asset
- Volume of mentions (absolute и vs. 30-day rolling average)
- Sentiment momentum: изменение score за последние N периодов
- Sentiment divergence: резкий рост upbeat при плоской или падающей цене
Стратегические подходы
Contrarian Strategy
Исследования показывают: extreme retail bullishness часто предсказывает коррекцию. Дейтрейдеры покупают → pump → smart money продаёт → dump.
При sentiment score > 90 percentile + unusually high volume mentions → contrarian short signal. Backtested на Reddit WSB данных: это работает для краткосрочного fade (1–3 дня горизонт).
Momentum Strategy
В отдельных случаях (momentum ramp-up) sentiment leads price. Начало viral обсуждения нового нарратива → early positioning. Validation: sentiment рост + price ещё не двинулась → купить before the crowd.
Meme Stock Monitoring
Специфический сигнал: Options activity (Call/Put ratio) + Reddit mentions + gamma exposure. Потенциальный gamma squeeze setup. Высокорисковая стратегия, но реальные исторические возможности.
Data Quality проблемы
Bots и coordinated campaigns
30–60% позитивных твитов о токенах могут быть накрученными. Bot detection:
- Возраст аккаунта
- Follower/following ratio
- Tweet pattern (posting frequency, content diversity)
- Coordinated posting timing
Взвешивание по credibility score аккаунта, а не просто по числу упоминаний.
Survivorship в backtesting
Многие viral тикеры сейчас неликвидны или делистованы. Backtest на живых данных из Twitter archives за 2019–2024 с учётом реальной ликвидности тогда.
Срок разработки: 6–10 недель для working MVP, 4–6 месяцев для production-quality системы с bot detection и multi-source aggregation.







