NLP cho Phân tích Thị trường — Xử lý Tin tức và Tâm lý Xã hội
Xử lý ngôn ngữ tự nhiên đã trở nên quan trọng trong giao dịch tiền điện tử. Các thông báo tin tức, tâm lý mạng xã hội và tin đồn về quy định di chuyển thị trường trước khi các tín hiệu trên chuỗi xuất hiện. Hướng dẫn này sẽ hướng dẫn bạn cách trích xuất thông tin có thể hành động từ văn bản không có cấu trúc — các kỹ thuật tương tự được sử dụng để tính điểm tâm lý trong Smart Money API.
Thông tin chính: Tâm lý đơn thuần chỉ dự đoán được 48% các biến động ngắn hạn. Nhưng khi kết hợp với sự đồng thuận của cá voi và tỷ lệ tài trợ? Các giao dịch được xác nhận bởi tâm lý đạt độ chính xác 61%. Đó là sức mạnh của các tín hiệu đa phương thức.
Nền tảng Phân tích Tâm lý
Phương pháp Dựa trên Từ điển vs Học máy
Dựa trên từ điển: Từ điển các từ tích cực/tiêu cực (VADER, TextBlob). Nhanh, dễ hiểu, nhưng gặp khó khăn với sự mỉa mai và ngữ cảnh.
from nltk.sentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
texts = [
"Bitcoin tăng 15% nhờ tin tức về việc áp dụng thể chế tăng giá",
"Sắp sập — dự đoán giảm 40% dựa trên tỷ lệ tài trợ âm",
"Tín hiệu hỗn hợp nhưng cá voi đang tích lũy ETH"
]
for text in texts:
scores = analyzer.polarity_scores(text)
print(f"{text[:40]}... → {scores['compound']:.2f}")
Kết quả: Điểm tổng hợp dao động từ -1 (tiêu cực nhất) đến +1 (tích cực nhất). Điểm 0,65 cho thấy tâm lý tích cực, -0,42 cho thấy tâm lý tiêu cực.
Dựa trên ML: Huấn luyện bộ phân loại (Naive Bayes, SVM) hoặc sử dụng các mô hình biến áp đã được huấn luyện trước (BERT, RoBERTa). Chính xác hơn nhưng yêu cầu dữ liệu được gắn nhãn.
Xử lý Tin tức Tiền điện tử
Tổng hợp Tin tức Thời gian Thực
Lấy tiêu đề từ các nguồn chính (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,
})
Nhận dạng Thực thể Được đặt tên (NER) cho Tài sản Tiền điện tử
Trích xuất các token/sàn giao dịch được đề cập:
import spacy
nlp = spacy.load("en_core_web_sm")
crypto_entities = {"Bitcoin", "BTC", "Ethereum", "ETH", "Solana", "SOL"}
text = "Bitcoin tăng 12% khi cá voi Ethereum tích lũy số lượng lớn"
doc = nlp(text)
for token in doc:
if token.text in crypto_entities:
print(f"{token.text} được tìm thấy")
Khai thác Tâm lý Xã hội
Tích hợp Twitter/X API
Theo dõi đề cập, tâm lý và tương tác cho các tài sản cụ thể:
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:
result = 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
Monitor r/cryptocurrency, r/btc, r/ethtrader for retail sentiment shifts:
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_strength = post.score * sentiment["score"]
Building a Production Sentiment Engine
Transformer-Based Sentiment (BERT)
Pre-trained BERT models are far more accurate than lexicon-based approaches:
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}
Real-Time Sentiment Aggregation
Combine multiple signals into a daily sentiment score:
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
Integrating with Smart Money API
Add sentiment as a feature to your confirmation system:
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}
Kỹ Thuật NLP Nâng Cao
Phân Tích Tâm Lý Theo Khía Cạnh
Thay vì tâm lý chung, trích xuất tâm lý theo khía cạnh: "Công nghệ Bitcoin tốt nhưng tốc độ ứng dụng chậm." Tách biệt ý kiến theo đặc điểm.
Phát Hiện Quan Hệ Nhân Quả
Xác định tuyên bố nhân quả: "Do XYZ, giá sẽ biến động." Huấn luyện bộ phân loại để phân biệt tin đồn với tin tức cơ bản.
Chuỗi Thời Gian Tâm Lý
Theo dõi xu hướng tâm lý theo thời gian. Sự đảo chiều đột ngột từ +0.65 xuống -0.45 là tín hiệu đảo chiều đáng chú ý.
Kết hợp tâm lý với tín hiệu smart money
Smart Money API cung cấp điểm tin cậy được xác thực dựa trên sự đồng thuận của cá voi và chỉ số on-chain. Thêm phân tích tâm lý để xác nhận lợi thế và tăng tỷ lệ thắng thêm 4-6%.
Bắt Đầu Miễn Phí →