Entiende cómo se calcula la prima del perpetuo, evita los dos errores de lectura más comunes y llévala a una estrategia.
El perpetuo cotiza por encima del spot. ¿Significa que el mercado es optimista? El sentimiento del mercado mide cuánto están los perpetuos de Binance por encima del precio índice, pero usa una brecha en USDT y solo se compara con los últimos 30 días de la propia moneda. Esos dos detalles son donde más gente lo malinterpreta.
El sentimiento del mercado (Market Sentiment, MS) es el indicador de prima de futuros de Blave. Compara el cierre de los perpetuos USDT-M de Binance con el precio índice de Binance y convierte la brecha en un z-score frente a los últimos 30 días de esa moneda. El precio índice es una combinación ponderada que Binance calcula con precios spot de varios exchanges, no el precio spot de un único exchange. El cálculo tiene tres pasos:
| Paso | Qué calcula |
|---|---|
| 1. Brecha | Cada 5 minutos, cierre del perpetuo menos cierre del precio índice, en USDT. Por encima de 0 es prima; por debajo, descuento. |
| 2. Suavizado | Una mediana móvil de 1 día de la brecha filtra los saltos de corta duración. |
| 3. Estandarización | Un z-score con la media y la desviación estándar de los últimos 30 días da el valor final. |
Al ser un z-score, el valor no tiene límites fijos y todas las monedas quedan en la misma escala. Un valor positivo indica que la brecha es mayor de lo habitual en los últimos 30 días: los largos están dispuestos a pagar más en el perpetuo. Los datos no contienen número de traders ni posiciones. Las insignias de estado de Studio usan estos umbrales:
| Valor | Insignia en Studio | Significado |
|---|---|---|
| ≥ +3 | Excesivamente optimista | Brecha muy por encima de lo normal en 30 días, una lectura extrema |
| +2 ~ +3 | Muy optimista | Brecha claramente por encima de lo normal |
| +0.5 ~ +2 | Optimista | Brecha por encima de lo normal |
| −0.5 ~ +0.5 | Neutral | En línea con lo normal de 30 días |
| ≤ −0.5 | Pesimista / Muy pesimista / Excesivamente pesimista | Espejo del lado positivo en −0.5, −2 y −3: la brecha está por debajo de lo normal y el perpetuo está débil frente al índice |
La materia prima es el precio del perpetuo menos el precio índice en USDT, y nada en el cálculo divide por el precio. Por eso, con la prima porcentual sin cambios, la brecha en USDT crece a medida que sube el precio de la misma moneda. Entre monedas distintas, el nivel de precio no importa, porque cada una se estandariza frente a sí misma.
Un ejemplo hipotético: hace 30 días una moneda cotizaba cerca de 1 USDT y el perpetuo estaba 0.001 USDT por encima del índice, una prima del 0.1%. Después el precio sube a 2 USDT y la prima sigue en 0.1%, pero la brecha ya es de 0.002 USDT. El porcentaje no cambió, pero la brecha supera su media de 30 días, así que el sentimiento del mercado sube. Una caída fuerte del precio dentro de 30 días funciona al revés y empuja el valor hacia abajo.
El z-score compara la moneda con su propia media de 30 días. Si el perpetuo de una moneda mantiene más o menos la misma prima durante dos meses, la media sube hasta alcanzarla y el sentimiento del mercado vuelve cerca de 0. Aquí 0 significa "parecido a los últimos 30 días", no "sin prima".
También ocurre al revés. Cuando una moneda pasa de una prima grande a una pequeña, la brecha cae por debajo de su media de 30 días y el valor puede volverse negativo aunque el perpetuo siga por encima del índice. El mismo +2 en otra moneda u otro mes puede reflejar brechas reales muy distintas.
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 de Studio como punto de partida; no salen de un escaneo de parámetros, así que haz tu propio backtest antes de usarlos.
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 # brecha por encima de lo normal -> largo
signal[df['MS'] < exit_th] = 0.0 # brecha por debajo de lo normal -> sin posición
return signal
Como el valor ya es una mediana de 1 día, esta señal sigue los cambios diarios de la brecha y no reacciona a movimientos de precio de pocos minutos. No tiene backtest, así que escanea tú mismo los umbrales y la dirección (a favor o en contra de la tendencia).
Un valor de ±3 indica que la brecha es extrema frente a los últimos 30 días. Un uso prudente es no tratarlo como señal de entrada, sino añadirlo a la regla de entrada de una estrategia existente para no abrir posiciones nuevas mientras siga extremo:
# esbozo: sin entrada mientras |MS| >= 3 (lectura excesiva) too_hot = df['MS'].abs() >= 3 entry = compute_entry(df) & ~too_hot
No es una señal de reversión y no tiene backtest. Blave no ha verificado que el precio se dé la vuelta tras una lectura de ±3, ni que saltarse esas lecturas mejore los resultados; aquí una brecha extrema solo pausa las entradas nuevas. Como ±3 es relativo a los últimos 30 días, una moneda con una brecha muy estable puede llegar a ±3 con un cambio pequeño. Sustituye compute_entry por la condición de entrada de tu estrategia.
El sentimiento del mercado es una señal lenta, de escala diaria, adecuada como filtro de fondo: acepta señales de largo de un indicador de ventana corta, como la Intensidad taker, solo mientras el sentimiento del mercado esté por encima de 0, y quédate fuera cuando baje a 0 o menos. La estructura siguiente es un esbozo; 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: solo largo si la brecha supera su media de 30 días 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.0
Esta 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 hay un parámetro de ventana como el timeframe de Cazador de ballenas. Elijas el intervalo que elijas, el valor ya es una mediana de 1 día, así que el intervalo solo define cada cuánto lees el valor; no elimina el suavizado de fondo con la mediana de 1 día.
| Intervalo | Rango por defecto en Studio | Notas |
|---|---|---|
5min / 15min | 5min: 3 días; 15min: 7 días | El gráfico más denso, pero sigue mostrando cambios suavizados a escala diaria; no sirve para operar a 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 para captar movimientos de corto plazo. Los datos empiezan el 2020-01-01 (o en la fecha de listado de la moneda). El z-score necesita 30 días de muestras, así que los valores con sentido empiezan hacia el 2020-01-31, y lo mismo vale para los primeros 30 días de una moneda recién listada.
| Página | Qué muestra |
|---|---|
| Resumen | Un indicador semicircular del sentimiento general (sentimiento del mercado de todas las monedas, ponderado por el valor del interés abierto en USDT) y dos rankings, optimista y pesimista, con moneda, variación 24h, índice y estado. |
| Sectores | Ranking del sentimiento del mercado por sector; el valor de cada sector es la media de sus monedas ponderada por el valor del interés abierto. |
| 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 la brecha se amplía, revisa Cazador de ballenas para ver si el interés abierto sube de forma inusual al mismo tiempo y juzgar si hay posiciones nuevas detrás de la prima. |
| MS + Intensidad taker | El sentimiento del mercado reacciona despacio; la Intensidad taker muestra compras y ventas agresivas en ventanas cortas y cubre 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. Solo cubre perpetuos USDT-M de Binance; otros exchanges no están incluidos. 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 la lectura más reciente, y sus nombres no coinciden del todo con lo que calculan:
| Campo | Qué calcula en realidad |
|---|---|
up_prob | Una regresión logística entrenada con los últimos 365 días usa el sentimiento del mercado para predecir si el precio subirá o bajará 24h después y devuelve la probabilidad de subida. Los datos de entrenamiento incluyen el periodo actual, así que es una estimación dentro de la muestra, no una tasa de acierto fuera de la muestra. |
avg_up_return /avg_down_return | Rentabilidad media a 24h de todos los resultados al alza o a la baja de los últimos 365 días, sin distinguir el nivel de 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 los datos de la moneda empiezan hace más de 365 días, no si este nivel de lectura tiene suficientes muestras. |
stat es una estimación dentro de la muestra. Verifica cualquier umbral con tu propio backtest.