Aperçu
Rechercher quotidiennement sur Reddit les mentions de tickers boursiers, évaluer le sentiment de chaque fil avec un LLM, agréger par ticker et suivre les tendances de sentiment sur une fenêtre glissante de 30 jours.
Déclencheur
Cron quotidien (ex. 18:00 UTC, après la fermeture des marchés)
Planification
Quotidien après la fermeture des marchés
Étapes du workflow
Définir une liste de surveillance de tickers
Liste des tickers à suivre : AAPL, TSLA, NVDA, etc.
Rechercher via l'endpoint Reddit de Scavio pour chaque ticker
POST /api/v1/search avec platform=reddit, query='$TICKER'. Top-20 fils de discussion.
Évaluer le sentiment par fil de discussion
Envoyer le titre du fil + le meilleur commentaire au LLM : 'Évaluez le sentiment de -1 à +1 pour cette discussion boursière. Renvoyez un JSON {score, reasoning}.'
Agréger le score quotidien par ticker
Moyenne des scores de sentiment sur tous les fils pour ce ticker.
Ajouter au journal glissant sur 30 jours
Stocker dans SQLite ou CSV : date, ticker, avg_sentiment, thread_count.
Optionnel : alerter en cas de pics de sentiment
Si le score du jour s'écarte de plus de 0,5 de la moyenne sur 7 jours, envoyer une alerte Slack.
Implémentation Python
import requests, os, json
key = os.environ["SCAVIO_API_KEY"]
tickers = ["AAPL", "TSLA", "NVDA"]
for ticker in tickers:
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": key},
json={"query": f"${ticker}", "platform": "reddit", "limit": 20})
threads = resp.json().get("results", [])
scores = []
for t in threads:
result = call_llm(f"Rate sentiment -1 to +1: {t['title']}. JSON: score, reasoning.")
scores.append(json.loads(result)["score"])
avg = sum(scores) / len(scores) if scores else 0
print(f"{ticker}: avg sentiment {avg:.2f} across {len(threads)} threads")Implémentation JavaScript
const tickers = ["AAPL", "TSLA", "NVDA"];
for (const ticker of tickers) {
const resp = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: `$${ticker}`, platform: "reddit", limit: 20 })
});
const threads = (await resp.json()).results;
const scores = [];
for (const t of threads) {
const r = await callLLM(`Rate sentiment -1 to +1: ${t.title}. JSON: {score, reasoning}.`);
scores.push(JSON.parse(r).score);
}
const avg = scores.reduce((a, b) => a + b, 0) / (scores.length || 1);
console.log(`${ticker}: avg sentiment ${avg.toFixed(2)} across ${threads.length} threads`);
}Plateformes utilisées
Communauté, publications et commentaires imbriqués de n'importe quel subreddit