← Voltar aos artigos
July 5, 2026
5 min read

O Portão de Fidelidade: o Backtest do Grosseiro ao Fino Engana Você Mais Rápido, a Menos que o Proxy Barato Classifique Como o Caro

O Portão de Fidelidade: o Backtest do Grosseiro ao Fino Engana Você Mais Rápido, a Menos que o Proxy Barato Classifique Como o Caro
#algotrading
#backtest
#multi-fidelidade
#hyperband
#ASHA
#eliminação sucessiva
#sobreajuste
#validação
Part 6 of 10 · Collection
High-Performance Backtest Engines

Parte da série "Backtests Sem Ilusões".

Toda busca de parâmetros séria esbarra na mesma parede: o espaço é enorme, e cada avaliação honesta é cara. Uma estratégia multi-timeframe com uma dúzia de limiares e três períodos de indicadores, avaliada em uma divisão walk-forward com múltiplas dobras, pode custar segundos por configuração. Dez mil configurações são horas. Então você procura um atalho, e o atalho é sempre a mesma ideia: avaliar barato, promover apenas os sobreviventes para o teste caro. Filtre dez mil configs em uma dobra, mantenha as poucas centenas melhores, rode essas em todas as dobras. Filtre em candles horários e faça drill-down até 1 segundo apenas para os finalistas.

Isso é busca do grosseiro ao fino — drill-down, multi-fidelidade, eliminação sucessiva, Hyperband, ASHA — e é uma das ideias genuinamente boas em otimização. Pode transformar um dia de computação em uma hora. Nós usamos. Mas ela esconde uma armadilha tão silenciosa que a maioria das pessoas que a aplica nunca a verifica, e a armadilha é esta: o método inteiro assume que seu proxy barato classifica as configurações da mesma forma que a avaliação cara. Se não classifica, você não está buscando mais rápido. Você está descartando seus futuros vencedores logo no primeiro portão e promovendo ruído — você está apenas se enganando mais rápido.

Este artigo trata da única medida que diz se o seu drill-down é real ou uma ilusão. Nós a aplicamos na nossa própria busca multi-timeframe, e a resposta foi desconfortável: na fidelidade mais barata, nosso proxy classificou as configurações quase de forma aleatória (Spearman ρ ≈ 0.03). Se tivéssemos podado agressivamente nessa fidelidade — como todo padrão de ASHA pronto para uso convida você a fazer — teríamos descartado os eventuais vencedores logo na primeira rodada. A correção é um portão obrigatório que roda antes da busca: medir a correlação de ranking e recusar podar abaixo da fidelidade em que ela é confiável.

O que a busca multi-fidelidade realmente é

Uma cascata de busca do grosseiro ao fino: milhares de configs baratas de baixa fidelidade filtradas amplamente à esquerda, apenas os melhores sobreviventes promovidos para a direita através de avaliações completas progressivamente mais caras — a eliminação sucessiva estreitando um amplo campo esmeralda de candidatos até alguns finalistas brilhantes

Essa família de métodos tem um formato único. Você define uma fidelidade (também chamada de recurso ou orçamento): um dial de barato para caro que, no seu máximo, fornece o objetivo verdadeiro. Depois você roda configurações em baixa fidelidade, as classifica, mantém a melhor fração, e roda de novo apenas esses sobreviventes em fidelidade mais alta — repetindo até que um pequeno número de finalistas tenha sido avaliado em fidelidade total.

A eliminação sucessiva (Jamieson & Talwalkar, 2016) é o núcleo: comece com N configs no recurso mínimo, mantenha o 1/η melhor, multiplique o recurso por η, repita. O Hyperband (Li et al., 2018) envolve a eliminação sucessiva em um laço externo que faz hedge entre diferentes recursos iniciais, para que você não precise adivinhar o quão agressivamente podar. O ASHA (Li et al., 2020) é a versão assíncrona e favorável à paralelização. A taxa de eliminação η é o único botão que eles compartilham; o padrão canônico é η = 3 — manter o terço melhor em cada degrau, triplicar o orçamento.

A fidelidade em si pode ser quase qualquer coisa de barato a caro que convirja para a verdade:

  • Número de dobras walk-forward. Avalie em 1 dobra, depois 2, depois 3, até K. Essa é a fidelidade que estudamos abaixo, porque é a natural para um backtest com uma divisão out-of-sample rolante.
  • Resolução de candles. Filtre em barras de 1 hora, promova para 1 minuto, faça drill-down até 1 segundo ou trades brutos apenas para os finalistas. Essa é a ideia do drill-down adaptativo aplicada à busca em vez de à simulação de fills.
  • Duração do histórico, épocas, subamostra do dataset — as fidelidades clássicas de ML.

