Uma API de futuros de paper trading com preços reais ao vivo. Seu bot abre posições alavancadas, deixa ordens limite e stop pendentes, move seus stops e é liquidado - tudo liquidado nos nossos servidores, em dólares simulados. O mesmo código que você vai rodar de verdade, sem nenhuma das consequências.
Sem cartão, sem KYC, sem depósito. Toda condição de execução é você quem define - tamanho do book, slippage, latência, execuções parciais, recusas, taxas. Grátis para sempre com 120 requisições por minuto - o Pro custa $27 quando um bot vira quatro. Os dados de mercado continuam sem chave em todos os planos.
# no key needed - run this right now curl "https://marginpad.io/api/bot/v1/price?symbol=BTC" { "symbol": "BTC", "price": …, "ts": … }
curl -X POST ".../v1/open" -H "X-API-Key: mpb_…" \ -d '{"symbol":"BTC","side":"long","margin_usd":100, "leverage":10,"trail_pct":1.5}' { "ok": true, "position": { "id": "bot_9f21…", "entry": …, "liq_price": …, "trail_pct": 1.5, "fee_round_trip_usd": 1.10 } }
Entre com um e-mail - sem senha, sem KYC. As posições do seu bot ficam salvas na sua conta, e uma conta pode ter várias chaves para que um bot de backtest e um bot ao vivo nunca dividam o mesmo orçamento de requisições.
| Nome | Livro | Chave | Chamadas | Último uso |
|---|
Suas chaves, o uso delas e o book que cada uma opera aparecem aqui depois que você entrar. Chaves são segredos - quem tiver uma pode operar sua conta paper.
Toda conta começa no Free e recebe o produto completo: o motor de trading, taxas reais das plataformas, entradas limite e stop, trailing stops, replay, books, o stream WebSocket e todos os dados de mercado sem chave. Os planos pagos elevam os limites e acrescentam webhooks, detalhamentos do relatório com conclusões escritas, 90 dias de histórico de trades em vez de 30, e mais chaves e books. O motor em si nunca é limitado.
O motor completo, grátis por 7 dias a partir do dia em que você cria sua primeira chave. Depois disso, o motor exige um plano - os dados de mercado continuam grátis e sem chave para sempre, sem nenhuma conta.
Para um bot que roda sem supervisão e para comparar estratégias em vez de ficar no palpite.
Para uma frota - uma família de estratégias, cada uma com seu próprio book, rodando ao mesmo tempo.
Para um app ou uma mesa que opera em nome de seus próprios usuários - uma chave para cada, um book para cada.
Em 125 contas e 174 chaves, o bot mais ativo em produção chega a 66 requisições por minuto das 120 que o Free já permite, e nenhuma chave jamais foi limitada por taxa em qualquer plano. O único teto do Free que de fato é atingido são as chaves: 12 dessas 125 contas estão no limite de três chaves ou acima dele, porque uma configuração séria quer uma chave por bot, para que um backtest e uma estratégia ao vivo nunca dividam o mesmo orçamento de requisições. Webhooks e books extras estão nos planos pagos e até agora não tiveram nenhuma adoção - preferimos dizer isso a vender um plano por eles. Tudo o que decide se um resultado é real - o motor, todos os mercados, ordens limite e stop, replay, o stream WebSocket, a simulação totalmente configurável e o detalhamento de custos no seu relatório - está no Free.
| O que muda com o plano | Free | Pro · $27 | Max · $69 | Business · $139 |
|---|---|---|---|---|
API de dados de mercado (/api/v1/*) com a sua chave60 / min por IP sem chave, em todos os planos | 120 / min | 600 / min | 2000 / min | 5000 / min |
| Chaves de API por conta | 3 | 10 | 30 | 100 |
| Posições abertas ao mesmo tempo | 50 | 200 | 500 | 1000 |
| Books - diário, saldo e relatório separados por estratégia o limite que a maioria das pessoas realmente atinge | 1 | 5 | 20 | 50 |
| Webhooks - assinados, com novas tentativas, entregues enquanto você está offline | nenhum | 3 | 15 | 50 |
| Histórico de trades guardado o que /v1/trades, o relatório e a curva de capital ainda conseguem ver | 30 dias | 90 dias | 90 dias | 90 dias |
| Requisições por minuto, por chave medido: o bot mais ativo em produção usa 46, e nunca houve limitação | 120 | 600 | 2000 | 5000 |
Trading Report /v1/report | totais + nota de habilidade até 30 dias atrás | + detalhamentos & conclusões até 90 dias atrás | + detalhamentos & conclusões | + detalhamentos & conclusões |
Em todos os planos, Free inclusive: o motor de trading completo - ordens a mercado, limite e stop, trailing stops, fechamentos parciais, dry run e replay - o stream WebSocket, o servidor MCP, a tabela de taxas de 9 plataformas reais, de $1 a $100,000 de margem por trade com até 1000× de alavancagem, e todos os endpoints de dados de mercado sem chave em velocidade total. Os planos pagos elevam limites. Não desbloqueiam o produto.
O Premium é outro produto. Uma assinatura do MarginPad Premium libera recursos no site - os indicadores exclusivos de gráfico, o mapa de calor de liquidações, o Ask AI nos gráficos - e, desde 15 de setembro de 2026, não altera nenhum limite da API. Estes planos também não liberam esses recursos do site. Compre o que você realmente usa.
Os planos são mês a mês, pagos em cripto ou direto do seu saldo de recompensas da MarginPad, e um mês comprado antecipadamente é somado ao que você tem, em vez de substituí-lo. Seus tetos atuais estão sempre em GET /api/bot/v1/usage - limits, features, plan_until - para que um bot os leia em vez de adivinhar.
O que você está comprando, por escrito. A seção 9 dos termos trata da API em separado: o que um plano inclui e o que acontece no dia em que ele termina, que nada renova automaticamente e não há nada a cancelar, o que nos comprometemos e o que não nos comprometemos a entregar em disponibilidade (não há SLA - dizemos isso, e dizemos a que nos comprometemos em vez disso), aviso de trinta dias antes de qualquer mudança incompatível e que você pode criar e vender produtos comerciais sobre esta API sem nos pedir permissão.
Seu bot é avisado antes de o plano vencer, não depois. Toda resposta com chave traz X-MP-Plan e, nos últimos quatorze dias, também traz X-MP-Plan-Expires e X-MP-Plan-Days-Left. Registre esses valores e um bot sem supervisão pode avisar você por conta própria; a mesma contagem regressiva está nesta página e em /v1/usage. Um plano que acaba derruba a chave para o Free - ela nunca para de responder.
O primeiro não precisa de chave nenhuma - cole num terminal antes de decidir qualquer coisa. Cada caminho abaixo existe numa v1 congelada e numa v2 com envelope; escolha uma e ela não vai mudar sob seus pés.
GET /v1/price e /v1/klines não usam chave e têm CORS habilitado. Até 1,000 candles por chamada, sete intervalos, paginados para trás com &end= para o tanto de histórico que um backtest precisar.
POST /v1/open executa ao preço ao vivo com margem isolada e devolve o nível de liquidação. Adicione type:"limit" ou "stop" para deixar uma ordem pendente no servidor, ou dry_run para precificar um trade sem gravar nada.
Stops, alvos, trailing stops e liquidações são liquidados do nosso lado, em candles de 1 minuto, com seu bot rodando ou não. Abra o WebSocket e o resultado chega em cerca de dois segundos - é grátis em todos os planos, e é a diferença entre um bot que reage e um que espera o próximo loop.
# price (no key)
curl "https://marginpad.io/api/bot/v1/price?symbol=SOL"
# open a 20x long with $100 margin
curl -X POST "https://marginpad.io/api/bot/v1/open" \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"symbol":"SOL","side":"long","margin_usd":100,"leverage":20}'
# check live P&L
curl "https://marginpad.io/api/bot/v1/positions" -H "X-API-Key: YOUR_KEY"
# close half, let the rest run
curl -X POST "https://marginpad.io/api/bot/v1/close" \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"id":"POSITION_ID","pct":50}'
# the whole loop, without a single poll
const { MarginPad } = require("marginpad");
const mp = new MarginPad("YOUR_KEY");
mp.stream(ev => {
if (ev.type === "snapshot") console.log("open now:", ev.data.positions.length);
if (ev.type === "position") {
const p = ev.data.position; // opened | updated | closed
console.log(ev.data.event, p.symbol, p.pnl_usd ?? p.unrealized_pnl_usd);
if (ev.data.event === "closed") decideWhatIsNext(p);
}
});
# or with nothing but a URL - any language with a WebSocket client
wscat -c "wss://marginpad.io/api/bot/v2/stream?api_key=mpb_..."
<- {"type":"welcome","data":{"channels":["positions","prices"],"tick_ms":2000}}
<- {"type":"snapshot","data":{"positions":[...]}}
<- {"type":"position","data":{"event":"closed","position":{...,"pnl_usd":-1.24}}}
Medido, e o motivo de esta aba existir: 76.4% de todas as chamadas a esta API nos últimos 40 dias foram polling de /positions ou /account - 890,921 e 471,390 chamadas - enquanto o WebSocket foi aberto 15 vezes em toda a sua vida. O stream é grátis em todos os planos de propósito - cobrá-lo empurraria todo mundo de volta ao polling, que nos custa mais que o stream. Se precisar fazer polling, devolva o ETag: uma consulta sem mudanças custa então um 304 com body vazio.
# python - the official client, zero dependencies
pip install marginpad
from marginpad import MarginPad
mp = MarginPad("YOUR_KEY")
price = mp.price("BTC")["price"]
if my_signal(price): # your strategy here
r = mp.open("BTC", "long", margin_usd=50, leverage=10,
sl=price * 0.97, trail_pct=1.5, # trailing stop, ratcheted server-side
client_order_id=f"sig-{int(time.time())}") # a retry can never open twice
print("opened", r["position"]["id"], "liq @", r["position"]["liq_price"])
changed = mp.positions(status="open") # None when nothing changed (ETag / 304)
print(mp.report()["skill"])
# node.js - the official client, zero dependencies
npm install marginpad
const { MarginPad } = require("marginpad");
const mp = new MarginPad("YOUR_KEY");
const { price } = await mp.price("ETH");
if (mySignal(price)) { // your strategy here
const { position } = await mp.open({ symbol: "ETH", side: "short", margin_usd: 50, leverage: 10,
trail_pct: 2, client_order_id: "sig-" + Date.now() });
console.log("opened", position.id, "liq @", position.liq_price);
}
mp.stream(ev => { if (ev.type === "position") console.log(ev.data.event, ev.data.position.id); });
# plain HTTP, any language
import requests
API = "https://marginpad.io/api/bot"; H = {"X-API-Key": "YOUR_KEY"}
r = requests.post(f"{API}/v2/open", headers=H, json={"symbol": "BTC", "side": "long",
"margin_usd": 50, "leverage": 10, "dry_run": True}).json() # priced, nothing written
print(r["data"]["position"]["fee_round_trip_usd"], r["data"]["position"]["liq_price"])
Autentique com X-API-Key em toda chamada, exceto /price, /klines e /time. Clientes oficiais, zero dependências - npm install marginpad ou pip install marginpad, ou um arquivo de cada: marginpad.py · marginpad.js - REST, WebSocket, polling com ETag, back-off de 429 e verificação de assinatura de webhook já embutidos.
Os livros de testnet são rasos, os preços se afastam do mercado real e eles são resetados sem aviso. Tudo aqui é precificado a partir do feed multi-corretora ao vivo em que nossos próprios gráficos rodam - só os dólares são simulados.
Dezoito campos e oito presets: o tamanho do book e se ele é um orçamento real, quanto custa atravessar o livro de ordens na entrada e na saída, quanto tempo sua ordem fica em trânsito, execuções parciais, com que frequência a plataforma recusa, sua própria taxa, funding e onde fica a liquidação. O Freqtrade deixa você definir o saldo inicial e mais nada; uma testnet dá o que o book dela der. Cada campo, com seu intervalo →
Entradas limite, entradas stop, stop-losses, alvos e trailing stops são todos avaliados do nosso lado, contra candles de 1 minuto. Seu bot pode estar offline, reiniciando ou sendo reimplantado e a execução ainda acontece no seu nível, marcada com o minuto em que o mercado realmente o atingiu.
As duas pontas pagam uma taxa taker, cobrada como round trip no fechamento, com o funding acumulado nas marcações. Indique uma corretora e a conta paper é cobrada pela tabela publicada dessa corretora menos o nosso desconto de indicação - então uma estratégia de scalping falha aqui pelo mesmo motivo que falharia lá.
Margem isolada, manutenção de 0.5%, perdas limitadas à sua margem. Um trailing stop é movido pelo extremo de cada candle depois que esse candle foi checado contra o stop em vigor - assim, um candle nunca pode te stopar num nível que ele mesmo criou.
Envie client_order_id e uma abertura repetida retorna a posição que a primeira chamada criou, marcada com idempotent: true. Fechar também aceita um. Esse único campo é a diferença entre um bot em que você confia sem supervisão e um que você precisa vigiar.
Um WebSocket grátis envia eventos de posição e marcações a cada ~2 s; os webhooks fazem POST do mesmo formato para a sua própria URL, assinados com HMAC e com novas tentativas, mesmo sem nada seu conectado. ETags tornam quase gratuitas as consultas que você mantém.
Cada book tem seu próprio diário, curva de patrimônio e drawdown. /v1/report retorna taxa de acerto e retorno por moeda, faixa de alavancagem, lado e hora, com uma nota de habilidade - e não diz nada com menos de oito trades em vez de inventar um padrão.
Vinte e quatro delas. Tudo é JSON sobre HTTPS, com CORS ativado e um único cabeçalho. Troque v1 por v2 em qualquer caminho para receber o envelope {ok,data,ts}.
&end=<unix ms> para paginar mais para trás.asset_class, max_leverage e taker_fee_pct por símbolo. Filtre com ?class=crypto|stock|forex|metal|index. Chame uma vez na inicialização em vez de descobrir os limites por tentativa e erro.drift_ms de volta. Um bot que agrupa candles com base em um relógio local que deriva monta barras que ninguém mais vê, e isso é um sofrimento para depurar de fora.bars = get(f"/api/bot/v1/klines?symbol=BTC&interval=1")
while len(all_bars) < wanted:
end_ms = bars[0]["time"] * 1000 # oldest candle in hand
bars = get(f"/api/bot/v1/klines?symbol=BTC&interval=1&end={end_ms}")
if not bars: break
all_bars = bars + all_bars
{"symbol":"BTC","side":"long","margin_usd":100,"leverage":20,"sl":58000,"tp":66000} (sl/tp opcionais). Retorna a posição, incluindo seu liq_price. Adicione "dry_run":true para receber de volta o trade precificado - entrada, quantidade, preço de liquidação e distância, a taxa de abertura e o round trip completo - sem gravar nada. Use o dry run para dimensionar uma posição ou para testar seu bot unitariamente contra o motor real.trail_pct define um stop que acompanha o melhor preço visto desde a entrada a essa distância percentual, ajustado no servidor: pelos extremos dos candles de 1 minuto na varredura por minuto e pelo preço ao vivo a cada leitura de /positions, então ele continua se movendo enquanto seu bot está offline e nunca afrouxa. Um long aberto a 60,000 com trail_pct: 1 começa com o stop em 59,400; quando o preço marca 63,000, o stop vai para 62,370. As posições trazem trail_pct e trail_hwm.{"symbol":"BTC","side":"long","type":"limit","limit_price":58000,"margin_usd":100,"leverage":20}. Ela executa ao seu preço, não ao preço em que o motor percebeu o cruzamento - a execução é encontrada a partir da máxima/mínima de 1m, então um pavio que recuou entre duas checagens ainda conta. Seu bot não precisa estar rodando. Um long limite deve ficar abaixo do mercado e um short limite acima; caso contrário você recebe limit_marketable em vez de uma execução a mercado silenciosa.{"symbol":"BTC","side":"long","type":"stop","limit_price":66000,"margin_usd":100,"leverage":10}. Mesmo motor de uma ordem limite - executa no nível a partir de candles de 1m, com o navegador fechado - mas o lado errado é recusado (stop_wrong_side) para que um stop e um limite nunca sejam confundidos. sl, tp, trail_pct, client_order_id e dry_run valem todos.{"id":"bp...","pct":50} - pct é opcional (padrão 100); fechamentos parciais dividem a posição exatamente como no site.{"id":"bot...","sl":63500,"tp":66000,"trail_pct":1.5} - envie null para limpar um, omita um campo para mantê-lo. Os níveis são checados contra o lado da entrada. Antes disso existir, era preciso fechar e reabrir para mover um stop, o que mudava sua entrada e custava uma ida e volta completa.type: "limit" | "stop", mais as últimas 20 que foram executadas, expiraram ou foram canceladas - uma executada traz o position_id que criou. As ordens valem até serem canceladas, expiram após 30 dias, e até 20 podem ficar pendentes por conta.{"order_id":"lo...","limit_price":58500,"sl":57000,"tp":62000,"margin_usd":150,"leverage":10,"trail_pct":1} - envie só o que muda. Antes disso o único jeito era cancelar e recriar, o que perdia o client_order_id da ordem. A direção é rederivada do mercado agora e a marca d'água de candles reinicia, então um nível movido nunca pode ser executado num candle impresso antes da mudança. Uma ordem executada, cancelada ou expirada responde 409.{"order_id":"lo..."}. Se já foi executada ou cancelada, volta 409, então uma nova tentativa nunca desfaz uma execução.mark_price e unrealized_pnl_usd ao vivo; liquidações atingidas e SL/TP são liquidados automaticamente. ?status=open|closed reduz o corpo ao que o seu loop realmente lê; ?since=<unix ms> e If-None-Match (304 quando nada mudou) também são aceitos.balance_usd, equity_usd, free_margin_usd e return_pct./account quando é só isso que a sua lógica de dimensionamento precisa./positions é limitado a 100 linhas; este percorre toda a janela de retenção - siga next_before até voltar null. Use para calcular estatísticas da estratégia sobre o registro completo em vez de uma ponta truncada.max_drawdown_pct e o ponto não realizado ao vivo no final.{"confirm":true}: fechamentos arquivados, ordens canceladas. Recusado com 409 open_positions_exist enquanto houver algo aberto.usage_30d - chamadas por dia por endpoint mais refused (os 429), para um bot ver o quanto está perto do limite.POST {"venue":"bybit"} define o padrão da conta; fee_venue em /open o substitui para uma posição. Veja taxas por corretora.locked[] indica o que fica retido). Toda conclusão traz o n em que se apoia e não diz nada com menos de 8 trades.POST {"act":"add","url":"https://…"} registra um, {"act":"test","id":…} envia um ping e retorna o status que seu servidor respondeu, {"act":"delete","id":…} remove.Legível por máquina: especificação OpenAPI 3.1 com schemas completos de requisição e resposta · uma referência interativa de onde você pode disparar chamadas · o changelog (JSON).
As ordens são executadas na hora ao preço real ao vivo (feed multi-corretora - os mesmos preços do nosso Paper Trade). Execuções pela API não têm slippage (as do próprio site têm), então trate os preços de entrada como levemente otimistas.
Toda posição paga uma taxa taker nos dois lados, liquidada em pnl_usd no fechamento. É cobrada como round trip: fee = qty × (entry + exit) × rate. O funding é acumulado nas posições mantidas durante as marcações de funding e deduzido do mesmo jeito. Posições abertas já mostram o PnL líquido do round trip em unrealized_pnl_usd, então o que você vê é o que será liquidado.
| A mercado | Taxa por lado | Round trip sobre $10,000 nocionais |
|---|---|---|
| Perps de cripto | 0.055% | $11.00 |
| Ações & ETFs | 0.02% | $4.00 |
| Metais & índices | 0.015% | $3.00 |
| Principais pares de forex | 0.008% | $1.60 |
Prefere a conta exata da corretora em que vai rodar? Cobre a conta paper pela tabela dela, desconto de indicação incluído. Acima de cerca de 180× de alavancagem a taxa diminui para que o round trip nunca passe de 20% da sua margem. GET /v1/markets retorna a taxa exata e o limite de alavancagem de cada símbolo. Estratégias de curto prazo vivem ou morrem por esse número - um scalp que rende menos que o round trip é perdedor, não importa quantas vezes acerte.
Margem isolada. As perdas ficam limitadas à sua margem. O preço de liquidação usa uma taxa de margem de manutenção de 0.5%; quando o preço ao vivo a cruza, a posição é liquidada automaticamente ao preço de liquidação. Ordens de stop-loss e take-profit também são executadas automaticamente - quando o preço cruza o seu sl ou tp (verificado contra os pavios dos candles de 1 minuto na varredura por minuto, então um spike que recuou ainda conta), a posição é encerrada naquele nível. Um trailing stop avança a partir do melhor preço visto: na varredura ele é movido pelo extremo de cada candle depois que esse candle foi checado contra o stop em vigor, então uma barra nunca pode derrubar você em um nível que ela mesma criou.
Toda conta paper começa com um valor nominal de $10,000. /v1/account e /v1/balance informam balance_usd, equity_usd e free_margin_usd para você expressar resultados como retorno em vez de um valor solto em dólares. Esse saldo é um placar, não uma restrição: a margem não é debitada dele e uma abertura nunca é recusada por falta de fundos (margin_enforced: false). Dimensione suas posições por conta própria se quiser que a restrição seja real.
Toda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset (segundos epoch); um 429 acrescenta Retry-After. Os limites são contados por chave, então uma segunda chave tem o próprio orçamento. X-RateLimit-Scope informa se valeu o limite da chave ou o limite por IP.
Posições abertas pela API ficam na sua conta no lado do servidor, então aparecem em My Trades, contam para as tabelas da temporada e para o XP, e alimentam seu Trading Report - o mesmo relatório que GET /v1/report devolve ao bot.
Colocá-lo atrás de um paywall empurraria todo mundo de volta ao polling, o que nos custa muito mais que o stream - então os incentivos se alinham: use o WebSocket e nós dois ganhamos. Os dados de mercado continuam sem chave e grátis para sempre; uma chave só eleva o limite.
Duas coisas neste motor são deliberadamente generosas, e é melhor citá-las do que deixar você descobrir numa conta real. Uma ordem a mercado executa ao preço ao vivo, então uma posição nova mostra 0.00 não realizado e a linha de entrada fica exatamente onde você pediu. E a margem de manutenção é fixa em 0.5%, qualquer que seja o valor da posição. Para aprender a operar, as duas são a escolha certa. Para provar uma estratégia, são otimistas, e quanto maior o tamanho, mais otimistas ficam.
Por isso são chaves liga/desliga, não suposições. Desligadas por padrão - nada do que você já construiu muda - e ligadas, o preço de execução e o preço de liquidação se comportam como um book real e uma tabela real de limites de risco os fazem se comportar.
GET /api/bot/v2/realism // your setting, the venue table and the whole tier ladder
POST /api/bot/v2/realism {"slippage": true, "margin_tiers": true, "margin_venue": "binance"}
# or per call, so one strategy can be tested both ways without touching the account
POST /api/bot/v1/open {"symbol":"BTC","side":"long","margin_usd":100,"leverage":10,
"slippage": true, "margin_tiers": true, "mmr_pct": 0.4}
A execução se move contra você pelo que custa percorrer um livro de ordens real: 0.01% nos majors, 0.05% em cripto mais fina, 0.005% em forex, 0.02% em ações, metais e índices. Uma compra paga mais caro, uma venda vende mais barato - nunca o contrário.
A margem de manutenção sobe com o valor nocional, como numa tabela de limite de risco de corretora, então uma posição grande é liquidada mais cedo - uma exigência de manutenção maior tolera menos movimento adverso antes de fechar você, que é exatamente o que uma corretora quer em posições grandes. Este é o nosso modelo publicado, não a tabela de uma corretora específica, e GET /realism retorna a escada inteira - você nunca deveria precisar fazer engenharia reversa dela a partir de um preço de liquidação.
Em qual taxa de margem de manutenção publicada de cada plataforma se basear: Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Ela muda apenas onde fica o preço de liquidação - nunca o tamanho, as taxas ou o P&L.
Esses três são apenas um subconjunto. A simulação inteira é configurável - o tamanho do book e se ele é um orçamento real, seus próprios números de slippage e taxas, impacto do tamanho, latência, execuções parciais, recusas e funding - e oito presets a configuram em uma chamada. Uma posição mantém a margem de manutenção com que foi executada, então ativar isso nunca reescreve um trade que você já tem, e cada fechamento registra com o que rodou. É daí que vem a coluna Fills da arena - uma tabela que ranqueia bots deveria dizer quais deles estavam no modo fácil.
As três chaves acima fazem parte de algo maior. Tudo o que este motor assume é um campo que você pode definir: o tamanho do book e se ele é um orçamento real, quanto custa atravessar o livro de ordens na entrada e na saída, quanto tempo sua ordem fica em trânsito, se uma ordem é executada parcialmente, com que frequência a plataforma diz não, quanto você paga de taxas, se o funding é cobrado e onde fica o preço de liquidação.
Os padrões são deliberadamente fáceis, e vale dizer isso com clareza. Uma ordem a mercado é executada inteira ao preço ao vivo, a margem de manutenção é fixa em 0.5%, o saldo é um placar que nunca recusa uma abertura, e não há latência nem impacto do tamanho. É o lugar certo para colocar um bot para rodar. É o lugar errado para julgar se ele tem vantagem. Uma chamada muda isso.
GET /api/bot/v2/sim # your profile, every field with its range, and the presets
POST /api/bot/v2/sim {"preset": "realistic"}
# or exactly your own venue
POST /api/bot/v2/sim {"start_balance_usd": 2500, "margin_enforced": true,
"slippage": true, "slippage_bps": 8, "impact_bps_per_100k": 15,
"latency_ms": 250, "taker_bps": 5.5, "margin_venue": "bybit"}
Valores fora do intervalo são recusados, nunca ajustados - uma estratégia jamais deve ser medida sob uma configuração que você não escolheu. Uma posição mantém, pelo resto da vida, a margem de manutenção, a taxa e o custo de cruzamento de saída com que foi executada; ligar qualquer coisa nunca reescreve um trade que você já tem.
O motor como sempre foi. Ponha o bot para rodar, veja os trades entrarem e só depois mude algo.
O ideal para medir um edge: o book custa o que medimos nas duas pontas, tamanho custa mais, a escada de limite de risco está ligada, o funding é cobrado e o book recusa o que não consegue bancar.
A taxa taker e a margem de manutenção publicadas por essa corretora, com o nosso custo de cruzamento medido, margem aplicada e a escada ativados.
Um perp de média capitalização em um horário ruim, e depois algo pior do que qualquer coisa que você vai encontrar: 60 bps para atravessar, 120 bps por $100k de tamanho, execuções a partir de um quarto, uma abertura em cada vinte recusada, um segundo de latência. Números nossos, não de nenhuma plataforma. Se uma estratégia ainda funciona aqui, ela não vive de sorte na execução.
| Campo | Intervalo | O que faz |
|---|---|---|
| O book — quanto o bot pode arriscar | ||
start_balance_usd | 100 – 10,000,000 | O book contra o qual seus resultados são medidos: return_pct, a curva de patrimônio e o drawdown máximo seguem ele. Teste com o tamanho de conta que você realmente vai operar. |
margin_enforced | off / on | A maior diferença entre um placar e uma corretora. Ligado, uma abertura que precisa de mais do que a sua margem livre é recusada com 402 insufficient_margin. A margem livre é o saldo menos a margem comprometida — o lucro não realizado de uma posição aberta não serve de garantia para uma nova, porque toda posição aqui é de margem isolada. |
leverage_max | 0 – 10,000 | Seu próprio teto abaixo do limite de cada mercado. Prova que uma estratégia nunca derivou em silêncio para 100×. 0 = o limite do mercado. |
max_notional_usd | 0 – 1,000,000,000 | Seu próprio teto para o valor nocional de uma posição. 0 = nenhum teto seu. |
| A execução — quanto custa atravessar o livro | ||
slippage | off / on | Execute contra si mesmo como percorrer um livro real: 0.01% nos majors cripto, 0.05% em cripto mais fina, 0.005% em forex, 0.02% em ações, metais e índices. Uma compra paga mais caro, uma venda vende mais barato. |
slippage_bps | 0 – 500 | Seu próprio valor no lugar dessa tabela. 10 = 0.10%. null volta para a tabela. |
impact_bps_per_100k | 0 – 500 | Tamanho custa mais, porque uma ordem maior percorre mais fundo o livro: este tanto de pontos-base a mais por $100,000 de valor nocional. |
exit_slippage | ligado / desligado | Pague o custo de cruzamento também na saída, não só na entrada. Sem isso, uma estratégia de scalping parece melhor do que jamais consegue operar. Um stop, take-profit ou liquidação ainda executa no próprio nível — veja os limites abaixo. |
latency_ms | 0 – 2,000 | Sua ordem fica em trânsito por esse tempo, e o preço é relido depois — então a execução é o mercado como estava quando sua ordem chegou, não quando você a enviou. |
partial_fills | off / on | Uma ordem a mercado pode ser executada com menos do que pediu. O tamanho executado é position.margin_usd; a proporção está no header X-MP-Fill-Pct e no objeto fill da v2. |
min_fill_pct | 10 – 100 | A pior proporção que você pode receber. 40 significa algo entre 40% e 100% do que você pediu. |
reject_rate_pct | 0 – 50 | Esta parcela das aberturas é recusada com 503 venue_rejected de propósito. Um bot que não sabe lidar com uma recusa não está pronto, e este é o lugar barato para descobrir isso. |
| O custo | ||
taker_bps | 0 – 100 | Sua própria taxa por lado em vez da tabela de uma corretora. 5.5 = 0.055%. A redução por alavancagem continua valendo, então nenhuma configuração faz uma ida e volta comer o valor todo. |
funding | ligado / desligado | Desligado, o funding nunca é cobrado. É assim que você distingue um edge de execução de um edge de carry — um short mantido durante funding positivo pode ser lucrativo só por causa do funding. |
funding_mult | 0 – 5 | Escala a taxa real de 8 horas. |
| A liquidação | ||
margin_venue | 10 corretoras | De quem é a taxa de margem de manutenção publicada que decide onde fica a liquidação. Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Ela move só o preço de liquidação. |
margin_tiers | off / on | A margem de manutenção sobe com o valor nocional como uma escada de limite de risco, então uma posição grande é liquidada mais cedo. A escada inteira está publicada em GET /v2/realism. |
mmr_pct | 0.05 – 10 | Sua própria margem de manutenção, prevalecendo sobre margin_venue e o nosso padrão. |
Um stop-loss, take-profit ou liquidação executa no próprio nível e nunca paga o custo de cruzamento: a varredura do lado do servidor roda sobre todas as contas de uma vez e não consegue ler um perfil por passada. Não há livro de ordens com profundidade real por trás do modelo de impacto — impact_bps_per_100k é um custo linear declarado, não um livro simulado. E todo o custo de cruzamento da saída é cobrado contra o preço de marcação, que é um spread só, não um bid e um ask que você possa cotar separadamente. Todo o resto acima é aplicado exatamente como escrito.
Cada valor deste perfil pode ser lido de volta em GET /api/bot/v2/sim, incluindo como seria uma execução agora mesmo — um número que o bot não consegue ler de volta é um número que ele precisa adivinhar. GET /api/bot/v2/report então mostra quanto a execução realmente custou: taxas, funding, bruto contra líquido e kept_pct, a parcela do bruto que sobreviveu. Esse é grátis em todos os planos, porque não é um detalhamento de onde está o seu edge — é se o edge é real.
Por padrão, toda execução paper paga a taxa da MarginPad: 0.055% por lado em cripto, as duas pontas, cobrada como round trip no fechamento. É uma média justa, mas não é a conta exata de ninguém. Se você já sabe onde o bot vai rodar de verdade, cobre a conta paper pela tabela dessa corretora - a taxa taker publicada, menos o desconto de indicação que um cadastro pela MarginPad recebe lá - para que o forward test se liquide como a conta real vai se liquidar:
GET /api/bot/v2/fees // the table below + your current default
POST /api/bot/v2/fees {"venue":"hyperliquid"} // account default: every open from now on, site and API
POST /api/bot/v2/open {"symbol":"BTC","side":"long","margin_usd":100,"leverage":10,"fee_venue":"bybit"} // just this one
POST /api/bot/v2/open {..., "dry_run":true} // -> fee_venue, taker_fee_pct, fee_vs_marginpad_default_usd
| Corretora | Taker | Nosso desconto de indicação | Você paga por lado |
|---|---|---|---|
| Bybit | 0.055% | 20% | 0.044% |
| Binance | 0.050% | 20% | 0.040% |
| Bitget | 0.060% | 20% | 0.048% |
| Gate | 0.050% | 20% | 0.040% |
| Hyperliquid | 0.045% | 4% (código MARGINPAD) | 0.0432% |
| OKX · Kraken | 0.050% | - | 0.050% |
| MEXC | 0.020% | - | 0.020% |
| KuCoin | 0.060% | - | 0.060% |
| Padrão MarginPad | nenhuma plataforma escolhida | 0.055% | |
As taxas são o nível base publicado das corretoras e os descontos que informamos em /exchanges/; a API as retorna com source para você saber que são números divulgados, não medições. As duas pontas pagam a taxa taker (o motor paper executa a mercado; um rebate maker numa entrada pendente não é modelado). Só perps cripto - ações, forex, metais e índices mantêm as taxas por classe da MarginPad, qualquer que seja a corretora. Posições abertas mantêm a taxa com que foram executadas; o teto de alavancagem extrema (um round trip nunca acima de 20% da margem) continua valendo. A mesma escolha é o seletor "Taxas como na" no formulário do Paper Trade, então um bot e os trades manuais do dono dele pagam taxas idênticas.
Sempre envie client_order_id ao abrir. Esta é a linha mais importante destes docs. Sem ele, uma requisição que expira na rede deixa você no escuro: a posição abriu ou não? Tente de novo e você pode ter duas. Com ele, a nova tentativa devolve a posição que a primeira chamada criou, marcada com idempotent: true:
POST /api/bot/v2/open
{"symbol":"BTC","side":"long","margin_usd":100,"leverage":5,"client_order_id":"sig-2026-08-19-1403"}
// first call -> {"ok":true,"data":{"position":{"id":"bot...", ...}}}
// same call retried -> {"ok":true,"data":{"position":{"id":"bot...", ...},"idempotent":true}}
Use um valor que a sua estratégia consiga gerar de forma determinística - um id de sinal, ou símbolo mais timestamp do candle. Os ids são lembrados por 7 dias.
Fechar também aceita uma. Envie client_order_id em /close e uma nova tentativa informa o que a primeira chamada fez (idempotent: true) em vez de um erro que você precisa interpretar.
Envie o symbol ao fechar. Toda linha de /positions já o traz, então é de graça adicionar e isso encurta o fechamento de forma mensurável:
POST /api/bot/v2/close
{"id":"bot...","symbol":"BTC"} // one price fetch, one round trip
{"id":"bot..."} // server must first look up which symbol to price
Nosso trading store é uma única instância fixada em uma região, então cada salto extra custa o que custa a ida e volta até ela de onde você está. Medido em 2026-08-19: cerca de 20 ms a partir da Europa, mas 198 ms de mediana e 368 ms no percentil 95 a partir de Singapura. Um feed de preços frio soma cerca de 400 ms por cima, e sem a dica um fechamento em um par líquido poderia acabar esperando por um ilíquido no mesmo lote. Com a dica, um fechamento é um salto mais um preço já aquecido. Um symbol errado ou desatualizado não custa nada - o servidor percebe e volta ao caminho normal.
Não gaste seu orçamento de requisições com polling. A maioria dos bots gasta a maior parte das chamadas perguntando "algo mudou?". Duas coisas tornam isso quase gratuito:
# 1. state changes: send back the ETag, get 304 and an empty body when nothing moved
curl -H "X-API-Key: $KEY" -H 'If-None-Match: W/"1a2b3c-4"' \
https://marginpad.io/api/bot/v1/positions
# 2. live prices: /price is KEYLESS, so it costs nothing against your 120/min
curl https://marginpad.io/api/bot/v1/price?symbol=BTC
O ETag cobre o estado estrutural - ids de posição, status, quantidade, stop, alvo, saída - e deliberadamente não o preço de marcação, que muda a cada tick e faria o ETag nunca bater. Então: consulte /positions para saber "meu stop disparou?" e consulte o /price sem chave para o PnL. Fique de olho em X-RateLimit-Remaining e reduza o ritmo conforme Retry-After.
Posições e preços são enviados a você, então você descobre que seu stop disparou em poucos segundos, em vez de na próxima consulta:
wss://marginpad.io/api/bot/v2/stream?api_key=mpb_…
<- {"type":"welcome","data":{"channels":["positions","prices"],"tick_ms":2000},"ts":…}
<- {"type":"snapshot","data":{"positions":[…]},"ts":…}
<- {"type":"position","data":{"event":"closed","position":{…,"pnl_usd":-1.24}},"ts":…}
<- {"type":"prices","data":{"BTC":64770.1},"ts":…}
-> {"op":"subscribe","channels":["positions"]} // prices off, events only
-> {"op":"ping"} // <- {"type":"pong"}
Eventos: position com event: opened | updated | closed dispara quando algo realmente muda - uma execução, um stop se movendo, um fechamento, uma liquidação. prices traz o preço de marcação dos seus símbolos abertos a cada tick. O movimento do preço de marcação sozinho nunca gera um evento position, então o canal fica quieto quando nada aconteceu.
Os stops são liquidados mais rápido enquanto você está conectado. O stream aciona a mesma varredura de SL/TP/liquidação do lado do servidor que o caminho REST usa, na cadência de ~2s, em vez de deixar sua posição para a varredura periódica.
Até 3 sockets simultâneos por conta, compartilhados entre suas chaves. Os sockets são reciclados após 6 horas - reconecte e você recebe um snapshot novo. Se a conexão cair, trate o próximo snapshot como a verdade em vez de reprocessar eventos perdidos.
Medido nos últimos 40 dias: 76.4% de todas as chamadas a esta API são polling de /positions e /account atrás de eventos que ainda não aconteceram. Um webhook inverte isso - nós fazemos POST para você quando algo realmente acontece, com o mesmo formato Position que um polling teria retornado, e funciona enquanto seu bot está offline, reiniciando ou implantado num lugar que não consegue manter um socket.
POST /api/bot/v2/webhooks
{"act":"add","url":"https://bot.example.com/marginpad","events":["position.closed","position.liquidated","order.filled"]}
-> {"ok":true,"data":{"webhook":{"id":"wh…","secret":"whs_…","events":[…],"active":true}}}
# what arrives at your URL, seconds after the event:
POST https://bot.example.com/marginpad
X-MP-Event: position.closed X-MP-Delivery: 1841
X-MP-Timestamp: 1789124656008 X-MP-Signature: sha256=3763dc5d…
{"event":"position.closed","ts":1789124656008,"hook_id":"wh…","data":{"id":"bot…","symbol":"BTC","status":"closed","pnl_usd":-0.08,"close_reason":"SL hit",…}}
Eventos: position.opened · position.updated (um stop ou alvo mudou) · position.closed · position.liquidated · order.filled (traz a posição que criou) · order.expired · order.cancelled. Omita events para receber todos. Trades feitos pelo site na mesma conta também os disparam.
Verifique cada entrega. X-MP-Signature é sha256=HMAC_SHA256(secret, raw body) com o secret retornado quando você adicionou o hook. Compare antes de interpretar o body; os dois SDKs trazem verify_webhook / verifyWebhook. Responda 2xx em até 6 segundos - qualquer outra coisa é tentada de novo 5 vezes com backoff (30 s, 1, 2, 4 min), e um hook é pausado após 25 falhas consecutivas; GET /webhooks mostra active, consecutive_failures e last_error para você ver o motivo. Três hooks por conta no Pro, quinze no Max, cinquenta no Business; as entregas são best-effort, o snapshot do WebSocket e /positions continuam sendo a fonte da verdade.
Teste antes de escrever um receptor: registre https://marginpad.io/api/whsink/<any-token-you-choose> como URL e depois abra um GET nesse mesmo endereço - ele devolve as últimas 20 entregas (headers e body) por 15 minutos. Sem autenticação; o token é o segredo.
Um book é um diário, saldo, relatório e curva de patrimônio separados dentro da sua conta. Crie uma chave com o nome de um book e toda chamada feita com essa chave opera nesse book; sua conta principal e seus outros books nunca o veem. Contas Free recebem um book além da conta principal, API Pro cinco, Max vinte e Business cinquenta.
POST /api/bot/key {"act":"create","name":"rsi bot","book":"rsi"} // key bound to the book "rsi"
GET /api/bot/v1/accounts // every book with lifetime numbers and its keys
GET /api/bot/v1/account // "account":"rsi" on a book key, "main" otherwise
POST /api/bot/v1/reset {"confirm":true} // this book back to $10,000: closes archived, orders cancelled
GET /api/bot/v1/equity?days=30&step_min=60 // equity curve + max_drawdown_pct
O reset é recusado com 409 open_positions_exist enquanto algo estiver aberto: feche primeiro e depois faça o reset. Os trades arquivados são mantidos (nunca apagados), mas o relatório, o ledger, o /trades e a curva de capital começam a partir do reset, e um navegador que ainda guarde o diário antigo não consegue enviá-lo de volta. Os webhooks disparam nos hooks da conta com "account":"rsi" no payload, então um único receptor atende todos os books.
Faça o backtest com o código que você vai rodar ao vivo. Inicie um replay de um dia UTC passado e as mesmas rotas que seu bot já chama passam a atuar em um diário de replay separado, com preços vindos dos próprios candles de 1 minuto da MarginPad no cursor. Stops, alvos e liquidações são verificados em cada candle entre duas das suas chamadas, na máxima e na mínima, com a mesma conta de taxas e funding do ao vivo. Nada de um replay chega aos rankings, à arena ou ao seu relatório.
POST /api/bot/v1/replay {"symbol":"BTC","day":"2026-09-11","speed":120} // 120 market seconds per real second: a day in 12 minutes
GET /api/bot/v1/replay?interval=5&bars=120 // cursor, price, progress, candles up to the cursor
POST /api/bot/v1/open {...} // acts on the replay book at the cursor price while the replay runs
POST /api/bot/v1/replay {"act":"stop"} // close at the cursor, get the summary, empty the replay journal
A velocidade vai de 1 (tempo real) a 600 (um dia em 2.4 minutos). Um replay por chave por vez, só cripto, só ordens a mercado por enquanto: leia o preço e os candles do replay em GET /v1/replay, já que /v1/price e /v1/klines, sem chave, continuam respondendo dados ao vivo.
Você pode ter várias chaves numa só conta - mantenha um bot de backtest e um bot ao vivo separados e revogue um sem tocar no outro. O uso e os limites de requisição são contados por chave, então cada uma tem seu próprio orçamento e sua própria linha nas suas estatísticas. Logado no site, pelo navegador:
POST /api/bot/key {"act":"list"} // all your keys
POST /api/bot/key {"act":"create","name":"backtest-bot"} // new key
POST /api/bot/key {"act":"rename","key":"mpb_...","name":"live-bot"}
POST /api/bot/key {"act":"revoke","key":"mpb_..."} // usage history is kept
Uma chave revogada retorna 401 revoked_key. Chaves são segredos - quem tiver uma pode operar sua conta paper. Crie e revogue no topo desta página.
Toda conta ou book com pelo menos cinco fechamentos abertos pela API nesta temporada de 14 dias entra no ranking de /arena/ por PnL realizado líquido de taxas e funding, com taxa de acerto, retorno sobre o placar de $10,000, ROE médio e liquidações. Sem prêmios e sem nada para se inscrever: opere pela API e a tabela encontra você. JSON: GET /api/arena.
A MarginPad mantém um servidor MCP remoto, então um assistente de IA pode ler os mercados e operar sua conta de paper trading diretamente - sem código de ligação:
https://marginpad.io/mcp
Adicione como servidor MCP remoto no seu cliente e defina o header X-API-Key: mpb_… se quiser as ferramentas de paper trading. As ferramentas de dados de mercado não precisam de chave. Vinte e oito ferramentas estão expostas: preços, candles, mercados, screener, funding, interesse aberto, liquidações, medo e ganância, o calendário econômico, duas calculadoras, e paper open (com trailing stops e dry run) / ordens limite e stop / modify / cancel / close / sltp / positions / orders / balance / trades / report / fees / accounts / reset / equity / replay. GET /mcp no navegador retorna o descritor do servidor.
/api/bot/v1/* está congelada. Os corpos de resposta não vão mudar; bots escritos para ela continuam funcionando indefinidamente, e ela ainda recebe correções de bugs.
/api/bot/v2/* é a mesma API com o envelope que nossos endpoints de dados já usam - um formato previsível para sucesso e falha, para você escrever o parsing uma vez só:
{ "ok": true, "data": { ... }, "ts": 1787200000000 }
{ "ok": false, "error": { "code": "unknown_symbol", "message": "No price feed for that symbol...", "symbol": "FOO" }, "ts": 1787200000000 }
Mesmos caminhos, mesmos parâmetros, mesma chave - troque v1 por v2 na URL. Os valores de code dos erros são identificadores estáveis; message é para humanos e pode ser reescrita.
Na /v2, as falhas são sempre {"ok":false,"error":{"code","message"},"ts"}. O code é um identificador estável em que você pode se basear; a message é texto livre e pode ser reescrita. Alguns erros trazem o valor de que você precisa para corrigir a chamada - sl_wrong_side e tp_wrong_side incluem o preço ao vivo.
| Código | HTTP | O que fazer |
|---|---|---|
missing_api_key / invalid_api_key | 401 | Envie uma chave válida em X-API-Key. |
revoked_key | 401 | Crie uma nova chave; esta foi revogada. |
rate_limit | 429 | Aguarde até Retry-After. Não repita a requisição na hora. |
unknown_symbol | 404 | Consulte /v1/markets. |
symbol_required, margin_usd_min_1, margin_usd_max_100000, id_required | 400 | Corrija o corpo da requisição. |
sl_wrong_side / tp_wrong_side | 400 | A resposta traz live - coloque o nível do lado correto dele. |
stop_wrong_side | 400 | Uma entrada stop espera do lado do rompimento (long acima, short abaixo). Use type:"limit" para uma entrada em pullback. |
trail_pct_invalid | 400 | trail_pct é um percentual entre 0.05 e 50; é recusado, nunca ajustado em silêncio. |
nothing_to_modify | 400 | /modify_order precisa de pelo menos um campo. |
plan_required | 402 | Webhooks exigem um plano pago. Todo o resto desta página está no Free. O body traz plan_needed. |
premium_required | 402 | Código legado de plan_required, ainda enviado para que um bot 2.3 o reconheça. |
too_many_webhooks | 409 | Exclua um antes - três hooks no Pro, quinze no Max, cinquenta no Business. |
bad_url / bad_event | 400 | As URLs de webhook são https em host público; os nomes dos eventos estão listados em GET /webhooks. |
too_many_open | 409 | Você está no teto de posições abertas do seu plano. Feche alguma. |
already_closed | 400 | Inofensivo em uma nova tentativa - a posição já está encerrada. |
no_price | 400 | Sem preço ao vivo neste instante; a posição continua aberta. Tente de novo. |
unavailable | 503 | Transitório. Tente de novo com backoff. |
Ainda travado? O corpo do erro é o primeiro lugar para olhar, e o status é o segundo. Se nenhum dos dois responder, escreva para support@marginpad.io com o endpoint e o corpo exato que devolvemos - o que mais incluir está na página de suporte. Uma pessoa lê.
Liquidações em tempo real agregadas de oito corretoras pelo nosso próprio coletor - os dados por trás do nosso feed Rekt e do mapa de calor de liquidações, expostos como JSON grátis. Dados comparáveis normalmente ficam atrás de paywall a $300+/mês em outros lugares; aqui não precisam de nenhuma chave de API. Com cache na borda e limite de requisições, aguentam bem bots que fazem polling.
{events:[{ts, exchange, symbol, side, price, qty, notional}]}. Os eventos chegam aqui segundos depois de acontecerem (cache de edge de 3s). Consulte a cada 3-5s.side é long_liquidated ou short_liquidated, notional é o tamanho em USD.minutes: até 43200 (30 dias).{clusters:[{price, side, est_notional}]}. Atualiza continuamente a partir do fluxo de ordens ao vivo.Atribuição é bem-vinda (link marginpad.io), mas não obrigatória. A cobertura é de ~70%+ do fluxo de liquidações do mercado - as corretoras que movem o preço. Uso educacional; sem SLA de uptime. Só quer dados de mercado? Toda a superfície sem chave está documentada na página da API grátis de dados cripto.
A maioria dos bots de trading cripto que parecem lucrativos num backtest perde dinheiro na primeira semana em que vai para o ao vivo. Backtests reproduzem candles históricos limpos - eles não pegam uma race condition na lógica das suas ordens, um bug de dimensionamento de posição que só aparece depois de uma sequência de perdas, ou uma alavancagem que cresce em silêncio além do que sua margem aguenta. O forward testing roda o mesmo bot, o mesmo caminho de código, contra preços reais ao vivo em tempo real. Se a estratégia tem uma falha, ela aparece aqui, onde um bug não custa nada.
| Backtesting | Paper trading (esta API) | Trading ao vivo | |
|---|---|---|---|
| Preços | Candles históricos | Preços reais ao vivo, em tempo real | Preços reais ao vivo |
| Risco | Nenhum | Nenhum - dólares simulados | Dinheiro real em jogo |
| Pega bugs de lógica | Raramente - dados reproduzidos os escondem | Sim - mesmo caminho de código do ao vivo | Sim, mas cada bug custa dinheiro |
| Checagem de overfitting | Não - você ajustou nesses dados | Sim - dados futuros inéditos | Sim |
| Custo | Grátis | Uso grátis - taxas & funding simulados | Taxas + perdas + funding |
| Ideal para | Filtrando ideias rápido | Comprovando o bot antes de colocar dinheiro nele | Uma estratégia já provada duas vezes |
A etapa do meio é a que a maioria das pessoas pula - e a que as teria salvado. Faça o backtest de uma ideia aqui, teste-a em tempo real nesta API e só depois deposite em uma conta.
Tudo nesta página é liquidado em dólares simulados. Depois que o bot sobreviver a semanas de forward testing, o mesmo código precisa de uma API de corretora para colocar ordens reais. Duas corretoras para as quais indicamos quem cria bots, por motivos diferentes:
Perps na própria chain, com API REST e WebSocket pública, subcontas que recebem cada uma sua própria carteira de API (o bot nunca guarda sua chave principal), funding por hora e um livro que qualquer um pode auditar on-chain. A coisa mais próxima de rodar esta API com dinheiro de verdade.
Formatos REST e WebSocket parecidos com o que você acabou de escrever, uma chave separada por subconta e um dos feeds de onde vêm os nossos preços. O padrão quando você quer um livro centralizado com entrada em moeda fiduciária.
Abrir uma conta na Bybit →Sim - a MarginPad expõe liquidações em tempo real agregadas de 8 corretoras em JSON grátis, sem precisar de chave: /api/v1/feed, /api/v1/liquidations/live, /api/v1/liquidations/recent e /api/v1/clusters. Feeds comparáveis costumam custar $300+/mês. Veja a seção de dados de liquidação.
Sim. É um simulador de paper trading - as posições usam preços reais de mercado ao vivo, mas nenhum dinheiro real. Entre com um e-mail, gere uma chave de API e comece a testar na hora. Os planos pagos só elevam os limites.
Qualquer linguagem que consiga fazer uma requisição HTTPS - Python, JavaScript/Node.js, Go, Rust, PHP ou curl puro. REST padrão, respostas JSON, um único header X-API-Key.
Qualquer par USDT com preço ao vivo nas principais corretoras - BTC, ETH, SOL e centenas de altcoins, além de ações dos EUA, principais pares de forex, metais e índices como perps. Consulte um símbolo com GET /api/bot/v1/price?symbol=SOL.
Não. Sem depósito, sem carteira, sem KYC. Você só entra com um e-mail para que sua chave de API e suas posições persistam entre as sessões.
Não. A Bot API tem seus próprios planos e uma assinatura Premium não altera nenhum limite da API. O Premium libera recursos no site; os planos da API liberam limites da API. São comprados separadamente.
Monte um bot funcional em Python e aponte para esta API - código completo: feed de preços, estratégia de cruzamento de EMAs, ordens de abrir/fechar e o loop.
O mesmo bot em JavaScript - código Node.js completo, sem dependências, apontado para esta API.
O fluxo de três etapas que separa bots que funcionam de contas estouradas: backtest, paper trade e depois o ao vivo.
Como os grid bots funcionam, onde ganham e onde estouram, e como testar um em tempo real antes de colocar dinheiro nele.
O que cada etapa de teste comprova e a ordem exata para usá-las.
As estratégias assistidas por IA que realmente se sustentam - e como testá-las sem risco antes de automatizar.