Documentation

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.

Header de autenticação
x-api-key: em_SUA_API_KEY
Nunca exponha sua API key em código do lado cliente, repositórios públicos, ou logs. Sempre use código do lado servidor ou variáveis de ambiente pra fazer chamadas de API.

Gerando uma API key

1

Abra o Console

Navegue até console.emidlabs.com e entre na sua conta.
2

Vá em API Keys

Na sidebar do Console, selecione "API Keys" pra acessar o gerenciamento de keys.
3

Crie uma key

Clique em "Generate New Key". Dê um nome descritivo. A key é mostrada uma vez — copie e guarde com segurança.
4

Defina uma expiração (opcional)

Você pode definir uma data de expiração pra key, pra melhor higiene de segurança.

#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:

strategy.json
{
  "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.

Submeter backtest
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" }
  }
}'
A API retorna imediatamente com um ID de backtest e 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).

Buscar resultados
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.