El problema
Las comunidades comerciales en Reddit (r/wallstreetbets, r/stocks, r/options) generan señales de sentimiento en tiempo real que mueven los mercados. Los comerciantes minoristas que capten temprano el impulso de WSB pueden aprovechar la ola. Pero monitorear Reddit manualmente es imposible a escala. Los límites de tasa de API de Reddit dificultan realizar encuestas con frecuencia. Para cuando aparece una tendencia en las principales noticias financieras, el movimiento impulsado por la WSB ya se ha producido.
La solucion de Scavio
Cree una canalización que consulte el punto final de Reddit de Scavio en busca de subreddits relacionados con el comercio, extraiga menciones de ticker, califique el sentimiento por ticker y señale actividades inusuales. Funciona cada 30 minutos durante el horario de mercado. Compare el volumen de menciones actual con un promedio móvil de 7 días para detectar picos. Genere una señal clasificada que resalte los tickers con un impulso inusual en Reddit.
Antes
Antes del oleoducto, el comerciante navegaba por r/wallstreetbets manualmente cada mañana y tarde. Captaron movimientos importantes pero pasaron por alto los cambios de sentimiento intradiarios. Cuando un ticker era tendencia en WSB, el punto de entrada ya había pasado.
Después
Después de implementar la canalización, se detectan picos de menciones en el teletipo en 30 minutos. El comerciante revisa una señal clasificada en lugar de desplazarse por Reddit. Tres señales en el primer mes dieron lugar a operaciones procesables que se habrían pasado por alto con el seguimiento manual.
Para quien es
Los comerciantes minoristas monitorean el sentimiento de Reddit en busca de señales comerciales. Equipos de Quant que crean fuentes de datos alternativas basadas en Reddit. Nuevas empresas de tecnología financiera que crean productos de sentimiento social.
Beneficios clave
- Supervise los subreddts comerciales de Reddit cada 30 minutos automáticamente
- Ticker menciona la detección de picos frente al promedio móvil de 7 días
- Puntuación de sentimiento por ticker a partir de títulos de publicaciones y fragmentos
- La señal clasificada reemplaza la navegación manual en Reddit
- Haga una referencia cruzada de las señales de Reddit con Google News para confirmarla
Ejemplo en Python
import requests
from collections import Counter
from datetime import datetime
import re
API_KEY = "your_scavio_api_key"
TICKER_PATTERN = re.compile(r"\b[A-Z]{2,5}\b")
def scan_reddit_tickers(subreddit_query: str) -> dict:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "reddit", "query": subreddit_query},
timeout=15,
)
res.raise_for_status()
posts = res.json().get("organic", [])
ticker_counts = Counter()
for post in posts:
text = f"{post.get('title', '')} {post.get('snippet', '')}"
tickers = TICKER_PATTERN.findall(text)
# Filter common English words
skip = {"THE", "AND", "FOR", "ARE", "BUT", "NOT", "YOU", "ALL", "CAN", "HAS", "HER", "WAS", "ONE", "OUR", "OUT", "HIS", "HOW", "ITS", "MAY", "NEW", "NOW", "OLD", "SEE", "WAY", "WHO", "DID", "GET", "HIM", "LET", "SAY", "SHE", "TOO", "USE", "DAD", "MOM"}
for t in tickers:
if t not in skip:
ticker_counts[t] += 1
return {"query": subreddit_query, "scanned_at": datetime.utcnow().isoformat(), "top_tickers": ticker_counts.most_common(10)}
signal = scan_reddit_tickers("wallstreetbets stocks today")
print(f"Top tickers at {signal['scanned_at']}:")
for ticker, count in signal["top_tickers"]:
print(f" ${ticker}: {count} mentions")Ejemplo en JavaScript
const API_KEY = "your_scavio_api_key";
async function scanRedditTickers(query) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "reddit", query }),
});
const data = await res.json();
const skip = new Set(["THE","AND","FOR","ARE","BUT","NOT","YOU","ALL","CAN","HAS"]);
const counts = {};
for (const post of data.organic ?? []) {
const text = `${post.title ?? ""} ${post.snippet ?? ""}`;
for (const match of text.matchAll(/\b[A-Z]{2,5}\b/g)) {
if (!skip.has(match[0])) counts[match[0]] = (counts[match[0]] ?? 0) + 1;
}
}
return Object.entries(counts).sort((a, b) => b[1] - a[1]).slice(0, 10);
}
const tickers = await scanRedditTickers("wallstreetbets stocks today");
tickers.forEach(([t, c]) => console.log(`$${t}: ${c} mentions`));Plataformas utilizadas
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA