Backtesting em Python e Pine Script: por que a mesma estratégia produz resultados diferentes
Um estudo de Bitcoin sobre momento da execução, dimensionamento, custos em ticks e pontos-base e patrimônio da conta, com resultados medidos em Python e um protocolo explícito de comparação em Pine Script.
Os mesmos sinais de negociação não garantem o mesmo backtest: momento da ordem, quantidade, unidades de derrapagem e contabilidade de posições abertas podem mudar o resultado. Nosso rompimento diário fixo de BTC-USDT retornou +24.46% após custos modelados em 2024–2025, contra +96.28% na conta comparável de compra e manutenção. Quantificamos quatro convenções de execução em Python, conciliamos uma operação perdedora e conferimos cada candle de avaliação com a API da bolsa. A implementação Pine discutida aqui não foi executada no TradingView; a comparação entre motores continua sem verificação.
O QUE ESTE ESTUDO EXPLICA
- Como regras fixas de negociação conectam sinais, ordens, execuções e contabilidade de caixa.
- Efeitos medidos da abertura seguinte versus o mesmo fechamento, da quantidade definida no sinal e de ticks versus pontos-base.
- Resultados brutos e líquidos, drawdown, referência, todas as nove variantes de desenvolvimento e duas etapas walk-forward.
- Como definir as convenções de comparação em Pine e normalizar registros exportados antes de comparar os motores.
A regra de negociação é apenas uma parte do backtest
Duas implementações podem concordar que o Bitcoin rompeu um nível e ainda discordar sobre quantas unidades foram compradas, quanto custou a execução e qual lucro deve ser apresentado. Um sinal no fechamento é uma instrução para criar uma ordem. Não é um registro de execução naquele preço. O TradingView normalmente processa uma ordem comum a mercado no próximo tick disponível, frequentemente a abertura do candle seguinte; as configurações podem alterar essa política. [1]
Investigamos essas diferenças com uma regra fixa de rompimento diário de Bitcoin. Quatro convenções declaradas de execução rodam sobre exatamente os mesmos candles. Todas as comparações numéricas abaixo foram executadas em Python. A implementação Pine Script discutida aqui não foi compilada nem executada no TradingView, e este estudo não contém registros exportados de uma execução Pine. Portanto, medimos as consequências das convenções especificadas, sem alegar um teste concluído de desempenho entre plataformas.
| Cálculo em Python | Política de quantidade e execução | Retorno na avaliação |
|---|---|---|
| reference-next-open | 90% do caixa incluindo comissão, dimensionados na abertura seguinte; ajuste adverso de 5 bp | +24.46% |
| signal-qty-bps | Quantidade fixada pelo fechamento do sinal; execução na abertura seguinte com ajuste adverso de 5 bp | +24.47% |
| signal-qty-ticks | Mesma quantidade definida no sinal; execução na abertura seguinte com cinco ticks de 0.01 USDT | +25.13% |
| same-close | Execução no fechamento confirmado do sinal com ajuste adverso de 5 bp; hipótese alternativa de momento de execução | +24.46% |
Este trabalho amplia nosso estudo prático de construção de algoritmos. Aquele artigo estabeleceu um fluxo completo de pesquisa e discutiu diferenças de dimensionamento e derrapagem no Pine. Aqui, essas diferenças viram experimentos explícitos. A seção final explica como comparar os registros das suas próprias implementações em Python e TradingView.
Fixe a questão econômica e a contabilidade antes de executar
A hipótese econômica é que tendências persistentes podem compensar rompimentos fracassados repetidos. Isso não implica que 55 e 20 sejam números exclusivamente lucrativos. Mantemos essas janelas do artigo anterior para dar à investigação de execução um objeto estável. Escolher outra regra porque sua curva de patrimônio é atraente responderia a outra pergunta e criaria mais uma oportunidade de seleção.
| Item | Convenção registrada |
|---|---|
| Mercado e dados | Preços spot de BTC-USDT, candles diários em UTC; entrada de 2020-02-20–2025-12-31 |
| Entrada | Sem posição: fechamento confirmado estritamente acima da maior MÁXIMA dos 55 candles anteriores, excluindo o atual |
| Saída | Comprado: fechamento confirmado estritamente abaixo da menor MÍNIMA dos 20 candles anteriores, excluindo o atual |
| Ordens | Sinal após o fechamento; execução na abertura seguinte; ordens do último candle ficam sem execução |
| Capital | 10,000 USDT no início de cada período, sem posição; orçamento de 90% do caixa incluindo a comissão de entrada, BTC fracionário |
| Custos principais | Comissão de 10 bp mais ajuste adverso de preço de 5 bp em cada lado |
| Outras hipóteses | Sem alavancagem, posições vendidas, funding, juros sobre caixa, impostos ou custos fixos; sem cobrança separada de spread |
| Posição final | Marcação no último fechamento; sem venda forçada ou reserva hipotética de custos de saída |
| Períodos | Desenvolvimento 2021–2022; validação 2023; avaliação 2024–2025; dados anteriores apenas aquecem os indicadores |
Registramos a especificação, a configuração e a alteração dos dados antes do cálculo de desempenho deste fluxo. É um registro interno de pesquisa, não um pré-registro independente. A mesma regra e um histórico de mercado sobreposto já haviam sido estudados neste site. O período de 2024–2025 é uma avaliação cronológica da implementação congelada, não evidência nova de mercados antes desconhecidos.
O principal critério de aceitação é mecânico: as execuções respeitam o momento de disponibilidade da informação, o caixa não toma empréstimos e a soma dos lucros realizados e em aberto concilia com o patrimônio. Para a avaliação econômica, mostramos a referência de compra e manutenção com o mesmo orçamento, drawdown, sensibilidade aos custos e concentração do lucro. Retorno positivo, sozinho, não aprova uma decisão de implantação.
O que a nova conferência de origem estabelece
O cálculo principal usa 2,142 observações diárias do conjunto de dados empregado no estudo anterior: seis candles de quatro horas agregados em cada dia UTC, publicados por humblefool06 no Hugging Face sob declaração CC BY 4.0. Nossos registros de pesquisa preservam a revisão fixada, a atribuição, a nota de transformação e os hashes SHA-256. A série retida começa em 20 de fevereiro de 2020, após a exclusão de um dia anterior incompleto no estudo precedente. Esta análise usa o subconjunto fixo encerrado em 31 de dezembro de 2025. [3] [9]
Buscamos separadamente todos os 731 candles diários de 2024–2025 pela API pública de dados de mercado da Binance. As 3,655 comparações de abertura, máxima, mínima, fechamento e volume coincidiram exatamente. O relatório de verificação registra URLs, hashes das respostas e o procedimento de comparação. A resposta bruta da API não é redistribuída como conjunto principal. A documentação da Binance informa UTC como limite padrão dos candles e identifica cada candle pelo horário de abertura. [4]
Isso vai além de conferir apenas o hash de um arquivo: testa se outra rota de acesso informa os mesmos candles da avaliação. Ainda é uma conferência da mesma bolsa, não uma auditoria independente dos preços, e não demonstra que uma ordem poderia executar em um valor OHLC. O histórico de aquecimento e desenvolvimento não foi coberto por essa comparação de 731 candles via API.
Ao carregar os dados de pesquisa, verificamos continuidade dos horários, datas duplicadas, preços finitos e positivos e consistência OHLC. Uma série errada continua errada mesmo sendo reproduzível; a ficha da fonte e o procedimento de verificação descrito aqui expõem a incerteza restante. Não inventamos um revisor especialista ou uma segunda fonte independente para fortalecer a apresentação.
Um sinal confirmado não pode comprar na abertura anterior
O ciclo de referência primeiro executa a ordem pendente de ontem na abertura de hoje, depois avalia a posição no fechamento confirmado de hoje e só então calcula a próxima instrução. Os canais de entrada e saída contêm apenas candles anteriores. Incluir a máxima de hoje no canal de entrada tornaria impossível um rompimento estrito do fechamento acima da máxima em dados OHLC válidos. Para testes da disponibilidade da informação, veja nossa investigação de viés de antecipação.
entry_level = max(b.high for b in bars[i-55:i])
exit_level = min(b.low for b in bars[i-20:i])
# Evaluate only after today's completed close.
if quantity == 0 and bar.close > entry_level:
pending = ("buy", bar.date)
elif quantity > 0 and bar.close < exit_level:
pending = ("sell", bar.date)
# Execute pending on the next bar; never at this bar's earlier open.Na execução, a referência de alocação de caixa compra q = 0.9 × cash / [fill × (1 + fee)]. Uma corretora ou simulador pode calcular essa quantidade quando conhece o preço executado. Uma ordem Pine enviada com quantidade explícita no fechamento anterior precisa usar a informação disponível naquele momento. Nossa alternativa fixa a quantidade pelo fechamento do sinal e rejeita uma ordem que depois não caiba no saldo, em vez de inventar caixa ou redimensioná-la silenciosamente.
Um gap sintético deixa a diferença fácil de conferir: com 10,000 USDT, fechamento do sinal em 100, abertura seguinte em 110, custos zero e alocação de 90%, dimensionar na execução compra 81.818182 unidades e deixa 1,000 em caixa. Dimensionar no sinal solicita 90 unidades, gasta 9,900 e deixa 100. As duas contas começam com patrimônio de 10,000 na execução; a exposição posterior difere. É um exemplo aritmético ilustrativo, separado do histórico medido de Bitcoin.
Explicite o contrato do Pine antes de comparar retornos
O desenho Pine v6 considerado aqui usa candles diários confirmados, canais de candles anteriores, quantidade explícita definida no sinal, comissões percentuais e cinco ticks de derrapagem nativa. Uma comparação independente deve usar um gráfico diário padrão de BTCUSDT spot, o período da especificação fixa, histórico de aquecimento suficiente e as configurações declaradas. Não houve compilação no TradingView ou validação pelo Strategy Tester nesta investigação.
Duas unidades são facilmente confundidas: cinco pontos-base significam 0.05% do preço, enquanto cinco ticks de 0.01 USDT significam 0.05 USDT. A um preço hipotético de 100,000 USDT por Bitcoin, os ajustes adversos seriam de 50 USDT e 0.05 USDT, respectivamente. Uma quantidade de ticks não é uma porcentagem. A derrapagem nativa do Pine aceita ticks, e qty explícito na entrada substitui o dimensionamento percentual padrão. [1]
O modelo Python signal-qty-ticks é um alvo de conciliação para as convenções Pine declaradas, não uma réplica completa do TradingView. Revisões da fonte, incrementos mínimos de contrato, arredondamento de quantidade, disponibilidade de saldo e regras de margem ainda podem diferir. A referência permite unidades fracionárias sem filtros de lote da bolsa; nenhuma quantidade simulada é uma alegação de ordem válida para negociação real.
Mantenha calc_on_every_tick e calc_on_order_fills nos padrões declarados e process_orders_on_close desativado. Alterar a política de cálculo ou processamento de ordens muda o experimento. O modelo de execução do Pine diferencia atualizações históricas e em tempo real; uma estratégia aparentemente equivalente em candles completos pode se comportar de outra forma enquanto um candle ainda está em formação. [2]
A referência ganhou dinheiro e ainda ficou abaixo do retorno de comparação
Nos 731 dias de avaliação, de 1º de janeiro de 2024 a 31 de dezembro de 2025, a referência transformou 10,000 em 12,445.81 USDT: +24.46% após os custos variáveis presumidos. A conta comparável de compra e manutenção com alocação inicial rendeu +96.28%. São retornos acumulados no intervalo indicado, não valores anualizados.
| Período | Dias | Estratégia bruta | Estratégia líquida | Manutenção de 90% | Operações encerradas |
|---|---|---|---|---|---|
| 2021–2022 desenvolvimento | 730 | +22.64% | +21.32% | -38.60% | 4 |
| 2023 validação | 365 | +17.97% | +16.55% | +139.71% | 4 |
| 2024–2025 avaliação | 731 | +26.50% | +24.46% | +96.28% | 6 |
O drawdown máximo medido no fechamento diário foi de 20.04%, contra 30.86% na referência de manutenção. A exposição investida média marcada a mercado foi de 37.59%, com posição em 300 dos 731 fechamentos. O valor nocional negociado total dividido pelo patrimônio inicial foi de 12.96 vezes; essa medida de giro conta compras e vendas, não operações completas de ida e volta.
A compra e manutenção conserva a alocação inicial pelo intervalo inteiro, enquanto o rompimento alterna entre caixa e Bitcoin. Retorno maior com drawdown maior não constitui uma classificação completa ajustada ao risco. A conclusão concreta é mais limitada: a conta de rompimento não superou o retorno acumulado da referência especificada. O drawdown de fechamento também omite perdas ocorridas e recuperadas dentro do dia.
Audite uma operação perdedora da ordem ao saldo em caixa
A primeira operação encerrada com prejuízo na avaliação entrou em 2024-01-03, após o sinal de 2024-01-02, e saiu em 2024-01-23, após o sinal de 2024-01-22. A quantidade foi de 0.19993623 BTC. O registro separa o preço bruto de referência do preço executado com ajuste adverso; a tabela abaixo usa os preços efetivamente simulados.
O nocional de entrada foi de 8,991.01 USDT e a comissão de entrada de 8.99. O caixa caiu de 10,000.00 para 1,000.00. Na saída, o resultado pelos preços executados foi de -1,083.88; descontar as duas comissões leva a -1,100.78 USDT líquidos. O caixa final foi de 8,899.22. Pequenas diferenças aparentes ao somar os valores apresentados vêm do arredondamento; os cálculos da pesquisa preservam a precisão completa.
| Item do registro | Valor |
|---|---|
| Preço executado na entrada | 44,969.38 |
| Quantidade de BTC | 0.19993623 |
| Comissão de entrada | 8.99 |
| Caixa após entrada | 1,000.00 |
| Preço executado na saída | 39,548.24 |
| Comissão de saída | 7.91 |
| Resultado pelos preços executados antes das comissões | -1,083.88 |
| Resultado líquido da operação encerrada | -1,100.78 |
| Caixa após saída | 8,899.22 |
A derrapagem já alterou os preços de entrada e saída. Descontar novamente do resultado pelos preços executados a perda atribuída à derrapagem seria cobrá-la duas vezes. Neste registro, “resultado bruto da operação” significa antes das comissões, mas depois da derrapagem nos preços; a execução separada da estratégia bruta remove comissões e derrapagem. Esses rótulos descrevem cálculos diferentes.
Lucro de operações encerradas e patrimônio respondem a perguntas diferentes
A avaliação termina sem posição, de modo que suas seis operações encerradas explicam todo o lucro da conta. A validação de 2023 oferece um exemplo mais revelador: operações encerradas perderam 669.03 USDT, enquanto os 0.25356187 BTC restantes carregavam 2,323.63 de lucro em aberto marcado a mercado, após descontar a comissão de entrada paga. O lucro total da conta foi, portanto, de 1,654.60 USDT, ou +16.55%. O caixa final era de apenas 933.10; a posição compunha o restante do patrimônio de 11,654.60.
A identidade de conciliação é patrimônio inicial + resultado líquido realizado + resultado em aberto marcado a mercado = caixa + posição marcada a mercado = patrimônio final. Verificamos essa igualdade com precisão completa em cada execução. A estatística de operações encerradas de uma plataforma pode discordar do retorno total mesmo quando ambas estão aritmeticamente corretas. Compare grandezas equivalentes antes de tratar a divergência como erro.
Liquidar no último fechamento responderia a outra pergunta e acrescentaria uma comissão de venda e um ajuste adverso. Mantemos a marcação da posição aberta e declaramos a convenção, sem alternar silenciosamente entre resultados realizados e não realizados.
Qual diferença de execução importa nestes candles?
Alterar apenas o dimensionamento, de alocação no momento da execução para quantidade fixada pelo fechamento do sinal, aumenta o retorno de avaliação em +0.0099 ponto percentual. Trocar cinco pontos-base por cinco ticks nesse modelo aumenta o retorno em +0.6651 ponto, ou 66.507521 USDT. A execução no próprio fechamento aumenta o saldo final da referência em apenas +0.002848 USDT. São efeitos de políticas medidos em Python, não divergências observadas no TradingView.
O Bitcoin negocia continuamente, de modo que fechamentos e aberturas diários adjacentes desta amostra podem estar muito próximos. Um efeito temporal pequeno aqui não torna válida a execução no mesmo fechamento em outro mercado, intervalo sem liquidez ou implementação real com latência. O gap sintético mostra por que a mesma escolha de programação pode importar muito mais em outras trajetórias de preço.
Ao conciliar implementações, compare os registros de execução antes das curvas de patrimônio. Encontre a primeira quantidade ou preço divergente e acompanhe seu efeito posterior no caixa. As diferenças se acumulam: alocações futuras dependem do caixa anterior. Retornos finais parecidos não comprovam mecânicas de negociação iguais.
Teste custos e dependência de operações excepcionais
A referência pagou 129.58 USDT em comissões em 12 execuções. A tabela de custos mantém a comissão em 10 bp por lado e varia o ajuste adverso de preço. Ajuste adverso zero aqui não significa conta sem custos; a linha bruta da estratégia na tabela anterior é um cálculo separado sem comissões nem derrapagem. As hipóteses combinam spread e perda de execução em um único ajuste adverso, sem estimar o spread histórico entre compra e venda. Para outras categorias de taxas, veja nossa análise de custos de negociação.
| Comissão por lado | Ajuste adverso por lado | Retorno líquido | Drawdown máximo no fechamento diário |
|---|---|---|---|
| 10 bp | 0 bp | +25.13% | 19.79% |
| 10 bp | 5 bp | +24.46% | 20.04% |
| 10 bp | 10 bp | +23.79% | 20.30% |
| 10 bp | 20 bp | +22.45% | 20.80% |
O resultado líquido médio por operação encerrada foi de 407.63 USDT. O ganho médio das vencedoras foi de 1,748.18 e o resultado médio das perdedoras foi de -932.91; o fator de lucro das operações encerradas foi de 1.87, com 50.00% de operações vencedoras. Médias em dinheiro dependem da evolução do tamanho da conta. São resumos descritivos desse registro, não previsões estáveis da próxima operação.
As três maiores operações encerradas contribuíram com 5,244.53 USDT. Subtrair essas contribuições do resultado total deixa -2,798.72. Essa aritmética destaca a concentração; não é uma nova simulação que ignora essas operações e recalcula os tamanhos posteriores. Os retornos anuais também mostram o percurso: 2024 +38.44%; 2025 -10.10%. Eles vêm da conta contínua de avaliação, não de contas anuais reiniciadas.
Deixe as variantes rejeitadas à vista do leitor
Declaramos nove combinações: janelas de entrada de 35, 55 e 80, cada uma com saídas de 10, 20 e 30. A tabela mostra todos os resultados de desenvolvimento após custos. Mantemos 55/20 independentemente da classificação, para que a comparação não se transforme silenciosamente em uma busca pelo título de execução mais favorável.
| Janela de entrada | Saída 10 | Saída 20 | Saída 30 |
|---|---|---|---|
| 35 | +4.00% | +10.03% | -9.22% |
| 55 | +14.61% | +21.32% | +17.48% |
| 80 | +9.12% | +15.55% | +11.89% |
Oito das nove células são positivas, mas os retornos vão de −9.22% a +21.32%; a combinação 35/30 perde, e as saídas alteram substancialmente o resultado. A regra mantida de 55/20 também ficou em primeiro lugar. Seu registro de seleção precede esta execução, mas o artigo anterior já nos familiarizou com ela: essa coincidência não é confirmação independente. O histórico compartilhado torna os resultados correlacionados, e uma divisão ou grade não apaga o conhecimento anterior. Bailey e coautores analisam como selecionar backtests pode gerar sobreajuste; nossa grade não é o estimador formal deles para a probabilidade de sobreajuste. [5]
As duas etapas walk-forward testam um procedimento de seleção documentado, usando apenas dados anteriores: escolher a melhor das nove por retorno no treinamento e avaliar no ano seguinte. Os anos de teste são 2022 e 2023, sem usar 2024–2025 na seleção. São extensões diagnósticas, não evidência adicional intocada para a conta final.
Um procedimento de seleção precisa enfrentar o período seguinte
Cada etapa reinicia com 10,000 USDT, usa candles anteriores para aquecer os indicadores e aplica os parâmetros selecionados sem modificações. Uma boa classificação no treinamento permite que o candidato seja testado; não fornece o resultado do teste.
| Período de treinamento | Ano seguinte de teste | Entrada/saída selecionadas | Retorno líquido no teste |
|---|---|---|---|
| 2021-01-01–2021-12-31 | 2022 | 35/20 | -30.54% |
| 2021-01-01–2022-12-31 | 2023 | 55/20 | +16.55% |
Preservamos os parâmetros selecionados e o retorno posterior. Se um período seguinte perde, a falha permanece no relatório. Não adicionamos filtros, reajustamos a regra principal ou continuamos abrindo o período final até o artigo obter um resultado vencedor.
Trajetórias de Monte Carlo mudam a ordem, não a quantidade de evidência
Reamostramos os 731 retornos líquidos diários observados do patrimônio da conta em blocos circulares contíguos de 20 dias, retornando ao início quando necessário. Cada trajetória tem a mesma duração e começa com o mesmo capital. A semente fixa é 6142026; as 5,000 trajetórias tornam o cálculo reproduzível. Os blocos preservam parte da dependência serial local, ao contrário de embaralhar dias isolados. O tamanho do bloco é uma escolha explícita de modelagem, não um ótimo estimado. [6]
O retorno acumulado mediano simulado foi de +20.98%, com percentis 5 e 95 de -38.34% e +166.29%. O drawdown máximo mediano foi de 30.22%; o percentil 95 foi de 50.12%. A fração de trajetórias simuladas perdedoras foi de 32.28%. São resumos condicionais de trajetórias, não uma probabilidade calibrada de perda futura ou um intervalo de confiança para alfa.
Reamostrar retornos da conta não gera novos candles, recalcula decisões de rompimento, modela novas condições de liquidez ou recupera crises ausentes. Não fazemos bootstrap do desempenho relativo à referência. Mais trajetórias reduzem o ruído de Monte Carlo no procedimento escolhido; a evidência histórica continua nos mesmos 731 dias e na mesma sequência de operações.
Dê ao assistente uma tarefa verificável em cada etapa
ChatGPT e Claude podem ajudar a formular uma regra, explicar uma divergência contábil e questionar um relatório. Codex e Claude Code podem inspecionar um repositório, editar arquivos e executar comandos de desenvolvimento. Essas capacidades documentadas sustentam o fluxo de trabalho; não demonstram um algoritmo lucrativo. Esta investigação usou Codex no desenvolvimento do repositório e Python nos cálculos. Não fizemos um experimento controlado de ChatGPT contra Claude nem usamos assistentes para prever sinais. [7] [8]
Primeiro, defina o limite da informação. O assistente deve expor detalhes não resolvidos antes de implementá-los: comparação estrita ou inclusiva, janelas anteriores, momento da ordem, orçamento de caixa, arredondamento e posição final. O primeiro prompt é uma instrução reutilizável, não uma alegação de experimento registrado entre modelos.
Transforme esta ideia em uma especificação executável antes de programar. Declare hipótese econômica; entrada e saída; candles usados em cada entrada de dados; disponibilidade do sinal; momento da ordem e execução; quantidade e restrições de caixa; custos; fuso horário; avaliação final; períodos cronológicos; referência; e critérios de decisão. Liste escolhas não resolvidas. Não selecione regras porque melhoram o histórico.Depois, restrinja a implementação. Peça uma máquina de estados e casos de teste, sem otimização escondida em um pedido para corrigir um erro. Um teste útil altera preços após a data t e verifica que decisões e execuções anteriores permanecem iguais. Um teste contábil útil concilia caixa, posição e taxas mesmo quando a última operação continua aberta.
Implemente exatamente a especificação congelada em anexo. Separe sinais, criação de ordens, execuções, contabilidade de caixa e relatórios. Não adicione filtros nem otimize parâmetros. Use casos sintéticos para excluir o candle atual, conferir a execução na abertura seguinte, dimensionar incluindo a comissão, tratar saldo insuficiente e manter uma posição final aberta. Mostre a correspondência de cada regra com o código e o teste.Na depuração, compare os registros a partir da primeira divergência. No relatório, exija números extraídos dos arquivos e identificação explícita dos componentes não executados. Os dados de mercado fornecem observações, o código executável faz o cálculo e o pesquisador decide quais hipóteses e comparações merecem confiança.
Compare estes dois registros normalizados em ordem temporal. Encontre a primeira diferença em candle de entrada de dados, sinal, quantidade solicitada, preço executado, comissão, posição ou patrimônio. Explique com as configurações e os valores registrados. Concilie patrimônio inicial mais resultados realizados e em aberto com o patrimônio final. Não reajuste a estratégia nem deduza um erro apenas pelo retorno final.Gere o relatório somente a partir da configuração, do manifesto de dados e dos arquivos de resultados executados fornecidos. Inclua todas as variantes testadas, limites dos períodos, retornos bruto e líquido, referência, drawdown, exposição, giro, concentração por operação e contabilidade de posições abertas. Vincule cada tabela ao arquivo de origem. Identifique explicitamente código não executado e verificações indisponíveis. Preserve resultados desfavoráveis; não invente revisão nem comparação de modelos.Como verificar sua execução real no TradingView
Para comparar suas próprias implementações Pine e Python, use um gráfico diário padrão do mesmo símbolo e período e guarde o código Pine, as configurações, a fonte do gráfico e as operações exportadas. Comece sem custos para isolar os sinais; depois adicione comissões e a mesma derrapagem em ticks nos dois motores. Compare datas de sinais e operações antes dos retornos. Diferenças de incremento de lote ou histórico devem ser documentadas como divergências, sem escondê-las com arredondamento.
Normalize os dois conjuntos de registros de execução para um esquema comum: horário, lado, quantidade solicitada, preço de referência, preço executado, comissão, posição resultante, caixa e patrimônio. Mapeie explicitamente cada campo exportado, incluindo fuso horário, unidades e arredondamento. Compare com a convenção Python de quantidade no sinal e custos em ticks descrita aqui. É um protocolo diagnóstico, não uma alegação de que todos os formatos localizados do Strategy Tester são iguais. Sem uma execução Pine exportada, o resultado entre motores continua sem verificação.
Essa sequência também explica por que um backtest lucrativo pode perder no mercado real: o sistema pode receber candles diferentes, criar uma ordem mais tarde, executar menos unidades ou pagar outro spread. Quando esses registros coincidirem, a falha de desempenho restante passa a ser uma questão da estratégia e do mercado, não uma justificativa para continuar mudando hipóteses de execução.
Antes de confiar em retornos de backtest coincidentes
- Alinhe instrumento, fonte, limites dos candles em UTC, intervalo de datas e histórico de aquecimento.
- Registre o momento exato das ordens, a fórmula de quantidade, o tamanho do tick, a comissão e a política para saldo insuficiente.
- Compare a primeira execução divergente antes do saldo final.
- Concilie lucro realizado, posições abertas, taxas, caixa e patrimônio marcado a mercado.
- Preserve todas as variantes declaradas e diferencie histórico reutilizado de nova evidência prospectiva.
- Congele o próximo teste prospectivo e guarde sinais, ordens enviadas e execuções confirmadas.
Perguntas práticas
Por que os backtests em Python e Pine Script diferem?
A linguagem de programação raramente basta para explicar a diferença. Dados, disponibilidade do sinal, momento da ordem, dimensionamento, custos e definições da conta determinam o resultado. Esta investigação altera essas convenções explicitamente em Python e descreve um protocolo de comparação em Pine para registros exportados separadamente.
ChatGPT ou Claude podem criar um robô de trading lucrativo?
Eles podem ajudar a desenvolver e inspecionar o código. A referência produziu +24.46% após custos variáveis presumidos no período histórico indicado, mas isso não demonstra que algum assistente acrescentou uma vantagem de investimento. Não houve experimento comparativo de investimento com IA nem teste de lucratividade em conta real.
Como saber se uma estratégia tem vantagem?
Primeiro, confirme que o código implementa as regras pretendidas de informação e contabilidade. Depois, avalie o procedimento de seleção congelado com uma referência adequada, custos realistas e observações posteriores. Concentração do lucro, escolhas anteriores da pesquisa e mudanças na execução afetam a interpretação; um backtest positivo não resolve essas questões.
Como evitar sobreajuste em estratégias de trading?
Documente cada tentativa, limite variações discricionárias, separe seleção e avaliação em ordem cronológica e preserve variantes perdedoras. A grade de nove combinações e as duas etapas walk-forward expõem a sensibilidade; não certificam a robustez da regra restante nem apagam o conhecimento da pesquisa anterior.
A simulação de Monte Carlo comprova uma vantagem?
Não. Este bootstrap em blocos reorganiza os retornos líquidos diários observados da conta sob uma hipótese de dependência declarada. As trajetórias ajudam a inspecionar a sensibilidade condicional do drawdown e do retorno. Elas não criam novos dados históricos, novos regimes de mercado ou evidência de valor preditivo.
A estratégia Pine Script foi validada contra o Python?
Não. Os cálculos e testes em Python foram executados. O código Pine não foi compilado nem executado no TradingView; ele define a quantidade no momento do sinal e usa derrapagem em ticks fixos. Suas execuções exportadas ainda precisam ser comparadas com o modelo Python indicado.
Fontes e metodologia
Tabelas e gráficos são cálculos que executamos sobre os dados atribuídos, não conclusões das fontes abaixo. Nosso processo de pesquisa registrou o protocolo, as alterações anteriores aos cálculos, os hashes de origem, as conferências via API, os testes e a contabilidade do sinal ao patrimônio. O artigo apresenta as hipóteses e os resultados medidos necessários para avaliar o argumento. A documentação externa fundamenta o comportamento das plataformas e os métodos; não endossa a estratégia. Não alegamos revisão por especialista independente.
- TradingView: estratégias Pine Script e emulador de corretora
- TradingView: modelo de execução do Pine Script
- humblefool06: conjunto BTC-USDT de quatro horas e ficha de origem
- Binance: documentação pública de candles spot
- Bailey e coautores: The Probability of Backtest Overfitting
- Politis e White: Automatic Block-Length Selection for the Dependent Bootstrap
- OpenAI: geração de código e Codex
- Anthropic: visão geral do Claude Code
- Creative Commons: termos da licença Atribuição 4.0
Pesquisa educacional retrospectiva com custos variáveis modelados. Impostos e custos operacionais fixos foram excluídos. Não houve execução real, teste de desempenho no TradingView ou experimento comparativo de investimento com IA.