TWAP vs VWAP vs POV: como escolher um benchmark de execução (e saber quando cada um te engana)
Todo scheduler de execução é uma aposta sobre uma previsão de volume. O TWAP aposta que a liquidez é constante no tempo. O VWAP aposta que a curva de volume de hoje vai se parecer com a de ontem. O POV aposta que o volume que está sendo impresso no tape agora é um bom motivo para negociar agora — incluindo a parte do tape que é você mesmo. Nenhuma dessas apostas é rotulada como aposta na documentação dos fornecedores, e é por isso que a maioria das comparações entre os três lê como uma tabela de features: o TWAP é "simples", o VWAP é "inteligente", o POV é "adaptativo". Esse enquadramento não diz nada sobre qual deles te faz perder dinheiro, quando, e quanto.
Este é a parte 2 de uma linha que começamos em Order Types in Algorithmic Trading, onde construímos executores de TWAP e VWAP em ~40 linhas de Python cada. Esses executores servem bem como encanamento básico. Este artigo é sobre tudo o que esse encanamento esconde: as premissas implícitas, a política dos benchmarks, e um experimento reproduzível, lado a lado, sobre dados de order book reproduzidos, que mostra que os três algoritmos não são "sabores diferentes" — são perfis de risco diferentes, com modos de falha diferentes.
Três schedulers, três apostas ocultas
Vamos fixar a notação. Uma ordem-mãe de tamanho deve ser executada ao longo do horizonte , dividida em intervalos. Seja a quantidade da ordem-filha no intervalo , o volume de mercado no intervalo , e o preço médio no intervalo . O VWAP de mercado ao longo do horizonte é
O TWAP negocia : quantidades iguais em tempos iguais. A premissa implícita é que a liquidez — profundidade, spread, volume — é uniforme no tempo, de modo que fatias iguais geram impacto igual. Isso é falso em qualquer mercado que já existiu, mas falha graciosamente: o schedule é determinístico, a conclusão é garantida por construção, e o pior caso é negociar um lote fixo numa hora rarefeita e pagar spreads mais largos por isso. A segunda premissa, menos discutida, é que ninguém está observando. Um TWAP que dispara uma ordem-filha a cada 60 segundos, sempre em :00, é um metrônomo, e metrônomos são alvo de front-running. Qualquer TWAP sério aleatoriza o timing e o tamanho das ordens-filhas; o schedule deveria ser um processo quase-Poisson cuja expectativa é constante, não um relógio.
O VWAP negocia , onde é a fração prevista do volume diário no intervalo , com . Agora a aposta é explícita: você mantém uma curva estimada a partir do histórico, e assume que o dia de hoje vai segui-la. A premissa não é que o volume seja constante, mas sim que ele é previsível e exógeno — a curva não se importa se você está negociando ou não. Quando a previsão é boa, o VWAP concentra seu trading onde o mercado consegue absorvê-lo, e seu slippage em relação ao VWAP de mercado é pequeno quase por tautologia. Quando a previsão é ruim — um evento de notícia não programado desloca 40% do volume do dia para uma hora à qual sua curva atribuiu 6% — o VWAP continua negociando serenamente o schedule desatualizado, e você absorve a diferença. O VWAP converte risco de execução em risco de previsão de volume. É essa a troca completa, e é por isso que a engenharia interessante num motor de VWAP está no previsor, não no fatiador.
O POV (percentage of volume, também chamado "participação") abandona a previsão: negocia , uma fração fixa do volume observado em cada intervalo. Isso parece dominar o VWAP — por que prever volume quando você pode simplesmente segui-lo? A pegadinha é que o sinal agora é endógeno. Seus próprios fills aparecem impressos no tape. Se o resto do mercado negocia num intervalo e você mira a fração do volume total do tape, sua quantidade resolve , ou seja,
Em essa correção é leve (11,1% do volume de terceiros). Em você está negociando 33% de todo o fluxo alheio; em você iguala todo o resto do mercado um-para-um e o ponto fixo diverge. O POV também abre mão da única garantia que TWAP e VWAP oferecem: não há prazo de conclusão. Se o volume desaparece, seu schedule também desaparece. Voltaremos às patologias do POV mais adiante, porque merecem uma seção própria.
Um enquadramento adicional que será relevante depois: nenhum dos três é "ótimo" em sentido formal algum. O scheduler que de fato minimiza um objetivo de custo-risco é a família Almgren–Chriss (Almgren and Chriss, 2000, "Optimal Execution of Portfolio Transactions," Journal of Risk 3, 5–39), que tratamos apropriadamente em Almgren–Chriss and the theory of optimal execution schedules. O TWAP é o caso especial de Almgren–Chriss com aversão a risco zero sob impacto linear; o VWAP é a estratégia de erro de tracking mínimo contra um benchmark ponderado por volume (Konishi, 2002, "Optimal slice of a VWAP trade," Journal of Financial Markets 5(2)); o POV é uma heurística que não corresponde a nenhuma função-objetivo, o que explica exatamente por que seus modos de falha são tão peculiares.
Estimando curvas de volume quando o mercado nunca fecha
A literatura de ações teve vida fácil. O volume intradiário em ações forma um U — pesado na abertura, fraco no almoço, pesado perto do fechamento — documentado desde Jain and Joh (1988, "The Dependence between Hourly Prices and Trading Volume," JFQA 23(3)) e fundamentado teoricamente por Admati and Pfleiderer (1988, "A Theory of Intraday Patterns: Volume and Price Variability," Review of Financial Studies 1(1)), que mostraram que traders discricionários de liquidez e traders informados se agrupam endogenamente no tempo. O formato em U é ancorado por dois eventos concretos, os leilões de abertura e fechamento, então a curva é estável e uma média móvel de 20 dias das participações de volume por intervalo já resolve 90% do problema.
Cripto não tem abertura nem fechamento, então o palpite ingênuo é que o volume deveria ser constante e TWAP ≈ VWAP. Esse palpite ingênuo está errado. O volume intradiário em cripto tem estrutura — só que ancorada em relógios diferentes:
Efeitos de sessão. O volume acompanha o horário em que as pessoas e as mesas que o negociam estão acordadas. Em BTC e ETH majors, a faixa mais pesada é a tarde americana sobrepondo a noite europeia (aproximadamente 13:00–21:00 UTC), com um patamar secundário na sessão asiática entre 00:00–08:00 UTC e um vale pronunciado por volta de 04:00–06:00 UTC nos majors. Pares alternativos com propriedade regional concentrada inclinam-se ainda mais forte para sua sessão de origem.
Marcos de funding. Os futuros perpétuos liquidam funding em horários UTC fixos — historicamente a cada 8 horas, às 00:00, 08:00, 16:00 UTC, com a Binance e outras exchanges migrando muitos contratos para ciclos de liquidação de 4 horas e até 1 hora desde 2025–2026. Os minutos ao redor da liquidação registram de forma consistente volume elevado: traders de basis abrem e fecham posições de carry, e quem quer que esteja explorando o snapshot de funding negocia bem na fronteira do horário. Esses são picos, não patamares — uma curva com buckets de 30 minutos os enxerga; uma curva com buckets de 2 horas os dissolve na média, e seu VWAP participa de menos exatamente quando a liquidez está melhor.
Sazonalidade semanal. O volume de fim de semana nos majors roda estruturalmente abaixo do volume de dia útil, e o domingo à noite UTC (segunda-feira de manhã na Ásia, mais a reabertura da CME para futuros de BTC) tem sua própria assinatura. Uma única curva de horário-do-dia agrupada entre todos os dias está mal especificada; o ideal é uma grade de dia-da-semana × horário-do-dia.
Eventos programados. As opções da Deribit expiram às 08:00 UTC (sextas-feiras, com clusters trimestrais), os dados macroeconômicos dos EUA saem às 12:30/14:00 UTC, as liquidações da CME importam para os fluxos de basis. Esses são traços de calendário, não sazonalidade — trate-os como dummies, não como poluição da curva de base.
Um estimador funcional, no espírito de manter o previsor honesto antes de torná-lo sofisticado:
import pandas as pd
def volume_curve(trades: pd.DataFrame, bucket="30min") -> pd.Series:
"""day-of-week x time-of-day volume shares from a trades tape."""
v = trades["qty"].resample(bucket).sum()
day_total = v.groupby(v.index.date).transform("sum")
share = v / day_total # fraction of that day's volume
key = [v.index.dayofweek, v.index.time]
curve = share.groupby(key).median()
return curve / curve.groupby(level=0).transform("sum") # renormalize per day
Usar mediana em vez de média não é uma escolha estilística. O volume em cripto tem caudas extremamente pesadas; uma única cascata de liquidação pode representar 15% do volume do dia em 10 minutos, e uma curva baseada em média vai esperar um pico eternamente naquele bucket. A literatura de ações foi além das curvas estáticas: Białkowski, Darolles and Le Fol (2008, "Improving VWAP strategies: A dynamic volume approach," Journal of Banking & Finance 32(9), 1709–1722) decompõem o volume por intervalo num componente comum de mercado e num componente específico do ativo modelado com dinâmicas ARMA/SETAR, e mostram que a decomposição reduz materialmente o risco de tracking do VWAP em relação a uma curva clássica estática. A tradução para cripto é direta: estimar uma curva de mercado a partir dos top-N pares (o fator comum é forte — os relógios de funding e as sessões são compartilhados), e depois modelar o desvio do seu par como um processo intradiário de reversão à média que você atualiza em tempo real. Mais recentemente, Genet (2025, "Deep Learning for VWAP Execution in Crypto Markets: Beyond the Volume Curve," arXiv:2502.13722) mostra que schedules aprendidos ponta a ponta superam o VWAP de curva estática em dados da Binance — evidência de que, em cripto, a curva de volume é o elo mais fraco do pipeline, não o fatiamento.
O resumo operacional: uma curva estática, agregando todos os dias, é um VWAP de espantalho. Se sua comparação mostra que "o VWAP mal supera o TWAP em cripto", verifique se o VWAP foi alimentado com uma curva que de fato contém os picos de funding e a separação dia útil/fim de semana antes de concluir qualquer coisa.

