Primeiros Passos
Pegue sua API key, faça sua primeira requisição, e receba seu primeiro resultado de backtest em minutos.
Pré-requisitos
Pra usar a Backtesting API da EmidLabs você precisa de:
- Uma conta EmidLabs — crie uma no Console.
- Uma API key gerada no Console.
- Qualquer cliente HTTP — curl, fetch, Python requests, ou qualquer SDK de linguagem.
#Autenticação
Toda requisição à API deve incluir sua API key no header x-api-key. Não há outros métodos de autenticação.
x-api-key: em_SUA_API_KEYGerando uma API key
Abra o Console
Vá em API Keys
Crie uma key
Defina uma expiração (opcional)
#Seu Primeiro Backtest
Um backtest é submetido como uma requisição POST. O corpo inclui o par de ativo, o intervalo de datas, e uma definição de estratégia como um objeto JSON aninhado.
Passo 1 — Defina a estratégia
A estratégia é um objeto JSON que descreve o que o engine deve procurar. Aqui está um crossover simples de EMA com confirmação de RSI:
{
"configuration": {
"timeframe": "1H"
},
"inputs": {
"emaFast": "ema(close, 9)",
"emaSlow": "ema(close, 21)",
"rsiValue": "rsi(close, 14)"
},
"conditions": {
"trendUp": "emaFast > emaSlow",
"rsiHealthy": "rsiValue > 40 AND rsiValue < 65"
},
"score": {
"trendUp": 20,
"rsiHealthy": 30
},
"decision": {
"entry": "score >= 40"
}
}Passo 2 — Submeta a requisição
A estratégia é aninhada diretamente sob o campo strategySnapshotJson do corpo da requisição.
curl -X POST \
"https://backtest.emidlabs.com/api/public/v1/backtest" \
-H "Content-Type: application/json" \
-H "x-api-key: em_SUA_API_KEY" \
-d '{
"assetPair": "BTC-USDC",
"initialDate": "2023-01-01",
"finalDate": "2023-12-31",
"strategySnapshotJson": {
"configuration": { "timeframe": "1H" },
"inputs": { "emaFast": "ema(close, 9)", "emaSlow": "ema(close, 21)", "rsiValue": "rsi(close, 14)" },
"conditions": { "trendUp": "emaFast > emaSlow", "rsiHealthy": "rsiValue > 40 AND rsiValue < 65" },
"score": { "trendUp": 20, "rsiHealthy": 30 },
"decision": { "entry": "score >= 40" }
}
}'status: "Running". A execução tipicamente termina em 200–500ms pra maioria dos intervalos de data.Passo 3 — Busque os resultados
Use o id retornado pra buscar resultados via uma requisição GET. O objeto result é só métricas agregadas — nenhum detalhe trade-a-trade. Pra lista completa e paginada de trades, chame o endpoint dedicado /trades (veja a referência da API).
curl -X GET \
"https://backtest.emidlabs.com/api/public/v1/backtest/YOUR_BACKTEST_ID" \
-H "x-api-key: em_SUA_API_KEY"#Lendo os Resultados
Quando status é Completed, o objeto result contém todas as métricas de performance.
Métricas principais
tradesNúmero total de trades executados.winRatePercentual de trades vencedores (0–1).expectancyRR esperado médio por trade. Positivo é lucrativo.pnlRLucro/prejuízo total em unidades de R em todos os trades.profitFactorLucro bruto dividido pelo prejuízo bruto. >1 é lucrativo. null quando não há trades perdedores.maxDrawdownPctMaior drawdown de pico-a-vale como percentual.conditionsDistributionPctCom que frequência cada condition era true por candle.scoreDistributionPctDistribuição dos valores de score total em todos os candles.Unidades de R explicadas
Todo valor de lucro/prejuízo está em unidades de R, não em valores de moeda. Por padrão, 1R = 1% da sua posição (a distância padrão do stop-loss) — configurável por estratégia via riskManagement. Um resultado de +10R significa que a estratégia teria retornado 10× o valor arriscado por trade, em agregado.
Isso torna resultados comparáveis entre estratégias e ativos independente do tamanho da posição, e força o foco no edge estatístico em vez de valores em dólar.