É provável que o seu sinal de entrada seja o elemento menos determinante do backtest. Posso pegar numa regra de momentum medíocre, deixar intactos todos os timestamps de entrada e saída, alterar apenas a função que decide quantos contratos manter e fazer o Sharpe líquido passar de 0.41 para 0.71 e o drawdown máximo de 31% para 13%. As mesmas operações. As mesmas execuções. Uma estratégia diferente.
Esta afirmação irrita algumas pessoas, e com razão, porque implica que a maior parte do tempo gasto a afinar períodos de lookback e limiares de filtros é dedicado ao termo menos importante. Por isso, vou mostrar os resultados concretos e depois dar razão aos críticos onde ela existe, porque há uma versão deste argumento que está errada e convém saber qual é a versão que estou a defender.
Um sinal, seis formas de o manter
O sinal: contrato perpétuo ETHUSDT na Binance USDⓈ-M, barras de 1 hora, posição longa quando a EMA de 12 horas está acima da EMA de 96 horas, posição neutra caso contrário, sem posições curtas. De julho de 2022 a junho de 2026. 431 operações completas. Comissões taker nos dois sentidos a 5.0 bps, funding pago ou recebido de 8 em 8 horas sobre a posição efetiva, slippage modelado com base na profundidade do topo do livro. É um sinal deliberadamente banal — escolhi-o porque ninguém o defenderia, o que o torna uma base de teste simples.
Todas as linhas abaixo partilham timestamps idênticos para as barras de entrada e saída. A única diferença é a função de dimensionamento.
| Regra de dimensionamento | Sharpe líquido | DD máx. | Notional transacionado/ano (× posição média) | Custos como % do PnL bruto | Alavancagem máxima |
|---|---|---|---|---|---|
| Notional fixo de $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Fração fixa, 100% do capital | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Volatilidade realizada inversa de 20 dias | 0.68 | 14.1% | 690× | 29% | 4.4× |
| Target de volatilidade anualizada de 20%, reajuste horário, sem limite | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| Target de volatilidade de 20%, banda sem transação de 20%, limite de alavancagem de 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Half-Kelly com média/variância móvel de 60 dias | 0.52 | 24.6% | 830× | 33% | 8.1× |
Veja a diferença. Entre a pior e a melhor linha, há uma diferença relativa de 73% no Sharpe e um fator de 2.4 no drawdown. Agora encontre um parâmetro do sinal de entrada neste conjunto de dados que altere o Sharpe em 0.30 sem também revelar um sobreajuste óbvio. Já procurei. O comprimento do par de EMA altera-o em cerca de 0.12 ao longo de toda a grelha plausível, e a maior parte dessa variação é ruído que não se mantém fora da amostra.
Porque é que a volatilidade inversa parece tão boa e quanto disso é real
O mecanismo não é misterioso. Com um notional fixo, o tamanho da posição não está correlacionado com a volatilidade realizada, o que significa que o risco em dólares por operação é proporcional à volatilidade que se verificar nessa semana. No ETH, durante este período, a volatilidade realizada a 20 dias variou entre 31% e 118% anualizados. A execução com notional fixo assumiu 3.8× mais risco em dólares em março de 2024 do que em julho de 2023, não porque o sinal tivesse mais convicção, mas porque o mercado estava mais agitado. Quase todo o seu drawdown concentra-se no quintil de volatilidade mais alta. O dimensionamento inverso à volatilidade elimina essa ligação, e eliminá-la melhora realmente a forma da série de retornos.
Mas parte do ganho de Sharpe é um artefacto de medição e, se não separar as duas coisas, vai tomar más decisões a jusante. O Sharpe divide pelo desvio-padrão dos retornos. Por definição, o targeting de volatilidade é uma operação que estabiliza o desvio-padrão dos retornos. Está a otimizar diretamente o denominador. Uma regra que dimensiona posições para atingir uma volatilidade ex-ante constante melhora o Sharpe em quase qualquer série de retornos com clusters de volatilidade, incluindo séries sem qualquer vantagem. Confirmei isso com sinais baralhados: aleatorize os timestamps de entrada, mantenha o overlay de targeting de volatilidade e o Sharpe continua a melhorar cerca de 0.06 face ao notional fixo, mesmo numa base com média zero. É pouco, mas não é zero, e resulta apenas da mecânica.
Por isso, quando comparo internamente regras de dimensionamento, o Sharpe nunca é o único número na folha. Quero o Calmar, quero o PnL líquido por unidade de notional médio utilizado e quero a decomposição do bruto ao líquido, porque em conjunto estes três indicadores são muito mais difíceis de manipular com um truque no denominador.
A estimativa de volatilidade é um modelo e pode introduzir leakage
A causa mais comum para um bom resultado de dimensionamento se revelar falso: a estimativa de volatilidade usa informação da própria barra para a qual calcula o tamanho. Se a sua série de volatilidade for calculada com uma janela centrada, ou com o `rolling().std()` predefinido de pandas aplicado depois de uma reamostragem que inclui a barra parcial atual, ou com uma normalização sobre a amostra inteira, há leakage. É subtil porque a volatilidade é persistente, pelo que a fuga de informação é pequena em cada linha e a curva de capital continua a parecer plausível. Fica apenas um pouco demasiado suave precisamente nas semanas que importam.
Os nossos agentes verificam quatro coisas em cada regra de dimensionamento antes de um resultado passar à fila de paper trading:
- Disponibilidade no momento da decisão. O tamanho usado na abertura da barra das 14:00 tem de poder ser calculado com dados cujo timestamp de fecho seja ≤ 13:59:59.999. Confirmamos isto recalculando a série de tamanhos a partir de um frame truncado numa amostra aleatória de 200 pontos de decisão e comparando os resultados.
- O período de lookback do estimador é um parâmetro real. Uma janela de volatilidade de 20 dias e uma de 60 dias são duas estratégias diferentes. O lookback entra na grelha walk-forward com todos os outros parâmetros e, se o resultado só funcionar com uma duração de janela, isso revela fragilidade.
- Trajetória da alavancagem, não apenas o pico. Apresente a distribuição completa da alavancagem bruta. A execução sem limite do target de volatilidade acima passou 4% das horas acima de 5×, algo que nunca aparece numa tabela de resumo e que determina por completo se a estratégia é implementável.
- Sensibilidade do dimensionamento como teste de robustez. Se o Sharpe colapsar quando altera o target de volatilidade de 20% para 25%, a estratégia não está ajustada à volatilidade: está afinada à alavancagem e encontrou a sua vantagem ao escolher um número.
O limite de alavancagem não é um adorno de gestão do risco, faz parte da definição da estratégia. Os escalões de ETHUSDT da Binance reduzem a alavancagem máxima à medida que o notional da posição aumenta, e a taxa de margem de manutenção também sobe. Um backtest que deixa a regra de targeting de volatilidade chegar a 6.3× com um notional de $400k descreve uma posição que a plataforma não permitirá manter com essa margem. A linha com limite na tabela custa 0.05 de Sharpe e é a única das duas que descreve algo real.
É no reajuste que o dinheiro se perde
Repare na coluna dos custos. O reajuste horário para um target de volatilidade deu o melhor Sharpe de destaque e também entregou 41% do PnL bruto à exchange. São 1,180× o notional médio da posição transacionado por ano, a 5 bps por lado, mais spread e impacto. A solução ingénua é reajustar menos vezes, segundo um calendário. A melhor solução é uma banda sem transação: só redimensionar quando a posição atual se desvia do target para lá de um determinado limiar.
Uma banda de 20% reduziu o notional anual transacionado de 1,180× para 402× — uma redução de 66% — e custou 0.05 de Sharpe. Já apliquei isto a oito sinais e o padrão repete-se: bandas entre 15% e 25% recuperam a maior parte do benefício de controlo do risco com um terço do volume transacionado, e qualquer valor abaixo de 10% é apenas pagar comissões por uma precisão cosmética numa quantidade que, de qualquer modo, está a estimar com uma janela de 20 dias. Não pode reajustar com três casas decimais usando um número cujo erro-padrão é 15%.
Em fevereiro, tivemos uma execução cujo relatório, escrito por um agente, atribuiu uma melhoria de 0.22 no Sharpe ao «filtro de entrada melhorado». A diferença era uma linha no módulo de dimensionamento. O filtro não tinha mudado. Agora faço com que o relatório apresente no topo o hash da configuração de dimensionamento, porque a atribuição de resultados exige rigor e os modelos gostam tanto como qualquer pessoa de contar uma história bem arrumada.
O que o paper trading faz à sua regra de dimensionamento
É aqui que a diferença entre o backtest e o paper trading mais se acentua, e a razão é sobretudo aritmética. O dimensionamento ajustado à volatilidade faz o tamanho da posição oscilar por um fator de 4 a 8 ao longo da amostra. Os dois extremos desse intervalo esbarram em restrições da plataforma que o backtest nunca modelou.
No extremo inferior: incremento de quantidade e notional mínimo. O perp ETHUSDT tem um incremento de quantidade de 0.001 e um mínimo de $5. Se o tamanho no regime de baixa volatilidade for 0.0004 ETH, o backtest mantém essa posição e o paper trading não mantém nenhuma. Parece um caso marginal até perceber que uma regra de targeting de volatilidade coloca os tamanhos mais pequenos nos mercados mais calmos, precisamente onde, num sinal de tendência, se encontram muitas vezes as boas entradas. No extremo superior: limites de posição, escalões de margem e o facto de uma posição de 6× exigir uma disciplina de margem isolada para a qual não modelou liquidações no backtest.
Apanhámos um caso em que a curva de capital do paper trading acompanhou o backtest com uma diferença inferior a 3% durante seis semanas, antes de divergir bruscamente. A causa foi o arredondamento: truncagem com `int()` em vez de arredondamento ao incremento, no dimensionador de ordens, aplicada a posições com uma média de 1.4 incrementos. O backtest dimensionava em valores contínuos e o dimensionador em produção perdia 20-30% da posição pretendida em cada operação pequena. Não houve nada de exótico no modelo de execução nem uma história de latência. Foi truncagem.
Onde os críticos têm razão
Há três objeções válidas, e não quero minimizar a sua importância.
Primeiro, e mais importante: o dimensionamento distribui a vantagem, não a cria. Se a expectativa bruta do seu sinal for nula ou negativa depois de comissões e funding realistas, todas as regras dessa tabela perdem dinheiro — as mais sofisticadas limitam-se a perdê-lo com uma variância mais bonita. Escolhi um sinal com uma vantagem líquida pequena, mas positiva, neste período. Se aplicar as mesmas seis regras a um sinal com −1.2 bps por operação líquidos, a ordenação mantém-se, mas o capital final fica abaixo do inicial em todos os casos. O dimensionamento multiplica alguma coisa. Continua a precisar dessa alguma coisa.
Segundo, o targeting de volatilidade tem um modo de falha real e bem documentado: reduz a alavancagem no fundo de uma venda rápida e volta a aumentá-la depois da recuperação brusca. Numa recuperação em V acentuada, o notional fixo vence, por vezes com grande margem. A queda das ações em março de 2020 e o colapso das criptomoedas em agosto de 2024 penalizaram o dimensionamento ajustado à volatilidade durante a recuperação. O meu período de quatro anos de ETH inclui, por acaso, mais períodos prolongados com clusters de volatilidade do que movimentos bruscos em V, o que favorece as linhas de volatilidade inversa. Com outro período, parte da ordenação inverte-se e, se tivesse começado com uma tabela de 2020, estaria a defender uma versão mais fraca deste argumento.
Terceiro, a regra de dimensionamento é tão suscetível a sobreajuste como qualquer outra coisa. O Half-Kelly com estimativas móveis é o exemplo revelador na minha tabela: parece sofisticado, tem uma justificação teórica e produziu o segundo pior drawdown porque a estimativa móvel da média de uma série de retornos ruidosa não vale nada e o Kelly é extremamente sensível a ela. Qualquer regra de dimensionamento que use como input uma estimativa de retorno esperado herda o erro dessa estimativa, amplificado. As regras que usam apenas uma estimativa da variância comportam-se muito melhor, porque a variância é o único momento que se consegue estimar de forma fiável com quatro anos de dados horários.
O que retiro de tudo isto: quando um resultado de backtest o surpreender, verifique primeiro o módulo de dimensionamento antes de procurar sofisticação no sinal. E quando apresentar um Sharpe, mostre ao lado a trajetória da alavancagem e a decomposição dos custos, porque um número tão dependente de uma decisão de dimensionamento não é, de todo, uma propriedade do sinal.
← Todos os artigos