Patologias do POV: o algoritmo que persegue a própria cauda
O discurso do POV é adaptabilidade: negociar quando o mercado negocia. Três patologias distintas o comprometem.
1. O loop de realimentação. A endogeneidade descrita acima não é apenas uma correção contábil. Suas ordens-filhas criam volume; o volume eleva seu alvo; seu alvo cria volume. Em moderado, o ponto fixo é estável, mas a participação medida que seu relatório pós-negociação exibe ( do tape total) subestima sua pegada em relação ao que o mercado teria sido sem você ( de todo o resto). Pior: existe realimentação de segunda ordem — seus fills movem o preço, o movimento de preço atrai fluxo de momentum e dispara stops, esse fluxo eleva o volume do tape, e seu motor de POV lê o volume que ele mesmo causou como um convite para acelerar. Isso é exatamente o oposto do comportamento ótimo — schedulers sensíveis a impacto (Almgren–Chriss com parâmetros razoáveis, e estimativas empíricas de impacto como Almgren, Thum, Hauptmann and Li, 2005, "Direct Estimation of Equity Market Impact," Risk 18(7)) querem que você desacelere depois de empurrar o preço, não que acelere. Uma cascata de liquidação é o limite patológico: volume enorme no tape, book unilateral, e um POV vanilla compra com mais força bem no topo do squeeze, porque é ali que estão os prints.
2. Ser explorado. Um algo de POV é uma máquina de fluxo de ordens disparada por volume, e qualquer coisa disparável pode servir de isca. Um predador que suspeita de um comprador grande em modo de participação pode imprimir volume — negociando consigo mesmo onde as regras permitem, ou apenas negociando ativamente em tamanho pequeno — para puxar o motor de POV para frente, e depois fornecer liquidez a ele a preços inflados. Isso é uma instância em pequena escala do mecanismo geral descrito em Brunnermeier and Pedersen (2005, "Predatory Trading," Journal of Finance 60(4)): quando sua demanda futura é previsível a partir do seu comportamento passado, outros negociam antes dela, e o caminho de preço que você enfrenta é pior do que o que você previu. O TWAP vaza um schedule no tempo; o POV vaza uma função de resposta, o que é mais perigoso porque o adversário pode invocá-la sob demanda.
3. A cauda que nunca termina. O POV não tem relógio. Se você precisa comprar 500 BTC até as 16:00 UTC e o volume evapora às 14:00, um POV puro fica parado esperando — ele é, por construção, incapaz de terminar por conta própria. Por isso, todo POV de produção carrega um piso de taxa mínima e um modo de catch-up, e é justamente no modo de catch-up que as perdas se escondem: você passa o dia negociando passivamente a 10% de participação, e depois dispara os 30% residuais da ordem-mãe através de uma janela de fechamento rarefeita, a uma participação efetiva triplicada em relação ao seu alvo. A média pós-negociação parece boa; o custo marginal da última fatia é brutal. Se seus relatórios de POV não separam a cauda, você não viu o custo real dele.
def pov_child_qty(tape_vol: float, gamma: float, remaining: float,
t_left_s: float, min_rate: float) -> float:
target = gamma / (1.0 - gamma) * tape_vol # exclude our own prints
floor = remaining / max(t_left_s, 1.0) * CHILD_INTERVAL_S
if t_left_s < CATCHUP_HORIZON_S: # deadline dominates
floor = max(floor, remaining * CHILD_INTERVAL_S / t_left_s)
return min(remaining, max(target, floor, min_rate))
Dois detalhes nesse trecho fazem trabalho de verdade: o alvo usa do volume de tape excluindo-nos (é preciso subtrair seus próprios fills do tape ao qual você reage — um número surpreendente de implementações não faz isso), e o piso de prazo transforma o POV em TWAP-sobre-o-residual conforme o tempo se esgota, o que ao menos torna o custo da cauda previsível.

