Teste de estratégias de trading com dados históricos
Backtest de portfólio confiável. Nível de pesquisa quant
hamster-bot/tester - Ferramenta avançada para testar seus sistemas de trading com dados históricos.
- Execução simultânea de várias estratégias de tipos diferentes em diferentes timeframes.
- Tudo isso com saldo compartilhado, para entender como as estratégias coexistem na mesma carteira em tempo real.
- Suporte a dados de ticks. Simulação do comportamento da estratégia dentro do candle como em negociação real.
- Sem limites para dados de mercado de entrada. Testes em qualquer período histórico.
- Teste de lógica complexa própria que é difícil reproduzir com precisão em soluções prontas sem gambiarras.
- Os backtests rodam no mesmo código de produção usado pelo bot em tempo real.
Implementado como um conector separado
para uma "bolsa" (objeto Mock que substitui a bolsa real). Assim é possível testar todo o código já escrito do bot. O bot pensa que está trabalhando em uma bolsa real (envia ordens, recebe saldo e informações de posições). E essa bolsa virtual calcula tudo e gera o relatório.
Dados de mercado para teste
As corretoras de criptomoedas compartilham publicamente dados históricos de mercado. Exemplos: public.bybit.com, data.binance.vision, public.bitmex.com.
O testador baixa o intervalo necessário de dados de trades e monta os candles para o bot. Antes do início do teste, o testador também baixa dados extras para aquecer todos os indicadores de TA usados pela estratégia.
Os dados são salvos na
pasta tester/data/{exchange}/{symbol}. Nessa pasta você também pode colocar seus próprios dados em formato CSV.
Há um arquivo run_download_data.bat na pasta do bot. Ele inicia o bot com a flag --download-data e neste modo o testador simplesmente baixa todos os dados necessários.
O download automático de dados de mercado está implementado para spot e futuros das corretoras: BYBIT, BINANCE, MEXC.
A corretora é configurada no arquivo de configurações: settings.exchange.name = "binance"
Comportamento do testador
Do ponto de vista do bot, o testador é apenas mais uma bolsa. O bot se conecta a ela e começa a receber candles, enviar ordens etc. Enquanto isso, o testador apenas emula o comportamento de uma bolsa real.
Saldo é compartilhado entre todas as estratégias. Comportamento como em futuros BYBIT/BINANCE com margem cruzada. O bot pode solicitar saldo Wallet ou Margin. O saldo de margem é calculado considerando todas as posições abertas e o PnL não realizado.
Comportamento real do preço. Quando o bot solicita o candle atual ainda não finalizado, o testador retorna o preço de trade dos dados de ticks (até acabarem os dados de mercado dentro do candle e passar para o próximo). Assim, estratégias dependentes de preço intrabar (por exemplo, slippage, trailing stops etc.) funcionam corretamente.
Relatório
Ao final do teste, um relatório HTML detalhado é salvo na
pasta tester/report.
Também é adicionada uma linha em reports_history.csv com o resumo do teste, para facilitar a busca das melhores combinações de parâmetros durante a otimização.
-
Conteúdo do relatório:
- Métricas gerais de todo o sistema de trading:
- Saldo inicial e saldo final
- Lucro/prejuízo total em USDT e em %
- Máximo drawdown
- Número de trades
- Percentual de trades lucrativos
- Profit Factor

- Gráficos de candles individuais para cada estratégia, com marcações das operações e visualização dos indicadores TA da estratégia.

- Gráfico de saldo de margem (considerando todas as posições abertas e PnL não realizado) e gráfico de saldo Wallet.

- Gráfico que mostra o tamanho total das posições abertas em USDT (e uma linha em % em eixo separado mostrando a relação entre o total das posições abertas e o saldo de Margem)

- Tabelas com a lista completa de operações por estratégia.

- Lista de configurações das estratégias e parâmetros do testador.
- Resumo consolidado de todas as estratégias. Volume negociado e comissões pagas.