Em um backtest, dobras e resolução são as duas que importam, e — esse é o ponto de todo o artigo — elas não são igualmente seguras. Uma delas tem um viés que seleciona silenciosamente os parâmetros errados, não importa quão cuidadosamente você a filtre com um portão.

A única premissa sobre a qual tudo se apoia

O colapso silencioso do drill-down: uma classificação barata de baixa fidelidade que discorda da classificação completa e cara, de modo que os verdadeiros vencedores esmeralda são podados logo no primeiro portão enquanto o ruído vermelho-laranja é promovido para cima — e nenhum erro jamais é lançado

Vamos anotar o que a eliminação sucessiva realmente precisa para estar correta. Ela não precisa que a fidelidade barata forneça o valor certo do objetivo — ninguém se importa que uma dobra reporte um Sharpe diferente de seis dobras. Ela precisa de algo mais fraco, mas muito mais específico: a fidelidade barata precisa classificar as configurações da mesma forma que a cara. Se a config A vence a config B em fidelidade total, A deveria tender a vencer B também em baixa fidelidade. Isso é tudo. E também é tudo o que importa.

Formalmente, a quantidade que governa se o drill-down funciona é a correlação de ranking entre o objetivo de baixa fidelidade e o de alta fidelidade, através do espaço de configurações. Se essa correlação é alta, os sobreviventes da rodada barata são as mesmas configs que teriam vencido a rodada cara, e você economizou computação de graça. Se é baixa, a rodada barata é um filtro aleatório: ela descarta configs boas e promove configs ruins, e você gastou seu orçamento acelerando o caminho até uma resposta pior. Não existe um ajuste intermediário de η que resolva o problema — um proxy ruim, podado com suavidade, ainda deixa escapar vencedores; podado agressivamente, ele os elimina em massa.

A falha é invisível da maneira usual. A busca termina, reporta um campeão, o campeão parece bom in-sample. Nada lança um erro. Você só descobre que o proxy estava mentindo quando o campeão desmorona out-of-sample — e, a essa altura, você já atribuiu a falha à estratégia, não à busca que a selecionou. Então a disciplina é a mesma à qual esta série sempre chega: meça aquilo que o método assume, antes de confiar no método. Para o drill-down, a coisa a medir é a correlação de ranking, e a medição é barata.

Medindo isso: o portão de fidelidade

O portão de fidelidade como um checkpoint: antes que qualquer degrau seja confiável, cerca de duzentas configs aleatórias são pontuadas em cada nível de fidelidade e a correlação de ranking entre o proxy barato e a avaliação completa é medida em um portão brilhante que só se abre quando as duas classificações concordam

O portão é um pequeno experimento que você roda uma vez, antes da busca propriamente dita, no mesmo espaço que você está prestes a buscar. O procedimento:

  1. Sorteie algumas centenas de configurações aleatoriamente do espaço de parâmetros (usamos ~200 — suficiente para uma estimativa estável de Spearman, barato o bastante para ser viável).
  2. Avalie cada uma em todo degrau de fidelidade: em 1 dobra, 2 dobras, … até as K dobras completas. Para uma fidelidade por número de dobras, isso é quase gratuito, porque as dobras que você calcula para os degraus baratos são reaproveitadas no degrau caro — uma média cumulativa.
  3. Para cada degrau r, calcule a correlação de Spearman entre a classificação com r dobras e a classificação completa com K dobras, através dessas ~200 configs.
  4. O primeiro degrau em que ρ ultrapassa um limiar (usamos ρ ≥ 0.5) é a fidelidade mais rasa em que você tem permissão para podar. Abaixo dele, a classificação é ruidosa demais para confiar; você não deve eliminar configs ali.

A coisa toda são umas duas dezenas de linhas. O núcleo dela:

