Como calcular a put/call ratio
Veja a fórmula da put/call ratio com volume e open interest, entenda por que índices têm leituras maiores e como avaliar uma leitura normal em 2026.
A put/call ratio é calculada dividindo o número de contratos de put negociados pelo número de contratos de call negociados no mesmo intervalo. Se 250.000 puts e 500.000 calls forem negociados numa sessão, o índice será de 0,50. Toda discussão sobre o indicador, incluindo volume versus open interest e ações versus índice, remete ao que foi contabilizado em cada lado dessa divisão. Para uma definição simples, comece por o que é a put/call ratio. Esta página faz o cálculo.
A fórmula do put/call ratio, passo a passo
A fórmula tem duas entradas e uma operação: contar os puts negociados, contar as calls negociadas e dividir o primeiro número pelo segundo. Um put é um contrato que dá ao seu titular o direito de vender 100 ações do ativo-objeto a um strike fixo, até o vencimento ou na própria data de vencimento. Uma call dá o direito de comprar a um strike fixo. O volume contabiliza os contratos que trocaram de mãos durante o pregão e volta a zero na abertura seguinte.
Nenhuma posição recebe peso diferente na contagem. Um lote de uma opção semanal muito fora do dinheiro conta tanto quanto um lote no strike mais negociado do painel. Nenhum dos dois é ajustado pelo dinheiro em risco. O ratio é uma contagem de contratos.
A escolha que altera o resultado é definir quais contratos entram na contagem. O painel abaixo aplica a mesma aritmética a oito nomes líquidos durante um mês completo.
O SQL exato por trás de cada número
SELECT
underlying_symbol AS symbol,
sumIf(volume, right_letter = 'P') AS put_volume,
sumIf(volume, right_letter = 'C') AS call_volume,
round(toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')), 2) AS put_call_ratio
FROM
(
SELECT
underlying_symbol,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-07-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY symbol
HAVING call_volume > 0 AND put_volume > 0
ORDER BY put_call_ratio DESCEm julho de 2026, IWM apresentou o maior ratio dos oito, com 3.11 puts por call, enquanto MSFT teve o menor, com 0.38. Uma fórmula, um mês e uma diferença entre o nome no topo e o nome na base muito maior do que a oscilação diária normalmente destacada. Um ratio divulgado sem a categoria a que pertence transmite quase nenhuma informação.
Baseado em volume ou em open interest
Dois tipos de contagem podem preencher o numerador e o denominador.
A versão baseada em volume contabiliza os contratos negociados no período. É uma medida de fluxo que começa do zero a cada sessão e mostra o que os participantes fizeram naquele dia. Todo put/call ratio citado nas coberturas de mercado é calculado dessa forma.
A versão baseada em open interest divide as puts em aberto pelas calls em aberto. Open interest é o número de contratos abertos que ainda não foram encerrados, exercidos ou expirados. Trata-se de uma medida de estoque: a posição acumulada, e não a atividade do dia. Por isso, ela se move lentamente. Uma sessão em que 30.000 puts trocam de mãos entre dois titulares que já detinham os contratos acrescenta 30.000 ao volume, mas deixa o open interest inalterado. Volume de opções versus open interest explica esses registros.
Considere um ativo hipotético que encerra a terça-feira com 40.000 puts e 50.000 calls em aberto. O open interest ratio é de 0,80. Na quarta-feira, são negociadas 30.000 puts e 10.000 calls, resultando em um volume ratio de 3,00. Os dois números descrevem a mesma cadeia de opções no mesmo dia. Eles diferem por quase um fator de quatro, e ambos estão corretos. Os open interest ratios também estão na base do cálculo do max pain, que pondera os strikes pelo número de contratos em aberto, e não pelo número de contratos negociados.
As medidas de fluxo oscilam bastante. Abaixo está o volume ratio diário de um ETF e de uma ação individual ao longo do mesmo mês.
O SQL exato por trás de cada número
SELECT
toString(d) AS session_date,
concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
round(toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'P'))
/ toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'C')), 2) AS spy_put_call_ratio,
round(toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'P'))
/ toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'C')), 2) AS aapl_put_call_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-07-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'AAPL')
AND volume > 0
)
GROUP BY d
HAVING countIf(sym = 'SPY' AND right_letter = 'C') > 0
AND countIf(sym = 'AAPL' AND right_letter = 'C') > 0
ORDER BY dEm Jul 1, o SPY registrou 1.1, contra 0.49 da AAPL. Em Jul 31, os dois números eram 2 e 0.55. Ao longo de 22 sessões, os prints diários oscilam, e as duas séries permanecem em níveis diferentes no gráfico. A diferença entre os níveis é o dado mais útil dos dois.
Ações, índices, ETPs e total: quatro ratios da Cboe
O número divulgado como “put/call ratio” vem das estatísticas diárias de mercado da Cboe, que publica várias métricas desse tipo. Estas são as categorias, segundo a nomenclatura da Cboe:
- Put/call ratio de ações: opções sobre ações individuais.
- Put/call ratio de índices: opções sobre índices, incluindo SPX e VIX.
- Put/call ratio de produtos negociados em bolsa: opções sobre ETFs, categoria que inclui SPY, QQQ e IWM.
- Put/call ratio total: soma de todas as categorias.
Todos são calculados da mesma forma: total de puts dividido pelo total de calls dentro da categoria. Portanto, as leituras diferem apenas pelos ativos incluídos em cada grupo. As categorias não são intercambiáveis.
As opções de índices são o instrumento padrão para proteger uma carteira inteira em uma única operação. Um fundo com uma carteira ampla de ações compra puts de índice para fazer hedge e não tem motivo equivalente para comprar calls de índice. Essa demanda ocorre em apenas uma direção e aparece integralmente no numerador da categoria de índices. O fluxo de ações individuais tem a inclinação oposta: a compra de calls sobre ações específicas representa uma parcela grande e persistente do volume. As duas categorias operam em níveis diferentes por uma questão estrutural. Comparar a leitura de uma categoria com um benchmark de outra é o erro mais comum no uso desse indicador.
ETFs amplos de mercado cumprem a mesma função de hedge que as opções de índices, mas são contabilizados na categoria de produtos negociados em bolsa. O painel abaixo acompanha a mediana mensal dos dois lados dessa divisão.
O SQL exato por trás de cada número
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM'))) AS etf_ratio,
toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2025-08-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
)
SELECT
toString(toStartOfMonth(d)) AS month,
formatDateTime(toStartOfMonth(d), '%b %Y') AS month_label,
round(quantileExact(0.5)(etf_ratio), 2) AS etf_median_ratio,
round(quantileExact(0.5)(stock_ratio), 2) AS stock_median_ratio
FROM daily
GROUP BY month, month_label
ORDER BY monthO painel vai de Aug 2025 a Jul 2026. Nas duas pontas, a mediana do ratio diário da cesta de ETFs ficou próxima de 1,0 ou acima desse nível: 1.52 no primeiro mês e 1.49 no último. A cesta de ações individuais ficou abaixo de 1,0 nas duas pontas, em 0.6 e 0.56, ao longo dos 12 meses apresentados no gráfico. Essa diferença persistente explica por que um benchmark precisa identificar sua categoria antes de ter qualquer significado.
O que é considerado um put/call ratio normal
Normal é uma faixa, e essa faixa pertence a uma categoria, não ao indicador. O painel abaixo considera todas as sessões dos últimos doze meses e apresenta a mediana do ratio diário para cada cesta, com os limites do 10.º e do 90.º percentis em torno dela.
O SQL exato por trás de cada número
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM'))) AS etf_ratio,
toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio,
toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')) AS all_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2025-08-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
)
SELECT
p.2 AS category,
round(quantileExact(0.1)(p.3), 2) AS p10_ratio,
round(quantileExact(0.5)(p.3), 2) AS median_ratio,
round(quantileExact(0.9)(p.3), 2) AS p90_ratio
FROM
(
SELECT arrayJoin([
tuple(1, 'Broad market ETFs', etf_ratio),
tuple(2, 'Single stocks', stock_ratio),
tuple(3, 'All eight names', all_ratio)
]) AS p
FROM daily
)
GROUP BY p.1, p.2
ORDER BY p.1Na cesta de ações individuais, a mediana das sessões ficou em 0.58, com 0.45 no 10.º percentil e 0.76 no 90.º. A cesta de ETFs do mercado amplo ficou acima em toda a distribuição: mediana de 1.54, entre os limites de 1.25 e 1.86.
Então, 1,20 é alto? Em relação à cesta de ações individuais, um print de 1,20 fica acima do 90.º percentil de 0.76, o que o torna incomum. Em relação à cesta de ETFs, está próximo do padrão habitual. Na categoria de índices, onde se concentra o fluxo de proteção descrito acima, o mesmo número precisa ser avaliado em relação a outro conjunto de níveis. Um único número, e a categoria define a conclusão antes de qualquer interpretação.
Essas faixas também mudam ao longo do tempo. Percentis calculados sobre os últimos doze meses descrevem os últimos doze meses. Uma faixa de referência copiada de um artigo escrito há uma década descreve um mercado com uma composição diferente de contratos e praticamente sem negociação de opções com vencimento no mesmo dia. Recalcular os percentis em uma janela recente é a única forma rigorosa de classificar uma leitura como alta ou baixa.
A interpretação é uma tarefa separada do cálculo. Alguns interpretam uma leitura alta como posicionamento baixista. Para os contrarians, ela indica uma proteção congestionada. A análise de se um put/call ratio alto é bullish examina esse argumento de forma adequada.
Por que a média móvel de 21 sessões
O rácio de uma única sessão é uma amostra pequena de uma série ruidosa, por isso a versão publicada normalmente é suavizada. A convenção mais comum é uma média móvel de 21 sessões, aproximadamente um mês de negociação: soma-se os rácios diários das últimas 21 sessões, divide-se o resultado por 21 e avança-se a janela uma sessão. Também existem versões de dez e 50 sessões. O período escolhido determina quanto de um pico isolado sobrevive.
Dois detalhes merecem atenção. Calcular a média de 21 rácios diários não é a mesma operação que dividir o volume mensal de puts pelo volume mensal de calls. No primeiro caso, todas as sessões têm o mesmo peso. No segundo, as sessões mais movimentadas pesam mais. Além disso, uma leitura suavizada num extremo foi formada ao longo de um mês de sessões. Por isso, também sai desse extremo de forma lenta.
O SQL exato por trás de cada número
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')) AS raw_ratio
FROM
(
SELECT
date AS d,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-01-02'
AND date < '2026-08-01'
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C') > 0
)
SELECT
session_date,
day_label,
daily_ratio,
ma21_ratio
FROM
(
SELECT
d,
toString(d) AS session_date,
concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
round(raw_ratio, 2) AS daily_ratio,
round(avg(raw_ratio) OVER (ORDER BY d ROWS BETWEEN 20 PRECEDING AND CURRENT ROW), 2) AS ma21_ratio
FROM daily
)
WHERE d >= '2026-04-01'
ORDER BY dA linha irregular mostra o rácio diário da cesta de ações individuais. A linha suave mostra a respetiva média de 21 sessões. Na primeira sessão apresentada, Apr 1, o print diário foi 1.04, contra uma leitura suavizada de 0.81. Em Jul 31, os dois valores foram 0.56 e 0.58. Ao longo de 84 sessões, a média percorre uma fração da distância coberta pela série bruta. Esse é precisamente o objetivo de apresentar o número suavizado.
Como estes painéis fazem a contagem
O tipo de contrato vem do próprio símbolo da opção: a letra que aparece antes do código de strike com oito dígitos é C para call e P para put. Só entram na contagem os contratos com volume reportado na sessão. Assim, um strike que não foi negociado não acrescenta nada a nenhum dos lados. O primeiro painel divide o volume total mensal de puts pelo volume total mensal de calls para cada nome. Os painéis restantes calculam primeiro um rácio por sessão e depois resumem essas sessões, reproduzindo a forma como uma média móvel publicada é construída. Cestas: SPY, QQQ e IWM no segmento do mercado amplo; AAPL, MSFT, NVDA, TSLA e KO no segmento de ações individuais. Cada painel inclui o SQL exato que o produziu.
Perguntas frequentes
Como se calcula o put/call ratio?
Divida o número de contratos de put pelo número de contratos de call no mesmo período. A maioria das versões publicadas usa o volume da sessão. Assim, uma leitura de 0,65 significa que foram negociadas 65 puts para cada 100 calls. A versão baseada em open interest usa os contratos em aberto, e não os contratos negociados, e responde a uma pergunta diferente.
Um put/call ratio acima de 1 é alto?
Depende da categoria. Para a cesta de ações individuais dos painéis acima, o percentil 90 das leituras diárias está em 0.76. Portanto, prints acima desse nível são incomuns. Para ETFs amplos de mercado e opções sobre índices, nos quais a proteção de carteiras se concentra no lado das puts, leituras próximas de 1 ou acima desse nível são comuns.
Qual é a diferença entre o put/call ratio baseado em volume e o baseado em open interest?
O volume contabiliza os contratos negociados durante a sessão e é zerado a cada manhã. O open interest contabiliza os contratos que continuam em aberto e é carregado de um dia para o outro. A versão baseada em volume pode dobrar dentro de uma mesma sessão, enquanto a versão baseada em open interest pode variar apenas alguns pontos percentuais. Por isso, os dois indicadores frequentemente apontam em direções diferentes no mesmo dia.
Qual put/call ratio é citado pela imprensa financeira?
Normalmente, o put/call ratio de ações da Cboe ou o put/call ratio total. Na maioria das vezes, a imprensa cita uma média móvel de 21 sessões, e não o print diário bruto. As quatro categorias da Cboe operam em níveis diferentes. Portanto, um número citado sem a categoria correspondente não pode ser comparado com nenhum benchmark.
Cada painel desta página vem acompanhado do SQL que o gerou. Assim, cada contagem pode ser verificada linha a linha. Para executar o mesmo cálculo com outro ativo ou em uma janela mais longa, faça o pedido em linguagem simples no terminal Strasmore.