Teste de estratégias de trading em dados históricos
Backtest de portfólio confiável. Nível de pesquisa quant
hamster-bot/tester - Uma ferramenta avançada para testar seus sistemas de trading em dados históricos.
- Executa várias estratégias de tipos diferentes em timeframes diferentes ao mesmo tempo.
- Tudo isso com um saldo compartilhado. Para entender como as estratégias convivem na mesma carteira em tempo real.
- Suporte a dados tick a tick. Simula o comportamento da estratégia dentro da vela, como em uma operação em tempo real.
- Sem limites nos dados de mercado de entrada. Testes em qualquer período histórico.
- Testa sua própria lógica complexa, que não pode ser testada com precisão por soluções prontas de terceiros 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 "exchange" (um objeto mock que substitui a exchange). Assim é possível testar
todo o código já escrito do bot. O bot acha que está operando em uma exchange real (envia ordens, recebe saldo e
informações de posições). E essa exchange virtual simulada calcula tudo e gera o relatório.
Dados de mercado para
teste
As exchanges de criptomoedas compartilham publicamente dados históricos de mercado. Exemplos:
public.bybit.com, data.binance.vision, public.bitmex.com.
O testador baixa sozinho o intervalo de dados necessário e monta as barras para o bot. Antes do início do teste, o testador
baixa um pouco mais de dados, para que todos os indicadores de AT da estratégia sejam carregados antes do início do período
de teste.
Os dados são salvos na pasta
tester/data/{exchange}/{symbol}. Você pode colocar seus próprios
dados nessa pasta no formato CSV.
Há um arquivo run_download_data.bat na pasta do bot. Ele executa o bot com a flag --download-data, e nesse modo o testador apenas baixa todos os dados necessários.
Está implementado o download automático de dados de mercado para spot e futuros nas exchanges: BYBIT, BINANCE, MEXC.
A exchange é definida no arquivo de configurações: settings.exchange.name = "binance"
Comportamento
do testador
Do ponto de vista do bot, o testador é apenas mais uma exchange. O bot se conecta a ela e começa a receber barras,
enviar ordens etc. Enquanto isso, o testador apenas emula o comportamento de uma exchange real.
O saldo é compartilhado entre todas as estratégias. Se comporta como os futuros da BYBIT/BINANCE com margem cruzada. O bot pode
consultar o saldo Wallet ou Margin. O saldo Margin é calculado considerando todas as
posições abertas e o PnL não realizado delas.
Comportamento realista do preço. Quando o bot consulta a vela atual ainda não fechada, o testador retorna o preço da operação a partir dos
dados tick a tick (e continua assim até que os dados de mercado dentro da vela se esgotem, então passa para a próxima vela). Dessa forma,
estratégias que dependem do preço dentro da vela (por exemplo slippage, trailing stops etc.) funcionam
corretamente.
Relatório
Ao final do teste, um relatório HTML detalhado é salvo na pasta
tester/report.
E é adicionado um registro em reports_history.csv com informações resumidas do teste, para facilitar
a busca pelas melhores combinações de parâmetros ao otimizar estratégias.
-
Conteúdo do relatório:
- Métricas gerais de todo o sistema de trading:
- Saldo inicial e final
- Lucro/prejuízo total em USDT e %
- Drawdown máximo
- Número de operações
- Percentual de operações lucrativas
- Profit Factor
- Gráficos de velas separados para cada estratégia. Com marcações das operações e visualização da AT da estratégia.

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

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

- Tabelas com a lista de todas as operações de cada estratégia.

- Lista das configurações das estratégias e dos parâmetros do testador
- Informações resumidas de todas as estratégias. Volume negociado e taxas pagas.

