Aprende a leer el valor, evita los dos errores de lectura más comunes y luego llévalo a una estrategia y escanea tus propios umbrales.
Los traders de futuros se ven muy optimistas. ¿Significa eso que hay que perseguir el largo? El sentimiento del mercado solo te dice cuánto más optimistas de lo habitual están en esta moneda, no qué tan optimistas están en términos absolutos. Ahí está el error de lectura más común.
El sentimiento del mercado (Market Sentiment, MS) es un indicador de sentimiento propio de Blave. Mide si los traders de futuros se inclinan al optimismo o al pesimismo, comparado con el nivel habitual de la propia moneda.
El valor no tiene límites: cerca de 0 es el nivel habitual, y cuanto mayor el valor absoluto, más inusual. Por encima de ±2 es poco frecuente y por encima de ±3, extremo, con la misma escala para todas las monedas; escanea tú mismo los umbrales con un backtest. Las insignias de estado del Estudio de datos usan estos umbrales:
| Valor | Insignia en el Estudio de datos | Significado |
|---|---|---|
| ≥ +3 | Excesivamente optimista | Mucho más optimistas de lo habitual, un valor extremo |
| +2 ~ +3 | Muy optimista | Claramente más optimistas de lo habitual |
| +0.5 ~ +2 | Optimista | Más optimistas de lo habitual |
| −0.5 ~ +0.5 | Neutral | Más o menos como de costumbre |
| ≤ −0.5 | Pesimista / Muy pesimista / Excesivamente pesimista | Simétrico al lado positivo, con umbrales en −0.5, −2 y −3: más pesimistas de lo habitual |
La distribución real es asimétrica: la cola superior es más profunda que la inferior. Estos son los cuantiles medidos por Blave con velas de 1 hora, del 2024-09-15 al 2026-09-14, un valor por hora (n = 17,520):
| Moneda | p1 | p50 | p99 | Tiempo por encima de 0 |
|---|---|---|---|---|
| BTC | −2.84 | +0.03 | +4.00 | 51.0% |
| ETH | −2.98 | +0.18 | +3.64 | 55.1% |
| SOL | −2.59 | +0.13 | +3.79 | 54.1% |
| DOGE | −2.04 | +0.34 | +4.02 | 60.3% |
Las cuatro monedas pasan más de la mitad del tiempo por encima de 0, DOGE hasta el 60.3%; el p99 supera +3.6 en todas, mientras que el p1 solo llega a −2.0 a −3.0. No uses el mismo valor absoluto para los umbrales largo y corto, y recalcula al cambiar de moneda.
El sentimiento del mercado compara cada moneda con su propio nivel habitual. En una moneda que lleva tiempo inclinada al optimismo, el optimismo es lo habitual y el valor vuelve a estar cerca de 0. Ese 0 significa «más o menos como de costumbre», no «nadie está alcista ni bajista».
También ocurre lo contrario: cuando una moneda pasa de muy optimista a optimista a secas, el valor puede volverse negativo aunque los traders sigan inclinados al alza. El mismo +2 en monedas o periodos distintos también puede reflejar sentimientos reales muy diferentes.
El sentimiento del mercado describe qué tan inusual es el sentimiento ahora mismo; no es una predicción del precio. Tras un optimismo extremo el precio puede seguir subiendo o darse la vuelta, y Blave no ha verificado cuál de las dos cosas pasa más a menudo.
Después de una subida o caída fuerte del precio en poco tiempo, el valor también tiende a quedar alto o bajo. Parte de esa lectura inusual viene entonces del propio precio, así que no la uses sola como motivo de entrada.
Hoy ninguna estrategia oficial usa el sentimiento del mercado, así que los tres usos siguientes son esbozos sin backtest. El ±0.5 y el 3 del código toman prestados los umbrales de las insignias del Estudio de datos como punto de partida; no salen de un escaneo de parámetros. Para escanearlos, consulta Cómo escanear umbrales.
La versión más directa: abre largo cuando el sentimiento del mercado supera un umbral de entrada y cierra cuando cae por debajo de un umbral de salida. La zona entre ambos evita que la estrategia entre y salga sin parar cuando el valor ronda un único nivel.
ENTRY_TH = 0.5 # esbozo: umbral de la insignia Optimista
EXIT_TH = -0.5 # esbozo: umbral de la insignia Pesimista
def compute_signals(df, entry_th=ENTRY_TH, exit_th=EXIT_TH):
# df['MS'] = valor de sentimiento del mercado de la moneda
signal = pd.Series(np.nan, index=df.index)
signal[df['MS'] > entry_th] = 1.0 # más optimistas de lo habitual -> entrar en largo
signal[df['MS'] < exit_th] = 0.0 # más pesimistas de lo habitual -> quedarse fuera
return signalEl sentimiento del mercado cambia despacio y no reacciona a movimientos de precio de pocos minutos. No tiene backtest: escanea y verifica tú mismo tanto el umbral como la dirección (a favor de tendencia o contraria).
Un valor de ±3 significa que el sentimiento ya es muy extremo. Un uso conservador es no tomarlo como señal de entrada, sino añadirlo a las condiciones de entrada de una estrategia existente y no abrir posiciones nuevas mientras sea extremo:
# esbozo: sin entrada mientras |MS| >= 3 (lectura excesiva)
too_hot = df['MS'].abs() >= 3
entry = compute_entry(df) & ~too_hotNo es una señal de reversión y no tiene backtest: Blave no ha verificado que el precio se dé la vuelta tras un ±3, ni que evitar los valores extremos mejore el rendimiento. ±3 es relativo al nivel habitual de la moneda; en una moneda que suele estar muy tranquila, un cambio pequeño puede llegar a ±3. Sustituye compute_entry por la condición de entrada de tu estrategia.
El sentimiento del mercado cambia despacio, así que sirve como filtro de fondo: acepta las señales largas de un indicador de ventana corta (como Intensidad taker) solo mientras esté por encima de 0, y quédate fuera cuando el sentimiento del mercado vuelva por debajo de 0. Abajo tienes un esbozo de la estructura; sustituye compute_fast_entry por tu propia condición:
ms = fetch_market_sentiment(SYMBOL, INTERVAL, START, END, hdrs)
df['MS'] = ms['alpha']
regime_long = df['MS'] > 0 # esbozo: largo solo con más optimismo de lo habitual
fast_entry = compute_fast_entry(df) # p. ej., una condición de Intensidad taker de ventana corta
signal = pd.Series(np.nan, index=df.index)
signal[regime_long & fast_entry] = 1.0
signal[~regime_long] = 0.0Esta combinación no tiene backtest y el umbral de 0 es solo ilustrativo. Escanea los parámetros y revisa el rendimiento después de comisiones antes de usarla.
El sentimiento del mercado tiene un solo ajuste: el intervalo de velas (period), entre 5min, 15min, 1h, 4h, 8h y 1d, con 5 minutos como mínimo. No tiene un parámetro de ventana temporal como Cazador de ballenas; el intervalo solo fija cada cuánto se toma un valor y no hace que el valor cambie más rápido, así que con 5min sigues viendo un sentimiento que cambia despacio.
| Intervalo | Rango por defecto en el Estudio de datos | Notas |
|---|---|---|
5min / 15min | 5min: 3 días; 15min: 7 días | El trazado más denso, pero el valor en sí cambia despacio; no sirve para operar en corto plazo |
1h / 4h | 1h: 14 días; 4h: 30 días | Para estrategias que revisan cada pocas horas |
8h / 1d | 8h: 60 días; 1d: 180 días | Para leer la tendencia del sentimiento durante un periodo más largo |
Elige el intervalo según cada cuánto revisa tu estrategia; no esperes que un intervalo corto capte movimientos de corto plazo. Los datos empiezan el 2020-01-01 (o en la fecha de listado para monedas listadas después). Cuando una moneda recién listada empieza a tener datos, su nivel habitual aún no se ha formado, así que los primeros valores son menos fiables.
El ±0.5, el 3 y el 0 de arriba son solo puntos de partida. Lo más sólido es poner una fila de valores candidatos para el umbral de entrada y otra para el de salida, hacer backtest de cada combinación y elegir una zona donde todos los resultados sean aceptables, no la mejor celda.
results = []
for entry_th in [0.5, 1.0, 1.5, 2.0, 2.5]:
for exit_th in [-1.0, -0.5, 0.0]:
signal = compute_signals(df, entry_th, exit_th)
results.append((entry_th, exit_th, backtest(signal))) # sustituye backtest por tu propia función de backtest; compara cada combinación después de comisionesEscanea los umbrales por separado para cada moneda y cada intervalo de velas; no reutilices los valores de otra configuración. Para saber por qué elegir una zona plana y no el punto más alto, consulta Cómo evitar el sobreajuste.
| Página | Qué muestra |
|---|---|
| Resumen | Un indicador semicircular del sentimiento general y dos rankings, optimistas y pesimistas, con columnas de moneda, variación en 24 horas, índice y estado. |
| Sectores | Ranking del sentimiento del mercado por sector. |
| Historial | Barras de sentimiento del mercado de una moneda sobre el precio, con intervalos de 5min a 1d y el campo stat. Para usuarios sin Pro, los últimos 7 días se muestran con retraso. |
Son ideas para combinar señales, no resultados verificados:
| Combinación | Para qué |
|---|---|
| MS + Cazador de ballenas | Cuando el sentimiento sube, revisa en Cazador de ballenas si el interés abierto aumenta de forma inusual al mismo tiempo, para juzgar si detrás del optimismo hay posiciones nuevas. |
| MS + Intensidad taker | El sentimiento del mercado reacciona despacio; usa Intensidad taker para ver las compras y ventas agresivas en una ventana corta y cubrir los movimientos de corto plazo que él no ve. |
El endpoint de la API es GET /market_sentiment/get_alpha, con symbol, period y fechas de inicio y fin (start_date, end_date); en Blave Agent la función es fetch_market_sentiment. En symbol va el símbolo del perpetuo en USDT (por ejemplo BTCUSDT). Solo devuelve velas cerradas, con timestamp, alpha y stat y sin precio. Sin fecha de inicio obtienes los últimos 365 días, y los rangos de más de 365 días se recortan.
El objeto stat describe el valor más reciente:
| Campo | Significado |
|---|---|
up_prob | La probabilidad, estimada por el modelo, de que el precio haya subido 24 horas después. Es una estimación, no una tasa de acierto garantizada. |
avg_up_return /avg_down_return | La subida media cuando el precio subió 24 horas después y la caída media cuando bajó, sin distinguir el nivel del sentimiento del mercado. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, en decimal, no en porcentaje. |
is_data_sufficient | Si hay suficiente historial; con false, toma estos números solo como referencia. |
stat es una estimación, no una tasa de acierto. Valida cualquier umbral con tu propio backtest.