def fidelity_check(cache, n_probe, seed=7):
    """Spearman ρ: cumulative mean over the first r folds (in FOLD_ORDER)
    vs the full K-fold objective, on n_probe random configs."""
    rng = np.random.default_rng(seed)
    k = len(FOLDS)
    per_fold = np.empty((k, n_probe))
    order_win = np.array([list(FOLDS[fi]) for fi in FOLD_ORDER], np.int64)
    for j in range(n_probe):
        p = _unit_to_params(rng.random(len(PNAMES)))       # random config
        scores, *_ = eval_group(cache, p, _sp_of(p)[None, :], order_win, False)
        per_fold[:, j] = scores[0]                          # score on each fold
    cums = np.cumsum(per_fold, axis=0) / np.arange(1, k + 1)[:, None]  # r-fold mean
    rhos = []
    for r in range(1, k):
        rho = spearmanr(cums[r - 1], cums[-1]).statistic    # r folds vs all K
        rhos.append(0.0 if math.isnan(rho) else rho)
    return rhos

Note um detalhe deliberado: as dobras são tomadas na ordem FOLD_ORDER, uma ordem intercalada que alterna fatias antigas e recentes do calendário (dobra 0, depois uma dobra do meio, depois a dobra 1, depois uma mais tardia, …). Isso importa enormemente e é o assunto de uma seção posterior: significa que "1 dobra" é uma fatia cobrindo o meio do histórico, e "2 dobras" é uma fatia antiga mais uma tardia — nunca uma janela recente contígua. A fidelidade barata fica mais barata usando menos dobras, não dobras mais recentes.

Resultados: uma dobra classifica quase aleatoriamente

Correlação de ranking subindo com o número de dobras: uma curva ascendente do rho de Spearman começando perto de uma dispersão de cara-ou-coroa em uma dobra e ficando mais íngreme até uma concordância quase perfeita em cinco dobras, com uma linha horizontal de portão traçada no ponto médio, abaixo da qual a poda é proibida e acima da qual é permitida

Eis o que o portão reportou, rodado em dois dos nossos setups multi-timeframe. O número é o ρ de Spearman entre a classificação com r dobras e a classificação completa com K dobras, através de ~200 configs aleatórias — o quão fielmente a classificação de baixa fidelidade prevê a classificação de fidelidade total.

Dobras r Execução multi-TF Um regime mais difícil
1 +0.43 +0.03
2 +0.67 +0.43
3 +0.78 +0.78
4 +0.82
5 +0.91 +0.91

Leia primeiro a coluna do regime mais difícil, porque é a alarmante. Em uma dobra, ρ = 0.03. Isso não é uma correlação fraca; é nenhuma correlação — a classificação com uma dobra de duzentas configurações é estatisticamente indistinguível de embaralhá-las. Uma execução de eliminação sucessiva configurada (como a maioria é, por padrão) para começar a podar em min_resource = 1 faria, nesse regime, seu primeiro e mais agressivo corte no cara-ou-coroa. As configs que eventualmente venceriam em fidelidade total têm uma chance de 50/50 de sobreviver à primeiríssima rodada. No momento em que você chega à fidelidade em que a classificação significa alguma coisa (ρ = 0.78 em três dobras), a maioria delas já se foi.

A coluna multi-TF é mais branda, mas faz o mesmo ponto de outra forma. Mesmo ali, uma dobra dá ρ = 0.43 — abaixo do nosso portão de 0.5. Parece uma correlação decente, e é exatamente aí o perigo: 0.43 é alto o bastante para te acalmar e baixo o bastante para vazar suas melhores configs. Só em duas dobras (ρ = 0.67) a classificação se torna confiável.

Duas coisas se generalizam a partir disso. Primeiro, ρ em uma dobra é dependente do regime e não confiável — medimos de 0.03 a 0.43 entre setups, e em nenhum dos casos uma única dobra superou o limiar. Segundo, ρ sobe monotonicamente e rápido: em três dobras ambos os setups estão em 0.78, e em cinco convergem para 0.91. O sinal está lá; você só precisa gastar fidelidade suficiente para vê-lo. O trabalho do portão é encontrar o degrau exato em que o "suficiente" começa — e proibir a poda abaixo dele.

Por que uma única dobra é tão ruidosa

O ruído não é um bug na nossa construção de dobras; é intrínseco, e entender o porquê evita que você o "conserte" da maneira errada. Uma única dobra walk-forward é uma janela curta — semanas de um regime de mercado. O score de uma estratégia nessa janela é dominado por o quão bem seus parâmetros por acaso se ajustam àquele regime, o que está apenas frouxamente relacionado a quão bem eles generalizam. Duas configs genuinamente diferentes em qualidade podem trocar de posição em uma única dobra apenas porque uma delas capturou uma tendência que aquela dobra por acaso continha. O objetivo em uma dobra é um estimador de alta variância do objetivo com o qual você realmente se importa, e a correlação de ranking é exatamente o que a alta variância destrói primeiro — você pode preservar a média de um estimador enquanto sua classificação é ruído puro.