Parâmetros
do testador
arquivo: config_tester.json Você pode editar o arquivo em um editor de texto.
name_comment - comentário do teste. Para facilitar a organização dos relatórios.
InitialBalance - saldo inicial para o teste, em USDT
StartDate - data de início do teste, no formato 2026-02-03T00:00:00
EndDate - data de término do teste, no formato 2026-02-13T00:00:00
WarmupDays - número de dias de aquecimento antes do início do teste
MakerFee - taxa de maker (0.0001 = 0.01%) Padrão na BYBIT: 0.00036 = 0,0360%.
(guia de como reduzir bastante a taxa)
TakerFee - taxa de taker (0.0001 = 0.01%) Padrão na BYBIT: 0.001 = 0,1000%
SlippagePercent - slippage para ordens a mercado (0.0001 = 0.01%)
limit_order_volume_check - Verificação de volume para a execução correta de ordens limitadas. A cada tick o testador verifica o volume e vai consumindo a ordem até que ela termine ou o volume acabe
FundingRate - Taxa de funding (0.00025)
FundingIntervalHours - Intervalo de atualização da taxa de funding, em horas (8)
UpdateData - atualizar dados antes do teste (true/false)
use_logger - usar o logger. Se desativado, o teste fica mais rápido (true/false)
max_parallel_runs - número de execuções paralelas do testador ao varrer parâmetros. Se o
desempenho do computador permitir, os processos podem ser paralelizados sem perda de velocidade de 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 o gráfico OHLC no relatório (true/false)
include_chart_balance - incluir o gráfico de saldo no relatório (true/false)
include_chart_position - incluir o gráfico de tamanho das posições abertas no relatório (true/false)
include_strategy_settings - incluir as 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 (varredor
de parâmetros):
Por padrão é uma lista vazia []. A lista é preenchida com valores como
{"name":"nome_do_parametro_a_varrer", "start": 1, "end": 10, "step": 0.1, "values": ["strng1", "string2"]}
name - o nome do parâmetro a varrer. Você pode informar qualquer configuração do bot. Ao todo o bot tem 4 tipos
de configuração.
1) Configurações de estratégia (arquivos .json na pasta settings_strategy). Aqui configuramos: o par de trading,
o timeframe, o gerenciamento do depósito e qual estratégia roda com quais configurações.
Exemplo: settings[*].mrs2.ma_long.type - varre o parâmetro type da ordem de abertura
da estratégia mrs2
2) Configurações da chave de API (arquivos .json na pasta settings_accounts). Aqui configuramos o take profit
geral da conta pelo saldo de margem, ou o limitador do número de posições abertas simultaneamente.
Exemplo: account[*].close_by_margin.profit - varre o parâmetro profit da opção
close_by_margin
3) Configurações gerais do programa do bot (arquivo settings_program.json). Aqui configuramos o multiplicador
geral do lote, risk_multiplier
Exemplo: settings_program.risk_multiplier - varre o parâmetro risk_multiplier
4) Configurações gerais do testador (arquivos config_tester.json). Aqui configuramos os parâmetros do testador. Por exemplo,
é possível rodar testes com diferentes níveis de taxa.
Exemplo: config_tester.MakerFee - varre o parâmetro MakerFee
start - valor inicial do parâmetro
end - valor final do parâmetro
step - passo de variação do parâmetro
values - lista de valores para varrer (strings). Usado para parâmetros do tipo string.
Por exemplo, para o tipo de média móvel, os valores disponíveis são:
["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"]
Para a fonte de preço:
["open", "high", "low", "close", "hl2", "hlc3", "ohlc4", "hlcc4", "oc2"].
Para varrer uma lista de pares de trading - veja o Exemplo 1.
Se você indicar dois parâmetros para varrer, por exemplo de 1 a 10 com passo 1, serão feitas 100
execuções (10 variantes do primeiro parâmetro * 10 variantes do segundo parâmetro). Os resultados de todos os testes são salvos como
relatórios html separados e em uma tabela resumo (reports_history.csv). Isso permite encontrar rapidamente as melhores
combinações de parâmetros para suas estratégias.
Exemplo 1: varredura de pares de trading
parameter_mining é uma lista ([]), na qual são adicionados, separados por vírgula, objetos
de varredura ([{}, {}]).
Para varrer pares de trading, é usado o parâmetro do tipo string values, enquanto os campos numéricos
start/end/step são definidos como 1.0 (eles são ignorados quando
values não está vazio).
O parâmetro settings[*].basic.symbol será aplicado a todos os arquivos de configuração da 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 vai rodar o teste, um de cada vez, para cada um dos 10 pares.
Exemplo 2: varredura de vários parâmetros ao mesmo tempo
Vamos adicionar, além da varredura de pares, uma varredura do valor de % do take-profit — de 0% a 10% em passos de 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": []
}
]
Exemplo 3: configurando uma varredura
Demonstração em vídeo
Todas as estratégias do bot também estão disponíveis em formato PineScript para testes no TradingView.