Kripto piyasasında kalabalık her zaman duygularının faturasını öder. Panik satıcıları dipte malı kaptırırken, FOMO'ya kapılanlar tam tepeden içeri girer. Tüm bu zihinsel hengame ilk olarak X'te (Twitter) birikir. Hissiyatla işlem yapmak doğrudan likidasyon garantilidir. Ama sosyal medyadaki bu gürültüyü net verilere, grafiklere ve delta-alert metriklerine dönüştürürseniz, küçük yatırımcının psikolojisi gayet net bir al-sat sinyaline dönüşür.
Metriklerin Anatomisi: Sosyal Medyada Tam Olarak Neyi Sayıyoruz?
Ham tweet’leri doğrudan çekmek hiçbir işe yaramaz. Duygu analizi (sentiment analysis) algoritmalarının ana olayı, veri setini spam çiftliklerinden, bot ağlarından ve reklamcılardan temizlemektir. Filtreleme bittiğinde, veri araçları analizlerini üç temel konsept üzerine kurgular:
- Social Volume (Sosyal Hacim): Belli bir zaman diliminde ilgili coin’in ($BTC, $SOL vb.) toplam bahsedilme sayısı. Fiyatta tık yokken sosyal hacimde patlama yaşanması, genelde yaklaşan bir volatiliteye işaret eder.
- Sentiment Balance (Duygu Dengesi): Boğa (bullish) ve ayı (bearish) anahtar kelimelerinin birbirine oranı. Finansal argoya göre ince ayar çekilmiş NLP modelleriyle (mesela RoBERTa) hesaplanır.
- Mindshare (Pazar Payı / Dikkat Payı): Kripto Twitter'daki toplam bilgi akışının yüzde kaçını belirli bir token'ın kapladığını gösteren metrik.
Formula: Weighted Sentiment Score = (Positive Mentions - Negative Mentions) / Total Volume * Engagement Weight
Araç Kutusu: Hype'ı Sinyale Dönüştüren 4 Platform
Kaito AI
Mindshare tarafında kurumsal standart haline gelmiş durumda. Sadece tweet’leri değil, podcast dökümlerini, araştırma raporlarını ve kapalı grupları da indeksler. Kaito, fenomenlerin dikkatinin yeni bir anlatıya (örneğin AI Agents veya DePIN) kaydığını, trend henüz küçük yatırımcının radarına girmeden 48–72 saat önce tespit eder.
LunarCrush
Platform, analitiğini iki proprietary metrik üzerine kurar: Galaxy Score ve AltRank. AltRank, bir token'ın sosyal hacmini spot ve vadeli işlem hacmiyle karşılaştırarak sıralar. Bir token AltRank'te ilk 10'a tırmandığı halde fiyatı henüz tepki vermediyse, patlamaya hazır bir anomali yakalamış olabilirsiniz.
Santiment
Santiment’in olayı, sosyal metrikleri on-chain veriler ve balina hareketleriyle hibrit işlemesidir. Weighted Sentiment metrikleri ekstrem noktaları harika yakalar: Fiyat düşerken bu gösterge derin negatif bölgeye sarkıyorsa, küçük yatırımcının havlu atmasıyla (capitulation) lokal dip oluşuyor demektir.
Adanos / The Tie
Kuant tüccarlar ve kurumsallar için biçilmiş kaftan. Sybil grafik denetimleriyle manipülasyonu ve sahte etkileşimleri eleyerek, işlenmiş sinyalleri milisaniyelik gecikmelerle WebSocket API üzerinden iletirler.
Analiz Platformlarının Karşılaştırmalı Özeti
| Servis | Ana Özellik | Veri Kaynağı | Kullanım Odağı |
|---|---|---|---|
| Kaito AI | Mindshare indeksi, anlatı (narrative) takibi | X, Podcasts, Mirror, Governance | Orta vade, narrative trade'leri |
| Santiment | Weighted Sentiment + On-chain | X, Telegram, Reddit, Bitcointalk | Lokal dip ve trend dönüşü tespiti |
| LunarCrush | AltRank & Galaxy Score | X, YouTube, TikTok | Altcoin'lerde momentum/impulse trading |
| The Tie | Enterprise Firehose, Düşük gecikmeli API | Doğrudan X Firehose erişimi | Algo-trading, HFT |
Tersine Piyasa Stratejisi (Contrarian Sentiment Trading)
Bakiyeyi sıfırlamanın en kestirme yolu, Weighted Sentiment tarihi zirvesindeyken mal toplamaktır. Kalabalık, kilit kırılma noktalarında her zaman çuvallar.
LONG Giriş Mantığı:
Social Volume (Sosyal Hacim) artıyor ama Weighted Sentiment dibin dibini görüyorsa (herkes "SCAM", "BATTIK" diye bağırıyorsa) ve fiyat güçlü bir destek seviyesini test ediyorsa.
Mekanik: Balinalar, küçük yatırımcının korku satışlarını karşılayarak pozisyon toplar. İşleme giriş, RSI yukarı kıvrıldığı an tetiklenir.
SHORT Giriş Mantığı:
Token'ın Mindshare değeri ATH tazeliyorsa. Fenomenler her 5 dakikada bir "100x hedef" twiti atıyorsa. Tam o sırada EXMON borsasında fonlama oranı (Funding Rate) aşırı pozitif tarafa kaymışsa — yani long açanlar pozisyonu tutmak için devasa faiz ödüyorsa.
Mekanik: Yükseliş benzin tükenmiştir. En ufak bir satış baskısı art arda likidasyon dalgası yaratır.
Python ile Kendi Sentiment Botunu Hazırlama
Piyasa hissiyatını ölçmek için pahalı aboneliklere servet dökmeye gerek yok. API'den çekilen tweet'lerin tonunu analiz etmek için vaderSentiment veya classic TextBlob kullanan basit bir Python betiği yazmak yeterlidir.
import re
import math
from datetime import datetime, timezone
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
class CryptoSentimentEngine:
def __init__(self):
self.analyzer = SentimentIntensityAnalyzer()
self._build_crypto_lexicon()
# Önünde $ simgesi olmadan da sıklıkla geçen temel coin'ler
self.known_assets = {
"bitcoin": "BTC",
"btc": "BTC",
"ethereum": "ETH",
"eth": "ETH",
"solana": "SOL",
"sol": "SOL",
"bnb": "BNB",
"binance coin": "BNB",
"xrp": "XRP",
"dogecoin": "DOGE",
"doge": "DOGE",
"cardano": "ADA",
"ada": "ADA",
"avalanche": "AVAX",
"avax": "AVAX",
"sui": "SUI"
}
def _build_crypto_lexicon(self):
crypto_lexicon = {
# Bullish
'moon': 3.0,
'gem': 2.0,
'bullish': 2.5,
'wgmi': 2.5,
'send': 2.0,
'breakout': 2.2,
'accumulation': 1.8,
'ath': 2.5,
'parabolic': 2.8,
'buy the dip': 2.2,
'btd': 2.0,
'pump': 2.0,
'ape': 1.5,
'aped': 1.5,
'undervalued': 1.8,
'strong support': 1.5,
'squeeze': 1.5,
# Bearish
'rekt': -3.5,
'dump': -3.0,
'ngmi': -2.5,
'fud': -2.2,
'fomo': -1.2,
'rug': -3.8,
'rugged': -3.8,
'scam': -3.5,
'capitulation': -2.8,
'sell pressure': -2.0,
'long squeeze': -2.5,
'dead cat bounce': -2.2,
'atl': -2.5,
'liquidation': -2.8,
'bankrupt': -3.5,
'insolvent': -3.5,
'hack': -3.2,
'exploit': -2.8,
# Emoji
'🚀': 3.5,
'💎': 2.5,
'🔥': 2.0,
'🐂': 2.5,
'📈': 2.0,
'💀': -3.0,
'🤡': -2.8,
'📉': -2.2,
'🐻': -2.5,
'💩': -3.0
}
self.analyzer.lexicon.update(crypto_lexicon)
def extract_tickers(self, text: str) -> list[str]:
"""
Metinden sembolleri şu formatlarda çeker:
$BTC
Bitcoin
ETH
Solana
"""
tickers = []
# $BTC formatı
dollar_tickers = re.findall(r'\$([A-Za-z0-9]+)', text)
for ticker in dollar_tickers:
ticker = ticker.upper()
if ticker not in tickers:
tickers.append(ticker)
text_lower = text.lower()
for keyword, symbol in self.known_assets.items():
if re.search(rf'\b{re.escape(keyword)}\b', text_lower):
if symbol not in tickers:
tickers.append(symbol)
return tickers
def clean_text(self, text: str) -> str:
text = re.sub(
r'http\S+|www\S+|https\S+',
'',
text,
flags=re.MULTILINE
)
text = re.sub(r'@\w+', '', text)
return text.strip()
def detect_sarcasm(self, text: str) -> bool:
text_lower = text.lower()
sarcasm_patterns = [
r'yeah\s+sure',
r'trust\s+me\s+bro',
r'another\s+gem',
r'to\s+the\s+moon.*lol',
r'amazing\s+project',
r'great\s+project',
r'sure\s+bro',
r'100x\s+guaranteed'
]
has_pattern = any(
re.search(pattern, text_lower)
for pattern in sarcasm_patterns
)
has_clown = '🤡' in text
has_poop = '💩' in text
return has_pattern or has_clown or has_poop
def calculate_time_decay(
self,
tweet_time: datetime,
half_life_hours: float = 24.0
) -> float:
now = datetime.now(timezone.utc)
delta_hours = (
now - tweet_time
).total_seconds() / 3600
delta_hours = max(delta_hours, 0)
return math.exp(
-math.log(2) * delta_hours / half_life_hours
)
def calculate_author_weight(
self,
followers: int,
retweets: int,
likes: int
) -> float:
followers_weight = math.log10(
max(followers, 1) + 1
)
engagement = (retweets * 2) + likes
engagement_weight = math.log10(
max(engagement, 1) + 1
)
score = (
followers_weight * 0.6 +
engagement_weight * 0.4
)
# Aşırı uç değerlere karşı koruma
return min(score, 10.0)
def classify_sentiment(self, compound: float) -> str:
if compound >= 0.20:
return "BULLISH"
if compound <= -0.20:
return "BEARISH"
return "NEUTRAL"
def analyze_tweet(self, tweet_data: dict) -> dict:
raw_text = tweet_data.get("text", "")
tickers = self.extract_tickers(raw_text)
cleaned = self.clean_text(raw_text)
vader_scores = self.analyzer.polarity_scores(cleaned)
compound = vader_scores["compound"]
# Sarkazm skoru tamamen tersine çevirmez,
# pozitifliği ciddi oranda törpüler.
if self.detect_sarcasm(cleaned):
if compound > 0:
compound *= -0.5
elif compound == 0:
compound = -0.2
label = self.classify_sentiment(compound)
author_weight = self.calculate_author_weight(
followers=tweet_data.get("followers", 0),
retweets=tweet_data.get("retweets", 0),
likes=tweet_data.get("likes", 0)
)
time_weight = self.calculate_time_decay(
tweet_data.get(
"created_at",
datetime.now(timezone.utc)
)
)
influence_score = author_weight * time_weight
aggregated_score = (
compound *
influence_score
)
return {
"tickers": tickers,
"sentiment": {
"label": label,
"compound": round(compound, 4),
"positive": round(vader_scores["pos"], 4),
"neutral": round(vader_scores["neu"], 4),
"negative": round(vader_scores["neg"], 4)
},
"influence": {
"author_weight": round(author_weight, 4),
"time_decay": round(time_weight, 4),
"combined_weight": round(influence_score, 4)
},
"aggregated_score": round(
aggregated_score,
4
),
"metadata": {
"followers": tweet_data.get(
"followers",
0
),
"retweets": tweet_data.get(
"retweets",
0
),
"likes": tweet_data.get(
"likes",
0
),
"sarcasm_detected": self.detect_sarcasm(
cleaned
)
}
}
if __name__ == "__main__":
engine = CryptoSentimentEngine()
sample_tweet = {
"text":
"Yeah sure, Bitcoin is going to $100k today... "
"another amazing project 🤡 🚀 #SCAM",
"followers": 120000,
"retweets": 45,
"likes": 310,
"created_at":
datetime.now(timezone.utc)
}
result = engine.analyze_tweet(sample_tweet)
from pprint import pprint
pprint(result)Yöntemin Riskleri ve Tuzakları
Duygu analizi sihirli bir değnek değildir. Bot çiftlikleri artık LLM ajanlarıyla mantıklı boğa metinleri üreterek temel NLP modellerini yanıltmayı öğrenmiş durumda. Twitter'dan gelen tek bir sinyalin matematiksel başarı oranı düşüktür. EXMON analitik ekibimiz olarak sentiment verilerini; teknik analiz ve on-chain metrikleri doğrulamak için ek bir filtre olarak kullanmanızı, asla tek başına pozisyona giriş tetikleyicisi yapmamanızı tavsiye ediyoruz.