Benchmarks: por que superar o VWAP ainda pode fazer você perder dinheiro
O scheduler e o benchmark são escolhas separadas, e confundi-las é o pecado pós-negociação mais comum. Dois benchmarks dominam.
O benchmark de VWAP — comparar seu preço médio de fill com o VWAP do intervalo — foi introduzido por Berkowitz, Logue and Noser (1988, "The Total Cost of Transactions on the NYSE," Journal of Finance 43(1)), que propuseram o preço ponderado por volume do dia como um padrão neutro para a qualidade de execução institucional. Ele se tornou o padrão da indústria por um motivo tão sociológico quanto técnico: é fácil de calcular, fácil de explicar, e difícil de parecer ruim se você simplesmente espalhar seu trading ao longo do dia.
O implementation shortfall (preço de chegada) vem de Perold (1988, "The Implementation Shortfall: Paper Versus Reality," Journal of Portfolio Management 14(3), 4–9): medir tudo contra o preço no momento em que a decisão foi tomada. Para uma compra de com quantidade preenchida a preço médio , preço terminal :
O argumento de Perold era que a diferença entre portfólios de papel e portfólios reais é precisamente essa quantidade — e note que ela cobra por aquilo que você deixou de executar, o que o benchmark de VWAP ignora silenciosamente. Esse termo de custo de oportunidade é o que torna o IS o único benchmark honesto para o POV, cujo modo de falha característico é justamente a quantidade não preenchida.
Agora a armadilha. O VWAP como benchmark tem dois pontos cegos estruturais:
É autorreferente. Seus fills estão dentro do benchmark. Se você representa 30% do volume do intervalo, então aproximadamente 30% do VWAP é o seu próprio preço médio, e seu slippage medido em relação ao VWAP é mecanicamente reduzido pela sua própria participação — quanto maior e mais impactante for sua ordem, melhor ela pontua. No limite em que você é o único trader, você supera o VWAP por exatamente zero, independentemente de quão mal você tenha movido o preço. O slippage de VWAP mede aderência ao schedule, não custo.
Ignora a deriva em relação à decisão. Números concretos: você decide comprar 100 BTC a um preço de decisão de $60.000. O mercado sobe ao longo de toda a tarde; o VWAP do intervalo registra $60.320 e você é preenchido a uma média de $60.290. Relatório de VWAP: –5 bps, superou o benchmark, a mesa ganha uma célula verde. Relatório de arrival: você pagou $290 acima do preço de decisão em 100 BTC — +48 bps, $29.000 de implementation shortfall. Ambos os números estão corretos. Só um deles é dinheiro. E a corrupção de incentivo vai mais fundo: um trader avaliado pelo VWAP deveria desacelerar num dia de tendência (espalhar as negociações acompanha melhor o benchmark), o que é exatamente o oposto do que minimiza o shortfall quando o preço está fugindo de você. O benchmark não apenas mede mal o custo — ele prescreve o comportamento errado. Kissell (2013, The Science of Algorithmic Trading and Portfolio Management, Academic Press) trata esse problema de seleção de benchmark em profundidade; vale internalizar seu enquadramento: o benchmark codifica de quem é o risco que você está gerenciando. O VWAP gerencia o risco de constrangimento da mesa executora. O preço de arrival gerencia o P&L do portfólio.
Resolução prática: avalie estratégias por implementation shortfall; use o slippage de VWAP como diagnóstico (ele isola a habilidade de scheduling da sorte de timing, já que a deriva afeta tanto você quanto o benchmark); e nunca deixe alguém cuja ordem foi >10% do volume do intervalo citar slippage de VWAP sem também citar a participação.
O experimento: três algoritmos, um só tape
Com as definições resolvidas, podemos fazer o que os artigos comparativos nunca fazem: rodar os três schedulers sobre ordens-mãe idênticas, sobre os mesmos dados reproduzidos, e observar distribuições de custo, não adjetivos. O harness roda sobre o simulador de fills orientado a eventos descrito em Fill simulation: partial fills, queue position and why your backtest fills are lies — profundidade de L2 reproduzida, ordens-filhas limitadas ganham posição na fila, ordens-filhas agressivas percorrem o book, e nossos fills perturbam o tape que os schedulers observam (o que importa enormemente para o POV, conforme a seção sobre realimentação).
Configuração, para que você possa reproduzi-la nos seus próprios dados:
- Instrumento/dados: BTCUSDT perpétuo, 90 dias de replay de L2 (top 20 níveis, 100 ms) + tape de trades.
- Ordens-mãe: 500 por algoritmo, idênticas entre algoritmos: horários de início aleatórios, horizonte h, tamanho de 0,75% do ADV móvel de 30 dias (grande o suficiente para que o impacto seja real, pequeno o suficiente para que os três possam plausivelmente terminar), lado comprador, preço de decisão = mid no início.
- TWAP: 48 fatias-filhas, jitter de ±30% em timing/tamanho.
- VWAP: curva mediana de dia-da-semana × horário-do-dia em buckets de 30 min (estimador acima), reajustada semanalmente, sem atualização intradiária — deliberadamente a versão simples.
- POV: do volume de tape excluindo-nos, piso de taxa mínima, catch-up estilo TWAP nos últimos 30 min.
- Métricas: IS em bps do preço de decisão (taxas incluídas), slippage de VWAP em bps, taxa de conclusão, e — o que ninguém reporta — o IS do quartil final de cada ordem-mãe.
Resultados representativos das nossas execuções (seus números vão variar; a forma não deveria):
| Métrica (bps vs arrival) | TWAP | VWAP | POV 12% |
|---|---|---|---|
| IS médio | 11,8 | 9,6 | 8,9 |
| IS mediano | 9,1 | 7,7 | 6,4 |
| Desvio-padrão do IS | 21,5 | 19,8 | 26,3 |
| Percentil 95 do IS | 46 | 41 | 58 |
| Slippage médio de VWAP | +1,9 | +0,4 | –0,8 |
| Conclusão em T | 100% | 100% | 96,4% |
| IS médio, quartil final da ordem-mãe | 12,5 | 10,2 | 19,7 |
Três leituras, em ordem crescente de importância:
As médias favorecem o POV, e as caudas o condenam. O POV vence no IS médio e mediano — adaptar-se à liquidez realizada realmente vale alguns bps a mais em relação a uma curva estática. Mas seu desvio-padrão de IS e seu percentil 95 são os piores dos três, sua taxa de conclusão não é 100%, e seu custo no quartil final é mais que o dobro do seu número principal: a cauda que nunca termina, somada ao modo catch-up, concentram custo exatamente onde as médias o escondem. Se suas ordens-mãe são orientadas por alfa com um horizonte rígido, essa cauda é o número que importa, e a vantagem média do POV não compensa por ela.
A vantagem do VWAP sobre o TWAP é exatamente a qualidade da sua previsão. Condicionando a diferença de IS entre VWAP e TWAP ao erro realizado da curva de volume (distância entre a previsão e as participações realizadas), a relação é monotônica: no tercil de dias com melhor previsão, o VWAP supera o TWAP em ~4 bps; no tercil pior, a diferença fica dentro do ruído e às vezes se inverte. Em cripto, o tercil pior não é aleatório — são os dias de cascata e os dias de notícia, que também são, no geral, os dias de custo mais alto. O VWAP melhora sua média superando o TWAP justamente nos dias que já eram fáceis.
O slippage de VWAP e o IS classificam os algoritmos de forma diferente. O POV registra slippage médio de VWAP negativo — claro que sim, ele negocia proporcionalmente ao próprio volume que define o benchmark, e seus fills estão dentro dele. Pelo placar de VWAP, o POV é o melhor algoritmo aqui; pelo placar de arrival e pelo risco de conclusão, é o mais perigoso. Mesmo tape, mesmos fills, conclusão oposta — que é exatamente o argumento da seção anterior transformado em tabela.

