Leia o sinal e a distribuição do indicador, evite dois erros de leitura comuns e leve-o para uma estratégia.
Depois de uma queda forte, o histórico de liquidações mostra uma barra negativa muito profunda. Muitos comprados foram liquidados, ou o valor desta moeda costuma ficar negativo de qualquer forma? 0 não é o nível normal da moeda, e esse ponto decide como você lê essa barra. Se você está olhando as liquidações por nível de preço, isso é outra estimativa; veja como ler o mapa de liquidações.
O indicador de liquidação é um indicador próprio da Blave que mede se, num período, mais vendidos ou mais comprados foram fechados à força, e quão incomum é a diferença. Liquidação é a corretora fechar à força uma posição alavancada: quando um comprado é liquidado, a corretora envia uma ordem de venda; quando um vendido é liquidado, envia uma de compra.
Positivo significa mais liquidações de vendidos, negativo mais de comprados, e 0 não é o nível normal da moeda. O valor não tem limites:
| Valor | Significado |
|---|---|
| > 0 | Mais liquidações de vendidos que de comprados dentro do timeframe |
| < 0 | Mais comprados que vendidos foram liquidados |
| ≈ 0 | Os dois lados se anulam, não houve liquidações registradas ou os dados foram interrompidos; não é o nível normal da moeda |
A distribuição é assimétrica: a cauda inferior (liquidações de comprados) é mais profunda que a superior. Estes são os quantis medidos pela Blave com candles de 1 hora, timeframe 24h, de 2024-09-15 a 2026-09-14, um valor por hora (n = 17,520):
| Moeda | p1 | p50 | p99 | Tempo acima de 0 |
|---|---|---|---|---|
| BTC | −3.76 | −0.01 | +3.31 | 48.8% |
| ETH | −4.07 | −0.08 | +2.79 | 43.1% |
| SOL | −4.01 | −0.17 | +2.87 | 37.6% |
| DOGE | −4.07 | −0.23 | +2.97 | 31.1% |
Acima de 0 há mais liquidações de vendidos que de comprados; abaixo de 0, mais de comprados que de vendidos. Mas numa moeda em que por muito tempo se liquidam mais comprados, o valor fica sistematicamente negativo, então 0 não é o "nível normal" dela.
A tabela acima mostra a parcela do tempo acima de 0 nesse período medido (candles de 1h, timeframe 24h). O mesmo 0 fica perto da mediana no BTC, mas no DOGE já pende para liquidações de vendidos mais do que na maior parte do tempo.
Os dados públicos de liquidação das corretoras têm um limite de envio, então nem todas as liquidações do mesmo momento são enviadas. Por isso é uma amostra, e quanto mais violento o movimento, mais fica abaixo do real. Enquanto os dados estão interrompidos, o valor parece como se não tivesse havido liquidações, sem nenhuma marcação de dados faltantes.
Então não leia a profundidade de uma única barra como o tamanho exato das liquidações; veja em que ponta da distribuição da própria moeda ela cai.
Hoje nenhuma estratégia oficial usa dados de liquidação, então os três usos abaixo são esboços sem backtest. Os limiares do código usam como ponto de partida os quantis medidos acima; não vieram de uma varredura de parâmetros. Para fazer a varredura, veja Como varrer limiares.
O caminho mais direto é marcar os períodos em que o valor cai em uma das caudas. Como a cauda inferior é mais profunda, não use o mesmo valor absoluto para os dois lados. No BTC, p1 fica perto de −3.8 e p99 perto de +3.3.
LONG_FLUSH_TH = -3.8 # esboço: perto do p1 do BTC em 1h × 24h SHORT_FLUSH_TH = 3.3 # esboço: perto do p99 do BTC em 1h × 24h liq = fetch_liquidation(SYMBOL, INTERVAL, START, END, hdrs, timeframe='24h') df['LIQ'] = liq['alpha'] long_flush = df['LIQ'] <= LONG_FLUSH_TH # liquidações concentradas de comprados short_flush = df['LIQ'] >= SHORT_FLUSH_TH # liquidações concentradas de vendidos
Como operar essas marcas é pesquisa sua: a Blave não verificou se o preço reverte ou continua depois de liquidações concentradas. Os quantis também variam por moeda; ETH, SOL e DOGE têm p1 mais profundo que o BTC, então recalcule ao trocar de moeda.
Como 0 não é ponto de equilíbrio, uma regra do tipo "acima de 0, os vendidos estão sendo liquidados" falha em moedas como o DOGE, que passam longos períodos no negativo. Use os quantis da própria moeda numa janela passada, menos afetados por esse viés de longo prazo:
# esboço: quantis dos últimos 180 dias; tamanho da janela não varrido
lo = df['LIQ'].rolling('180D').quantile(0.01)
hi = df['LIQ'].rolling('180D').quantile(0.99)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
Com uma janela curta demais, os limiares derivam com o mercado recente. Também não deixe a janela entrar no trecho em que a moeda tinha acabado de começar a ter dados (BTC e ETH, por volta de 2023-01): ali os valores ainda não são estáveis e geram extremos falsos.
Um uso mais conservador é somá-lo à regra de entrada de uma estratégia existente: não abrir posições novas enquanto o valor estiver em uma das caudas. Reaproveite os dois limiares do uso 1 e troque compute_entry pela condição de entrada da sua estratégia:
# esboço: sem entrada enquanto o valor estiver em uma das caudas flush = (df['LIQ'] <= LONG_FLUSH_TH) | (df['LIQ'] >= SHORT_FLUSH_TH) entry = compute_entry(df) & ~flush
Essa combinação não tem backtest, e a Blave não verificou se evitar liquidações concentradas melhora o desempenho. Ela só trata "acabou de haver uma onda de liquidações" como motivo para pausar entradas novas.
O indicador de liquidação tem duas configurações. O timeframe é o trecho de tempo de liquidações que ele olha: 15min, 1h, 4h, 8h, 24h ou 3d, com 24h como padrão. O intervalo (period) define a frequência com que um valor é tomado: 5min, 15min, 1h, 4h, 8h ou 1d. Mudar o timeframe muda a distribuição; esta é a medição do mesmo período com timeframe 1h (candles de 1 hora):
| Moeda | p1 | p50 | p99 | Tempo acima de 0 |
|---|---|---|---|---|
| BTC | −2.62 | 0.00 | +2.12 | 52.5% |
| ETH | −2.84 | 0.00 | +2.17 | 48.8% |
| SOL | −3.07 | 0.00 | +2.21 | 45.5% |
| DOGE | −3.50 | 0.00 | +2.09 | 40.3% |
Comparado com 24h, 1h tem caudas mais estreitas, mediana 0.00 em todas as moedas e uma fatia acima de 0 mais próxima da metade. Recalcule os limiares sempre que mudar o timeframe; um conjunto de números não vale para outro. 15min, 4h, 8h e 3d não foram medidos aqui.
Os quantis são só um ponto de partida. Liste uma fileira de limiares candidatos para o lado comprado e outra para o vendido (por exemplo p1, p2, p5 contra p99, p98, p95), faça backtest de cada combinação e escolha uma região onde todos os resultados sejam razoáveis, não a melhor célula.
results = []
for q_lo in [0.01, 0.02, 0.05]:
for q_hi in [0.95, 0.98, 0.99]:
lo = df['LIQ'].rolling('180D').quantile(q_lo)
hi = df['LIQ'].rolling('180D').quantile(q_hi)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
entry = compute_entry(df) & ~extreme
results.append((q_lo, q_hi, backtest(entry))) # troque backtest pela sua própria função de backtest; compare cada combinação depois das taxas
Faça a varredura de novo sempre que mudar o timeframe, a moeda ou o intervalo de candles. Para entender por que escolher uma região plana e não o ponto mais alto, veja Evitando overfitting.
| Página | O que mostra | Acesso |
|---|---|---|
| Visão geral de liquidações | Um menu alterna os rankings de liquidações de vendidos e de comprados, 30 moedas em cada. O tamanho do bloco é o valor absoluto, não o valor liquidado; a cor é a variação de preço no timeframe. | Com login |
| Histórico de liquidações | Barras do indicador de liquidação de uma moeda sobre o preço, com opções de timeframe e intervalo dos candles e os campos de stat. | Sem Pro, os últimos 7 dias chegam com atraso |
São ideias de combinação, não resultados verificados:
| Combinação | Uso |
|---|---|
| Liquidações + Caçador de baleias | Use o Caçador de baleias para achar movimentos incomuns do open interest e veja em qual cauda o indicador de liquidação estava no mesmo período, para saber se o movimento veio com liquidações concentradas. |
| Liquidações + Intensidade taker | O indicador de liquidação só vê o lado que foi fechado à força; use a Intensidade taker para ver com que força os traders compravam e vendiam de forma agressiva no mesmo trecho e completar a metade voluntária. |
O endpoint do indicador de liquidação é GET /liquidation/get_alpha, com symbol, period, timeframe (padrão 24h) e datas de início e fim (start_date, end_date); no Blave Agent a função é fetch_liquidation. Só retorna candles fechados, com timestamp, alpha e stat, e intervalos maiores que 1 ano são cortados. As moedas mais antigas (BTC, ETH) têm dados desde 2023-01-01, com valores 0 antes disso; outras moedas podem começar mais tarde. Os valores do trecho em que os dados acabaram de começar ainda não são estáveis, então não defina limiares com eles.
O objeto stat de get_alpha descreve o valor mais recente:
| Campo | Significado |
|---|---|
up_prob | A probabilidade, estimada pelo modelo, de o preço estar em alta 24 horas depois. É uma estimativa, não uma taxa de acerto garantida. |
avg_up_return /avg_down_return | A alta média quando o preço subiu 24 horas depois e a queda média quando caiu, sem distinguir o nível do indicador de liquidação. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, em decimal, não em porcentagem. |
is_data_sufficient | Se há histórico suficiente; com false, use estes números só como referência. |
Para os endpoints e campos do mapa de liquidações, da variação do mapa e da página por corretora, veja Como ler o mapa de liquidações.
stat é uma estimativa, não uma taxa de acerto. Valide qualquer limiar com seu próprio backtest.