Logo hamster-bot
RU EN PT

Carregando…


hw98_console_prompt.avif Teste de estratégias de trading em dados históricos

Backtest de portfólio confiável. Nível de pesquisa quant quant

Primeira execução do testador video primeira execução do testador Visão geral das atualizações e otimizador de parâmetros video visão geral das atualizações e otimizador de parâmetros Varredura e análise. Construção de mapas de calor e 3d Surface video Varredura e análise. construção de mapas de calor e 3d surface Testador de estratégias de trading. Instruções para rodar os testes. Varredura de pares. video instruções para rodar os testes. varredura de pares

hamster-bot/tester - Uma ferramenta avançada para testar seus sistemas de trading em dados históricos.

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
    Hamster Bot Backtesting
  • Gráficos de velas separados para cada estratégia. Com marcações das operações e visualização da AT da estratégia. Hamster Bot Backtesting
  • Gráfico do saldo Margin (considerando todas as posições abertas e o PnL não realizado) e do saldo Wallet. Hamster Bot Backtesting
  • 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)Hamster Bot Backtesting
  • Tabelas com a lista de todas as operações de cada estratégia. Hamster Bot Backtesting
  • 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.Hamster Bot Backtesting

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.

Hamster Bot Backtesting

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)

Hamster Bot Backtesting

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.

Hamster Bot Backtesting
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
video Demonstração em vídeo

Todas as estratégias do bot também estão disponíveis em formato PineScript para testes no TradingView.