Adicionar dobras reduz essa variância pela média. Cada dobra é um sorteio parcialmente independente das condições de mercado; a média de r dobras é um estimador de menor variância, e sua classificação converge em direção à classificação de fidelidade total. É exatamente essa a subida ρ = 0.03 → 0.43 → 0.78 → 0.91: não o objetivo mudando, mas sua estimativa de ranking se estabilizando à medida que a sorte específica do regime se cancela na média. A lição é que a fidelidade, para um backtest, é fundamentalmente sobre quantos regimes independentes você amostrou — e um dificilmente é suficiente para classificar.

Isso também explica por que o regime mais difícil começa em 0.03 enquanto a execução multi-TF começa em 0.43. No regime mais difícil, a dobra única é mais idiossincrática ao regime — os scores de uma dobra das configs são mais impulsionados por sorte e menos por vantagem durável, então elas classificam mais perto do aleatório. O portão lê essa diferença automaticamente e responde exigindo mais dobras antes de permitir a poda. Você não precisa saber de antemão em qual regime está; você mede.

O portão em código: elevando automaticamente a fidelidade mínima

A saída do portão é um único inteiro: min_resource, a fidelidade mais rasa em que o ASHA tem permissão para podar. A regra é mecânica — percorra os degraus, pegue o primeiro cujo ρ ultrapassa o limiar:

RHO_GATE = 0.5
min_res = len(FOLDS)                      # default: pruning OFF (full fidelity)
rhos = fidelity_check(cache, n_probe=200) # [ρ@1, ρ@2, …, ρ@(K-1)]
passing = [r for r, rho in enumerate(rhos, 1) if rho >= RHO_GATE]
if passing:
    min_res = passing[0]                  # first rung that clears the gate

pruner = SuccessiveHalvingPruner(min_resource=min_res, reduction_factor=3)

Vamos rastrear isso pelas duas execuções. No setup multi-TF, ρ@1 = 0.43 falha no portão, mas ρ@2 = 0.67 o supera, então min_resource é elevado automaticamente para 2: o ASHA roda cada config em pelo menos duas dobras antes de ter permissão para eliminar qualquer coisa, então poda normalmente a partir daí. No regime mais difícil, ρ@1 = 0.03 e ρ@2 = 0.43 falham ambos; ρ@3 = 0.78 é o primeiro a superar, então min_resource se torna 3. E o fallback crucial: se nenhum degrau alcança 0.5, passing fica vazio e min_resource permanece em K — a poda é desligada por completo, e a busca degrada graciosamente para uma busca simples de fidelidade total, em vez de uma busca rápida e errada. Um drill-down que não consegue provar seu proxy simplesmente se recusa a podar.

Essa é a filosofia inteira em uma linha de fluxo de controle. O padrão de toda biblioteca de eliminação sucessiva é "pode a partir de min_resource = 1, confie no degrau barato." O portão substitui isso por "pode a partir do primeiro degrau que os dados dizem ser confiável, e se nenhum for, não pode." Isso custa uma sondagem inicial de ~200 configs e converte o drill-down de um ato de fé em uma decisão medida. A taxa de eliminação η = 3 permanece como está; o portão não mexe em quão forte você poda, apenas em quão cedo você tem permissão para começar.

Uma nota de honestidade visível no código acima: elevar min_resource corrói o ganho de velocidade. Podar em 3 dobras em vez de 1 significa que cada config — incluindo as que você vai descartar — paga por três dobras. Esse é o preço da correção, e é a troca certa: um ganho de velocidade 2× menor em uma busca que encontra vencedores de verdade supera um ganho de 6× em uma busca que os descarta. O portão torna essa troca explícita em vez de escondê-la.

O eixo barato errado: histórico mais curto é uma armadilha

Existe uma fidelidade barata que é tentadora, óbvia e enviesada, e vale a pena nomeá-la porque todo mundo recorre a ela primeiro: histórico mais curto. Filtrar configs no último mês, promover os sobreviventes para os dois anos completos. É trivialmente barato e parece a mesma ideia de menos dobras. Não é.

