Entenda como o prêmio do perpétuo é calculado, evite os dois erros de leitura mais comuns e leve o indicador para uma estratégia.
O perpétuo está acima do spot. Isso quer dizer que o mercado está otimista? O Sentimento do mercado mede quanto os perpétuos da Binance estão acima do preço índice, mas usa uma diferença em USDT e só compara com os últimos 30 dias da própria moeda. Esses dois detalhes são onde a maioria das pessoas se engana.
O Sentimento do mercado (Market Sentiment, MS) é o indicador de prêmio dos futuros da Blave. Ele compara o fechamento dos perpétuos USDT-M da Binance com o preço índice da Binance e converte a diferença em z-score frente aos últimos 30 dias da moeda. O preço índice é uma combinação ponderada que a Binance calcula com preços spot de várias exchanges, não o preço spot de uma única exchange. O cálculo tem três etapas:
| Etapa | O que calcula |
|---|---|
| 1. Diferença | A cada 5 minutos, fechamento do perpétuo menos fechamento do preço índice, em USDT. Acima de 0 é prêmio; abaixo, desconto. |
| 2. Suavização | Uma mediana móvel de 1 dia da diferença filtra saltos de curta duração. |
| 3. Padronização | Um z-score com a média e o desvio padrão dos últimos 30 dias dá o valor final. |
Como é um z-score, o valor não tem limites fixos e todas as moedas ficam na mesma escala. Um valor positivo indica que a diferença está maior que o normal dos últimos 30 dias: os comprados aceitam pagar mais no perpétuo. Os dados não trazem número de traders nem posições. Os selos de status do Studio usam estes limiares:
| Valor | Selo no Studio | Significado |
|---|---|---|
| ≥ +3 | Otimismo excessivo | Diferença muito acima do normal de 30 dias, uma leitura extrema |
| +2 ~ +3 | Muito otimista | Diferença claramente acima do normal |
| +0.5 ~ +2 | Otimista | Diferença acima do normal |
| −0.5 ~ +0.5 | Neutro | Em linha com o normal de 30 dias |
| ≤ −0.5 | Pessimista / Muito pessimista / Pessimismo excessivo | Espelho do lado positivo em −0.5, −2 e −3: a diferença está abaixo do normal e o perpétuo está fraco frente ao índice |
A matéria-prima é o preço do perpétuo menos o preço índice em USDT, e nada no cálculo divide pelo preço. Por isso, com o prêmio percentual inalterado, a diferença em USDT cresce conforme o preço da mesma moeda sobe. Entre moedas diferentes, o nível de preço não importa, porque cada moeda é padronizada em relação a si mesma.
Um exemplo hipotético: há 30 dias uma moeda estava perto de 1 USDT e o perpétuo ficava 0.001 USDT acima do índice, um prêmio de 0.1%. Depois o preço sobe para 2 USDT e o prêmio continua em 0.1%, mas a diferença passa a 0.002 USDT. O percentual não mudou, mas a diferença fica acima da média de 30 dias, então o Sentimento do mercado sobe. Uma queda forte do preço dentro de 30 dias funciona ao contrário e empurra o valor para baixo.
O z-score compara a moeda com a própria média de 30 dias. Se o perpétuo de uma moeda mantém mais ou menos o mesmo prêmio por dois meses, a média sobe até alcançá-lo e o Sentimento do mercado volta para perto de 0. Aqui 0 quer dizer "parecido com os últimos 30 dias", não "sem prêmio".
O contrário também acontece. Quando uma moeda sai de um prêmio grande para um pequeno, a diferença cai abaixo da média de 30 dias e o valor pode ficar negativo mesmo com o perpétuo ainda acima do índice. O mesmo +2 em outra moeda ou em outro mês pode refletir diferenças reais bem distintas.
Hoje nenhuma estratégia oficial usa o Sentimento do mercado, então os três usos abaixo são esboços sem backtest. O ±0.5 e o 3 do código pegam emprestados os limiares dos selos do Studio como ponto de partida; não vieram de uma varredura de parâmetros, então faça seu próprio backtest antes de usar.
A versão mais direta: fique comprado quando o Sentimento do mercado passar de um limiar de entrada e zere quando cair abaixo de um limiar de saída. A folga entre os dois evita que a estratégia entre e saia sem parar quando o valor oscila em torno de um único nível.
ENTRY_TH = 0.5 # esboço: limiar do selo Otimista
EXIT_TH = -0.5 # esboço: limiar do selo Pessimista
def compute_signals(df, entry_th=ENTRY_TH, exit_th=EXIT_TH):
# df['MS'] = valor do Sentimento do mercado da moeda
signal = pd.Series(np.nan, index=df.index)
signal[df['MS'] > entry_th] = 1.0 # diferença acima do normal -> comprado
signal[df['MS'] < exit_th] = 0.0 # diferença abaixo do normal -> sem posição
return signal
Como o valor já é uma mediana de 1 dia, esse sinal acompanha as mudanças diárias da diferença e não reage a movimentos de preço de poucos minutos. Não há backtest, então faça a varredura dos limiares e da direção (a favor ou contra a tendência) por conta própria.
Um valor de ±3 indica que a diferença está extrema frente aos últimos 30 dias. Um uso prudente é não tratar isso como sinal de entrada, e sim somar à regra de entrada de uma estratégia existente, sem abrir posições novas enquanto a leitura estiver extrema:
# esboço: sem entrada enquanto |MS| >= 3 (leitura excessiva) too_hot = df['MS'].abs() >= 3 entry = compute_entry(df) & ~too_hot
Não é um sinal de reversão e não tem backtest. A Blave não verificou que o preço vira depois de uma leitura de ±3, nem que pular essas leituras melhora os resultados; aqui a diferença extrema só pausa novas entradas. Como ±3 é relativo aos últimos 30 dias, uma moeda com diferença muito estável pode chegar a ±3 com uma variação pequena. Troque compute_entry pela condição de entrada da sua estratégia.
O Sentimento do mercado é um sinal lento, em escala diária, bom para filtro de fundo: aceite sinais de compra de um indicador de janela curta, como a Intensidade taker, só enquanto o Sentimento do mercado estiver acima de 0, e fique de fora quando ele cair para 0 ou menos. A estrutura abaixo é um esboço; troque compute_fast_entry pela sua própria condição:
ms = fetch_market_sentiment(SYMBOL, INTERVAL, START, END, hdrs) df['MS'] = ms['alpha'] regime_long = df['MS'] > 0 # esboço: só comprado se a diferença supera a média de 30 dias fast_entry = compute_fast_entry(df) # ex.: uma condição de Intensidade taker de janela curta signal = pd.Series(np.nan, index=df.index) signal[regime_long & fast_entry] = 1.0 signal[~regime_long] = 0.0
Esta combinação não tem backtest e o limiar de 0 é só ilustrativo. Faça a varredura de parâmetros e confira o desempenho depois das taxas antes de usar.
O Sentimento do mercado tem um único ajuste: o intervalo dos candles (period), entre 5min, 15min, 1h, 4h, 8h e 1d, com mínimo de 5 minutos. Não existe um parâmetro de janela como o timeframe do Caçador de baleias. Qualquer que seja o intervalo, o valor já é uma mediana de 1 dia, então o intervalo só define a frequência de leitura; ele não remove a suavização de fundo pela mediana de 1 dia.
| Intervalo | Faixa padrão no Studio | Observações |
|---|---|---|
5min / 15min | 5min: 3 dias; 15min: 7 dias | O gráfico mais denso, mas ainda mostra mudanças suavizadas em escala diária; não serve para operar no curto prazo |
1h / 4h | 1h: 14 dias; 4h: 30 dias | Para estratégias que checam a cada poucas horas |
8h / 1d | 8h: 60 dias; 1d: 180 dias | Para ler a tendência do sentimento ao longo de um período maior |
Escolha o intervalo pela frequência com que sua estratégia checa, não para pegar movimentos de curto prazo. Os dados começam em 2020-01-01 (ou na data de listagem da moeda). O z-score precisa de 30 dias de amostras, então os valores com significado começam por volta de 2020-01-31, e o mesmo vale para os primeiros 30 dias de uma moeda recém-listada.
| Página | O que mostra |
|---|---|
| Visão geral | Um medidor semicircular do sentimento geral (Sentimento do mercado de todas as moedas, ponderado pelo valor dos contratos em aberto em USDT) e dois rankings, otimista e pessimista, com moeda, variação 24h, índice e status. |
| Setores | Ranking do Sentimento do mercado por setor; o valor de cada setor é a média das suas moedas ponderada pelo valor dos contratos em aberto. |
| Histórico | Barras do Sentimento do mercado de uma moeda sobre o preço, com intervalos de 5min a 1d e o campo stat. Para usuários sem Pro, os últimos 7 dias aparecem com atraso. |
São ideias de combinação, não resultados verificados:
| Combinação | Para quê |
|---|---|
| MS + Caçador de baleias | Quando a diferença aumenta, confira o Caçador de baleias para ver se os contratos em aberto sobem de forma incomum ao mesmo tempo e avaliar se há posições novas por trás do prêmio. |
| MS + Intensidade taker | O Sentimento do mercado reage devagar; a Intensidade taker mostra compras e vendas agressivas em janelas curtas e cobre os movimentos de curto prazo que ele não enxerga. |
O endpoint da API é GET /market_sentiment/get_alpha, com symbol, period e datas de início e fim (start_date, end_date); no Blave Agent a função é fetch_market_sentiment. Cobre só os perpétuos USDT-M da Binance; outras exchanges não entram. Só retorna candles fechados, com timestamp, alpha e stat e sem preço. Sem data de início, você recebe os últimos 365 dias, e intervalos maiores que 365 dias são cortados.
O objeto stat descreve a leitura mais recente, e seus nomes não correspondem exatamente ao que calculam:
| Campo | O que calcula de fato |
|---|---|
up_prob | Uma regressão logística treinada com os últimos 365 dias usa o Sentimento do mercado para prever se o preço vai subir ou cair 24h depois e retorna a probabilidade de alta. Os dados de treino incluem o período atual, então é uma estimativa dentro da amostra, não uma taxa de acerto fora da amostra. |
avg_up_return /avg_down_return | Retorno médio em 24h de todos os resultados de alta ou de baixa nos últimos 365 dias, sem distinguir o nível do Sentimento do mercado. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, em decimal, não em porcentagem. |
is_data_sufficient | Se os dados da moeda começam há mais de 365 dias, não se este nível de leitura tem amostras suficientes. |
stat é uma estimativa dentro da amostra. Verifique qualquer limiar com seu próprio backtest.