NLP برای تحلیل بازار — پردازش اخبار و احساسات اجتماعی
پردازش زبان طبیعی در معاملات ارزهای دیجیتال حیاتی شده است. اعلامیههای خبری، احساسات شبکههای اجتماعی و زمزمههای قانونی، بازارها را قبل از ظهور سیگنالهای زنجیرهای حرکت میدهند. این راهنما شما را از استخراج اطلاعات عملی از متنهای بدون ساختار عبور میدهد — همان تکنیکهایی که در امتیازدهی احساسات Smart Money API استفاده میشوند.
بینش کلیدی: احساسات به تنهایی تنها ۴۸٪ از حرکات کوتاهمدت را پیشبینی میکند. اما وقتی با اجماع نهنگها و نرخهای تأمین مالی ترکیب شود؟ معاملات تأییدشده با احساسات به دقت ۶۱٪ میرسند. این قدرت سیگنالهای چندوجهی است.
مبانی تحلیل احساسات
روشهای مبتنی بر واژگان در مقابل یادگیری ماشین
مبتنی بر واژگان: فرهنگ لغت کلمات مثبت/منفی (VADER, TextBlob). سریع، قابل تفسیر، اما با طعنه و متناقض مشکل دارد.
from nltk.sentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
texts = [
"بیتکوین ۱۵٪ با اخبار پذیرش نهادی صعودی افزایش یافت",
"سقوط در راه است — انتظار کاهش ۴۰٪ بر اساس نرخهای منفی صندوق",
"سیگنالهای مختلط اما نهنگها در حال جمعآوری ETH هستند"
]
for text in texts:
scores = analyzer.polarity_scores(text)
print(f"{text[:40]}... → {scores['compound']:.2f}")
خروجی: امتیازات ترکیبی از -۱ (بیشترین منفی) تا +۱ (بیشترین مثبت) متغیر است. امتیاز ۰.۶۵ نشاندهنده احساسات مثبت، -۰.۴۲ نشاندهنده احساسات منفی است.
مبتنی بر یادگیری ماشین: دستهبندها را آموزش دهید (Naive Bayes, SVM) یا از ترانسفورماتورهای از پیش آموزشدیده (BERT, RoBERTa) استفاده کنید. دقیقتر اما نیاز به دادههای برچسبدار دارد.
پردازش اخبار ارزهای دیجیتال
جمعآوری اخبار در زمان واقعی
جمعآوری تیترها از منابع اصلی (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,
})
تشخیص موجودیتهای نامگذاری شده (NER) برای داراییهای دیجیتال
استخراج توکنها/صرافیهایی که ذکر شدهاند:
import spacy
nlp = spacy.load("en_core_web_sm")
crypto_entities = {"Bitcoin", "BTC", "Ethereum", "ETH", "Solana", "SOL"}
text = "بیتکوین ۱۲٪ افزایش یافت در حالی که نهنگهای اتریوم مقادیر زیادی جمعآوری کردند"
doc = nlp(text)
for token in doc:
if token.text in crypto_entities:
print(f"{token.text} یافت شد")
استخراج احساسات اجتماعی
یکپارچهسازی Twitter/X API
ردیابی ذکرها، احساسات و تعامل برای داراییهای خاص:
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 توییتها.داده:
نتیجه = sentiment_pipeline(توییت.متن)[0]
احساسات.الحاق({
"متن": توییت.متن,
"برچسب": نتیجه["برچسب"],
"امتیاز": نتیجه["امتیاز"]
})
میانگین_احساسات = جمع([s["امتیاز"] برای s در احساسات]) / طول(احساسات)
چاپ(f"احساسات بیتکوین: {میانگین_احساسات:.2f}")
احساسات جامعه ردیت
ردیتهای r/cryptocurrency، r/btc، r/ethtrader را برای تغییرات احساسات خردهفروشی زیر نظر بگیرید:
وارد کردن praw
ردیت = praw.Reddit(client_id=ID, client_secret=SECRET, user_agent=AGENT)
سابردیت = ردیت.سابردیت("cryptocurrency")
برای پست در سابردیت.داغ(محدودیت=50):
اگر پست.created_utc > (زمان.زمان() - 86400):
احساسات = sentiment_pipeline(پست.عنوان)[0]
قدرت_سیگنال = پست.امتیاز * احساسات["امتیاز"]
ساخت یک موتور احساسات تولیدی
احساسات مبتنی بر ترنسفورمر (BERT)
مدلهای از پیش آموزشدیده BERT بسیار دقیقتر از روشهای مبتنی بر واژگان هستند:
از transformers وارد کردن AutoTokenizer, AutoModelForSequenceClassification
وارد کردن torch
نام_مدل = "ProsusAI/finbert"
توکنایزر = AutoTokenizer.from_pretrained(نام_مدل)
مدل = AutoModelForSequenceClassification.from_pretrained(نام_مدل)
تابع get_finbert_sentiment(متن):
ورودیها = توکنایزر(متن, return_tensors="pt")
با torch.no_grad():
خروجیها = مدل(**ورودیها)
لاجیتها = خروجیها.logits
احتمالات = torch.softmax(لاجیتها, dim=1)
شاخص_احساسات = torch.argmax(احتمالات)
اعتماد = احتمالات[0, شاخص_احساسات].item()
برگرداندن {"احساسات": ["منفی", "خنثی", "مثبت"][شاخص_احساسات], "اعتماد": اعتماد}
تجمع احساسات بلادرنگ
ترکیب چندین سیگنال در یک امتیاز احساسات روزانه:
تابع compute_daily_sentiment(نماد):
اخبار_مقالهها = fetch_recent_news(نماد)
احساسات_اخبار = [get_finbert_sentiment(a["عنوان"]) برای a در اخبار_مقالهها]
امتیاز_اخبار = np.mean([s["اعتماد"] برای s در احساسات_اخبار])
توییتها = fetch_tweets_last_6h(نماد)
احساسات_توییتر = [get_finbert_sentiment(t) برای t در توییتها]
امتیاز_توییتر = np.mean([s["اعتماد"] برای s در احساسات_توییتر])
پستهای_ردیت = fetch_reddit_hot(نماد)
احساسات_ردیت = [get_finbert_sentiment(p) برای p در پستهای_ردیت]
امتیاز_ردیت = np.mean([s["اعتماد"] برای s در احساسات_ردیت])
ترکیبی = (امتیاز_اخبار * 0.4 + امتیاز_توییتر * 0.35 + امتیاز_ردیت * 0.25)
برگرداندن ترکیبی
ادغام با Smart Money API
احساسات را به عنوان یک ویژگی به سیستم تأیید خود اضافه کنید:
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}
تکنیکهای پیشرفته NLP
تحلیل سنتیمنت مبتنی بر جنبه
به جای سنتیمنت کلی، سنتیمنت درباره جنبههای خاص استخراج کنید: "فناوری بیتکوین عالی است، اما پذیرش آن کند است." نظرات سطح ویژگی را استخراج کنید.
تشخیص علیت
ادعاهای علّی را شناسایی کنید: "به دلیل XYZ، قیمت حرکت خواهد کرد." یک طبقهبند برای تشخیص هیاهو از اخبار بنیادی آموزش دهید.
سری زمانی سنتیمنت
انحراف سنتیمنت را در طول زمان ردیابی کنید. تغییر ناگهانی از +0.65 به -0.45 یک سیگنال معکوس قابل توجه است.
ترکیب سنتیمنت با سیگنالهای اسمارت مانی
Smart Money API نمرات اطمینان را ارائه میدهد که در برابر اجماع نهنگها و معیارهای زنجیرهای تأیید شدهاند. تحلیل سنتیمنت را برای تأیید برتری خود اضافه کنید و نرخ برد را 4-6% افزایش دهید.
شروع رایگان →