O harness em si tem ~50 linhas ao redor do simulador de fills e vale cada minuto investido, porque converte a escolha de scheduler de um debate de gosto pessoal em uma medição:
for parent in sample_parents(n=500, horizon="4h", adv_frac=0.0075):
for algo in (twap, vwap, pov):
sim = ReplaySim(l2_stream(parent.window), fees=TAKER_MAKER)
fills = sim.run(algo.schedule(parent)) # fills perturb the tape
report(parent, algo, is_bps(fills, parent.p0),
vwap_slip_bps(fills, sim.tape), fills.completion)
Escolhendo, na prática
As regras honestas de seleção que emergem de tudo isso:
- Prazo rígido, ordem-mãe orientada por alfa: TWAP ou um schedule Almgren–Chriss front-loaded. Pague o imposto de liquidez constante; compre a garantia de conclusão e a cauda limitada. Aleatorize as ordens-filhas.
- Fluxo orientado por benchmark (você é literalmente remunerado sobre VWAP), ou tamanho grande num dia normal: VWAP — e gaste seu orçamento de engenharia no previsor de volume: grade de dia-da-semana, resolução de picos de funding, atualização dinâmica intradiária à la Białkowski–Darolles–Le Fol. Um motor de VWAP com uma curva preguiçosa é apenas um TWAP com passos extras.
- Oportunista, sem prazo rígido, sensível à liquidez: POV em modesto (≤15%), calculado sobre o volume excluindo-nos, com um filtro de cascata (limitar a participação quando os z-scores de volume do tape explodem) e um fallback de prazo cujo custo você mede separadamente.
- Seja qual for o que você rodar: avalie por implementation shortfall contra o arrival, conforme Perold. Mantenha o slippage de VWAP como diagnóstico da habilidade de scheduling, nunca como placar — o placar precisa ser denominado em dinheiro, e só o preço de arrival é.
E a meta-regra que o experimento reforça o tempo todo: compare distribuições, não médias, nos seus próprios dados reproduzidos. Um scheduler é uma aposta sobre uma previsão de volume, e você não avalia apostas pelo seu retorno médio ignorando as caudas — é assim que o mercado te vende o POV.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.