Menos dobras e histórico mais curto diferem de uma maneira decisiva. Uma fidelidade por número de dobras, feita corretamente, ainda cobre o calendário inteiro — ela só o amostra de forma mais grosseira. Uma fidelidade de histórico mais curto amostra densamente um subintervalo do calendário. E um subintervalo do histórico de mercado é um regime específico. Quando você classifica configs no último mês, você não está obtendo uma estimativa ruidosa-mas-não-enviesada da classificação do período completo; você está obtendo uma estimativa enviesada que favorece sistematicamente configs ajustadas ao regime do último mês. Aumente o tamanho da amostra o quanto quiser — tire a média sobre mais configs, mais trials — e o viés não diminui, porque não é variância. Você vai promover as configs que melhor se ajustam à janela de filtragem, e essas são exatamente as mais propensas a estarem sobreajustadas a um regime transitório.

É por isso que nossa fidelidade percorre as dobras em uma ordem intercalada em vez de cronológica. Com K dobras espalhadas por todo o histórico, "1 dobra" é uma única fatia perto do meio, "2 dobras" é uma fatia antiga e uma tardia, "3 dobras" espalha antiga/meio/tardia — todo nível de fidelidade, mesmo o mais barato, amostra através do calendário completo. O proxy barato é uma visão grosseira do período inteiro, nunca uma visão nítida de uma fatia dele. Essa intercalação é o que torna a fidelidade por número de dobras meramente ruidosa (curável pelo portão) em vez de enviesada (o que nenhum portão consegue consertar — um ρ alto contra um alvo enviesado apenas certifica que você vai escolher de forma confiável a config ajustada ao regime). Se a sua única forma de tornar uma fidelidade mais barata é torná-la mais recente, você não tem uma fidelidade válida. Torne-a mais grosseira em vez disso.

Resolução como o eixo barato honesto

O outro eixo barato evita completamente o viés, e é o parceiro natural do drill-down adaptativo que descrevemos para a simulação de fills: resolução de candles. Filtre todo o espaço em barras de 1 hora, promova os sobreviventes para 1 minuto, e faça drill-down até 1 segundo ou trades brutos apenas para o punhado de finalistas. Candles mais grosseiros sobre o mesmo histórico completo são mais baratos de avaliar — menos barras, passadas de indicadores mais rápidas, simulação mais rápida — e, diferente de uma janela mais curta, uma visão grosseira do calendário inteiro não é enviesada: ela vê todo regime, só com menos detalhe intrabarra.

Resolução e dobras são eixos de fidelidade complementares, e o portão de fidelidade se aplica a ambos. Antes de confiar em uma filtragem de 1 hora, rode a mesma sondagem: pegue ~200 configs, pontue-as em 1h e em 1m, e meça a correlação de ranking. Se ρ(1h, 1m) é alto, filtrar em horas é seguro e você comprou um grande ganho de velocidade honestamente. Se é baixo — o que acontece quando a vantagem da estratégia mora em estrutura intrabarra que os candles horários borram — então a filtragem horária é um filtro aleatório para essa estratégia, e o portão diz para você começar mais fino. A regra nunca muda: você só tem permissão para podar em uma fidelidade depois de ter medido que sua classificação concorda com a verdade.

Os dois eixos também falham de formas opostas, o que é útil. Resolução grosseira perde informação intrabarra; menos dobras perdem informação entre regimes. Uma estratégia de momentum em horizontes diários pode classificar perfeitamente em candles horários, mas precisar de muitas dobras para diluir a sorte de regime na média; uma estratégia de scalping pode classificar bem com poucas dobras, mas desmoronar acima de resolução de 1 segundo. O portão, rodado por eixo, diz a você em qual fidelidade pode se dar ao luxo de ser barato para esta estratégia — em vez de assumir uma resposta que por acaso é conveniente.

De onde vem a economia de fato

Uma ressalva que mantém o drill-down honesto: uma fidelidade só economiza computação onde o custo realmente mora. No nosso motor multi-timeframe, a parte cara é o pré-cálculo de indicadores — a HMA multi-timeframe e os sinais de separação — que é pago uma vez por configuração, antes de qualquer dobra rodar. A simulação por dobra sobre os sinais em cache é comparativamente barata. Então podar por número de dobras economiza apenas o custo de simulação, não o custo de indicadores que domina; a fidelidade por número de dobras é real, mas seu teto é mais baixo do que a razão bruta de dobras sugere.

O eixo de resolução, em contraste, ataca o custo dominante diretamente: candles mais grosseiros significam menos barras sobre as quais calcular indicadores, então tanto o pré-cálculo caro quanto a simulação barata encolhem juntos. Isso não é um detalhe — é o que decide qual drill-down vale a pena construir. Antes de investir em uma busca multi-fidelidade, pergunte para onde vão os seus segundos. Se 90% é pré-cálculo de indicadores compartilhado entre dobras, uma fidelidade por número de dobras compra pouco, e uma fidelidade de resolução compra muito. Faça o profiling primeiro; o eixo barato certo é aquele que remove o custo que você realmente tem, e ele ainda precisa superar o portão.