Parâmetros do testador
arquivo: config_tester.json Você pode editar esse arquivo em qualquer editor de texto.
name_comment - comentário do teste, para facilitar a navegação nos relatórios
InitialBalance - saldo inicial para o backtest em USDT
StartDate - data de início do backtest no formato 2026-02-03T00:00:00
EndDate - data de término do backtest no formato 2026-02-13T00:00:00
WarmupDays - quantidade de dias de aquecimento antes do início do backtest
MakerFee - taxa maker (0.0001 = 0.01%). Taxa padrão da BYBIT: 0.00036 = 0,0360%. (guia para reduzir bastante as taxas)
TakerFee - taxa taker (0.0001 = 0.01%). Taxa padrão da BYBIT: 0.001 = 0,1000%
SlippagePercent - slippage para ordens a mercado (0.0001 = 0.01%)
limit_order_volume_check - Verificação de volume para execução correta de ordens limitadas. O testador verifica o volume a cada tick e preenche a ordem até que esteja completa ou enquanto houver volume disponível
FundingRate - Valor da taxa de funding (0.00025)
FundingIntervalHours - Intervalo de atualização da taxa de funding em horas (8)
UpdateData - atualizar dados antes do backtest (true/false)
use_logger - usar logger. Se desativado, acelera o backtest (true/false)
max_parallel_runs - quantidade de execuções paralelas do testador durante a otimização de parâmetros. Se o computador suportar, é possível paralelizar sem perda de velocidade por cálculo.
arquivo: config_tester.json/report Configuração do conteúdo do relatório:
chart_ohlc_height - altura do gráfico OHLC em pixels
chart_balance_height - altura do gráfico de saldo em pixels
chart_position_height - altura do gráfico de tamanho das posições abertas em pixels
include_chart_ohlc - incluir gráfico OHLC no relatório (true/false)
include_chart_balance - incluir gráfico de saldo no relatório (true/false)
include_chart_position - incluir gráfico de tamanho das posições no relatório (true/false)
include_strategy_settings - incluir configurações da estratégia no relatório (true/false)
Otimizador (varredura de parâmetros)
arquivo: config_tester.json/parameter_mining Configuração do otimizador:
Por padrão, isso é uma lista vazia []. Preencha com entradas como {"name":"nome_do_parametro", "start": 1, "end": 10, "step": 0.1, "values": ["string1", "string2"]}
name - nome do parâmetro a otimizar. Quase qualquer configuração do bot pode ser usada. O bot tem 4 grupos de configuração.
1) Configurações de estratégia (arquivos .json em settings_strategy). Aqui você ajusta par, timeframe, gestão de depósito e opções da estratégia.
Exemplo: settings[*].mrs2.ma_long.type - otimizar type da ordem de entrada da estratégia mrs2
2) Configurações da chave API da conta (arquivos .json em settings_accounts). Aqui você ajusta take profit global por margem e limite de posições abertas simultaneamente.
Exemplo: account[*].close_by_margin.profit - otimizar profit em close_by_margin
3) Configurações globais do programa do bot (settings_program.json). Aqui você ajusta opções globais, como multiplicador de risco.
Exemplo: settings_program.risk_multiplier - otimizar risk_multiplier
4) Configurações globais do testador (config_tester.json). Aqui você pode otimizar parâmetros do testador, como comissões.
Exemplo: config_tester.MakerFee - otimizar MakerFee
start - valor inicial
end - valor final
step - passo de variação
values - lista de valores em string para varrer. Usado para parâmetros textuais.
Por exemplo, tipos de média móvel disponíveis:
["SMA", "EMA", "GMA", "HARMONIC", "TEMA", "DEMA", "ZLEMA", "WMA", "VWMA", "RMA", "EHMA", "THMA", "HMA", "DMA", "ATR", "H", "L", "SMA_KALMAN", "EMA_KALMAN", "GMA_KALMAN", "HARMONIC_KALMAN", "TEMA_KALMAN", "DEMA_KALMAN", "ZLEMA_KALMAN", "WMA_KALMAN", "VWMA_KALMAN", "RMA_KALMAN", "EHMA_KALMAN", "THMA_KALMAN", "HMA_KALMAN", "DMA_KALMAN", "ATR_KALMAN", "H_KALMAN", "L_KALMAN"]
Fontes de preço disponíveis:
["open", "high", "low", "close", "hl2", "hlc3", "ohlc4", "hlcc4", "oc2"].
Para varredura de pares — veja o Exemplo 1.
Se você definir dois parâmetros de 1 a 10 com passo 1, o testador fará 100 combinações (10 variações do primeiro parâmetro * 10 variações do segundo). Os resultados são salvos em relatórios HTML separados e na tabela consolidada (
reports_history.csv). Isso ajuda a encontrar rapidamente as melhores combinações de parâmetros para suas estratégias.
Exemplo 1: varredura de pares de trading
parameter_mining é uma lista ([]) onde você adiciona objetos de varredura separados por vírgula ([{}, {}]).
Para varrer pares de trading, use o campo de string values; os campos numéricos start/end/step devem ser definidos como 1.0 (são ignorados quando values não está vazio).
O parâmetro settings[*].basic.symbol será aplicado a todos os arquivos de configuração na pasta settings_strategy:
"parameter_mining": [
{
"name": "settings[*].basic.symbol",
"start": 1.0,
"end": 1.0,
"step": 1.0,
"values": [
"1000BONKUSDT", "1000FLOKIUSDT", "1000LUNCUSDT",
"1000NEIROCTOUSDT", "1000PEPEUSDT", "1000TAGUSDT",
"4USDT", "AAVEUSDT", "ACHUSDT", "ADAUSDT"
]
}
]
Resultado: o testador executará o backtest para cada um dos 10 pares em sequência.
Exemplo 2: varredura de vários parâmetros simultaneamente
Adicionamos à varredura de pares uma varredura de % take-profit — de 0% a 10% com passo 0.5 (21 valores no total).
Número de combinações: 10 pares × 21 valores = 210 execuções.
"parameter_mining": [
{
"name": "settings[*].basic.symbol",
"start": 1.0,
"end": 1.0,
"step": 1.0,
"values": [
"1000BONKUSDT", "1000FLOKIUSDT", "1000LUNCUSDT",
"1000NEIROCTOUSDT", "1000PEPEUSDT", "1000TAGUSDT",
"4USDT", "AAVEUSDT", "ACHUSDT", "ADAUSDT"
]
},
{
"name": "settings[*].options.take_profit_long",
"start": 0,
"end": 10.0,
"step": 0.5,
"values": []
}
]
Além disso, todas as estratégias do bot estão disponíveis em formato PineScript para testes no TradingView.