NLP för marknadsanalys — Behandling av nyheter och socialt sentiment
Natural language processing har blivit avgörande inom kryptohandel. Nyhetsmeddelanden, sociala mediers sentiment och regulatoriska rykten påverkar marknaden innan on-chain-signaler dyker upp. Den här guiden går igenom hur du extraherar användbar information från ostrukturerad text — samma tekniker som driver sentimentbedömning i Smart Money API.
Nyckelinsikt: Sentiment förutsäger endast 48% av kortsiktiga rörelser. Men när det kombineras med valkonsensus och finansieringsräntor? Sentimentbekräftade affärer uppnår 61% noggrannhet. Det är kraften i multimodala signaler.
Grundläggande sentimentanalys
Lexikonbaserade vs maskininlärningsmetoder
Lexikonbaserad: Ordlista med positiva/negativa ord (VADER, TextBlob). Snabb, tolkningsbar, men har svårt med sarkasm och kontext.
from nltk.sentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
texts = [
"Bitcoin steg 15% på bullish institutionell adoptionsnyheter",
"Krasch nära — förvänta dig 40% dump baserat på fundrat neg",
"Blandade signaler men valar ackumulerar ETH"
]
for text in texts:
scores = analyzer.polarity_scores(text)
print(f"{text[:40]}... → {scores['compound']:.2f}")
Utdata: Compoundscores sträcker sig från -1 (mest negativt) till +1 (mest positivt). En poäng på 0,65 indikerar positivt sentiment, -0,42 indikerar negativt.
ML-baserad: Träna klassificerare (Naive Bayes, SVM) eller använd förtränade transformatorer (BERT, RoBERTa). Mer exakt men kräver märkt data.
Behandling av kryptovalutanyheter
Realtidsnyhetsaggregering
Hämta rubriker från större källor (CoinTelegraph, BlockBeats, Cointelegraph RSS, Reddit):
import feedparser
from datetime import datetime, timedelta
feeds = [
"https://cointelegraph.com/feed",
"https://www.coindesk.com/arc/outboundfeeds/rss/",
]
articles = []
for feed_url in feeds:
feed = feedparser.parse(feed_url)
for entry in feed.entries[:10]:
articles.append({
"title": entry.title,
"published": entry.published_parsed,
"summary": entry.summary,
})
Named Entity Recognition (NER) för kryptotillgångar
Extrahera vilka tokens/börser som nämns:
import spacy
nlp = spacy.load("en_core_web_sm")
crypto_entities = {"Bitcoin", "BTC", "Ethereum", "ETH", "Solana", "SOL"}
text = "Bitcoin steg 12% när Ethereum-valar ackumulerade stora mängder"
doc = nlp(text)
for token in doc:
if token.text in crypto_entities:
print(f"{token.text} hittades")
Utvinning av socialt sentiment
Twitter/X API-integration
Spåra omnämnanden, sentiment och engagemang för specifika tillgångar:
import tweepy
from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
client = tweepy.Client(bearer_token=TWITTER_BEARER)
query = "Bitcoin -is:retweet lang:en"
tweets = client.search_recent_tweets(query=query, max_results=100)
sentiments = []
for tweet in tweets.data:
resultat = sentiment_pipeline(tweet.text)[0]
sentiments.append({
"text": tweet.text,
"label": result["label"],
"score": result["score"]
})
avg_sentiment = sum(s["score"] for s in sentiments) / len(sentiments)
print(f"Bitcoin-sentiment: {avg_sentiment:.2f}")
Reddit Community Sentiment
Övervaka r/cryptocurrency, r/btc, r/ethtrader för förändringar i detaljhandelns sentiment:
import praw
reddit = praw.Reddit(client_id=ID, client_secret=SECRET, user_agent=AGENT)
subreddit = reddit.subreddit("cryptocurrency")
for post in subreddit.hot(limit=50):
if post.created_utc > (time.time() - 86400):
sentiment = sentiment_pipeline(post.title)[0]
signal_styrka = post.score * sentiment["score"]
Bygga en produktionsklar sentimentmotor
Transformer-baserat sentiment (BERT)
Förtränade BERT-modeller är mycket mer exakta än lexikonbaserade metoder:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
model_name = "ProsusAI/finbert"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
def get_finbert_sentiment(text):
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
probabilities = torch.softmax(logits, dim=1)
sentiment_idx = torch.argmax(probabilities)
confidence = probabilities[0, sentiment_idx].item()
return {"sentiment": ["negative", "neutral", "positive"][sentiment_idx], "confidence": confidence}
Realtidsaggregation av sentiment
Kombinera flera signaler till ett dagligt sentimentvärde:
def compute_daily_sentiment(symbol):
news_articles = fetch_recent_news(symbol)
news_sentiments = [get_finbert_sentiment(a["title"]) for a in news_articles]
news_score = np.mean([s["confidence"] for s in news_sentiments])
tweets = fetch_tweets_last_6h(symbol)
twitter_sentiments = [get_finbert_sentiment(t) for t in tweets]
twitter_score = np.mean([s["confidence"] for s in twitter_sentiments])
reddit_posts = fetch_reddit_hot(symbol)
reddit_sentiments = [get_finbert_sentiment(p) for p in reddit_posts]
reddit_score = np.mean([s["confidence"] for s in reddit_sentiments])
composite = (news_score * 0.4 + twitter_score * 0.35 + reddit_score * 0.25)
return composite
Integrering med Smart Money API
Lägg till sentiment som en funktion i ditt bekräftelsesystem:
def confirm_with_sentiment(symbol, direction):
response = requests.get(
f"https://api.smartmoneyapi.com/v1/confirm?symbol={symbol}&direction={direction}",
headers={"X-API-Key": API_KEY}
)
smart_money = response.json()
sentiment_score = compute_daily_sentiment(symbol)
if (direction == "long" and sentiment_score > 0.55):
boost = 0.05
elif (direction == "short" and sentiment_score < 0.45):
boost = 0.05
else:
boost = 0
final_composite = min(smart_money["composite"] + boost, 1.0)
return {"composite": final_composite, "sentiment_boost": boost}
Avancerade NLP-tekniker
Aspektbaserad sentimentanalys
Istället för övergripande sentiment, extrahera sentiment om specifika aspekter: "Bitcoin-tekniken är bra, men adoptionen är långsam." Extrahera åsikter på funktionsnivå.
Kausalitetsdetektering
Identifiera kausala påståenden: "På grund av XYZ kommer priset att röra sig." Träna en klassificerare för att skilja hype från fundamenta nyheter.
Sentimenttidsserier
Spåra sentimentförändringar över tid. En plötslig vändning från +0,65 till -0,45 är en vändningssignal som är värd att notera.
Kombinera sentiment med smart money-signaler
Smart Money API tillhandahåller förtroendepoäng validerade mot valkonsensus och on-chain-mått. Lägg till sentimentanalys för att bekräfta din fördel och öka vinstprocenten med 4-6%.
Starta gratis →