Onde isso se conecta

O portão de fidelidade ocupa um ponto específico na cadeia de higiene de backtest desta série:

  • Ele está a montante do controle de sobreajuste. Um drill-down que poda com base em um proxy ruim é uma nova forma de sobreajustar — você está deixando um degrau inicial ruidoso selecionar seus finalistas. O campeão ainda precisa sobreviver ao Sharpe Deflacionado e ao PBO, e a contagem de trials que alimenta esses portões precisa incluir todo trial podado, não apenas os sobreviventes — a poda não isenta um trial do registro de testes múltiplos.
  • Ele compartilha seu inimigo com a análise de platô: uma config que vence em uma dobra ou uma janela de filtragem e em nenhum outro lugar é o mesmo artefato de ajuste a regime que ambas as ferramentas existem para rejeitar. O portão se recusa a selecionar com base em tal dobra; a análise de platô se recusa a confiar em um campeão que se sustenta em apenas uma.
  • Ele pressupõe a divisão walk-forward honesta por baixo — dobras cobrindo o calendário completo, out-of-sample reservado à parte — e é o complemento, em tempo de busca, do drill-down que construímos para a simulação de fills: o mesmo princípio do grosseiro ao fino, aplicado a quais configs avaliar em vez de com que precisão preenchê-las.
  • E depende absolutamente de a fidelidade estar livre de vazamento em todo degrau. Se o degrau barato tem viés de look-ahead que o caro não tem, ρ mede concordância com um alvo contaminado e o portão certifica um vazamento. Meça a correlação de ranking, sim — mas sobre um objetivo honesto.

A ideia unificadora, de novo, é aquela que esta série não vai parar de repetir: um backtest é um experimento estatístico, e todo atalho nele é uma hipótese que você é obrigado a testar. A hipótese do drill-down é "classificação barata ≈ classificação cara." Isso é testável em ~200 configs. Teste-a.

Principais conclusões

  1. A busca do grosseiro ao fino se apoia em uma premissa: o proxy barato classifica as configs como o caro. Não o mesmo valor — a mesma classificação. Se a correlação de ranking é baixa, a poda agressiva descarta seus futuros vencedores e promove ruído. Você busca mais rápido em direção a uma resposta pior.
  2. Meça antes de confiar. Sorteie ~200 configs aleatórias, pontue-as em cada degrau de fidelidade, e calcule o ρ de Spearman entre cada degrau barato e a classificação de fidelidade total. São umas duas dezenas de linhas e uma sondagem barata.
  3. Uma dobra classifica quase aleatoriamente. Medimos ρ@1 de 0.03 (cara-ou-coroa) a 0.43 (ainda abaixo da confiança) dependendo do regime; sobe para 0.67, 0.78, 0.82 e 0.91 à medida que as dobras se acumulam. O padrão min_resource = 1 de todo ASHA pronto para uso costuma estar errado, para um backtest.
  4. Eleve automaticamente a fidelidade mínima para o primeiro degrau em que ρ ≥ 0.5, e se nenhum superar, não pode nada. O portão virou min_resource = 2 para um setup e 3 para um mais difícil; o fallback degrada graciosamente para busca de fidelidade total. A correção custa algum ganho de velocidade — pague-o.
  5. Escolha o eixo barato pelo fato de ele ser enviesado ou não, não por ser barato. Histórico mais curto é enviesado — ele seleciona parâmetros ajustados ao regime e nenhum tamanho de amostra conserta isso. Use menos dobras cobrindo o calendário completo (intercaladas, não contíguas) ou resolução mais grosseira sobre o período completo. E gaste o eixo barato onde seu custo realmente mora.

O drill-down é um dos melhores ganhos de velocidade em backtesting, e um dos mais fáceis de transformar em uma forma mais rápida de se enganar. A diferença entre os dois é um único número que você pode medir antes de a busca começar. Se o seu proxy não consegue provar que classifica como a verdade, ele não é um proxy — é um gerador de números aleatórios com um perfil de custo plausível.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Fique à frente do mercado

Assine nossa newsletter para insights exclusivos sobre trading com IA, análises de mercado e atualizações da plataforma.

Respeitamos sua privacidade. Cancele a inscrição a qualquer momento.