Eine Paper-Trading-Futures-API auf echten Live-Preisen. Dein Bot eröffnet gehebelte Positionen, platziert Limit- und Stop-Orders, zieht seine Stops nach und wird liquidiert - abgewickelt auf unseren Servern, in simulierten Dollar. Derselbe Code, den du später echt ausführst, ohne die Konsequenzen.
Keine Karte, kein KYC, keine Einzahlung. Jede Ausführungsbedingung legst du selbst fest - Book-Größe, Slippage, Latenz, Teilausführungen, Ablehnungen, Gebühren. Für immer kostenlos bei 120 Anfragen pro Minute - Pro kostet $27, wenn aus einem Bot vier werden. Marktdaten bleiben in jedem Plan keylos.
# 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 } }
Melde dich mit einer E-Mail an - kein Passwort, kein KYC. Die Positionen deines Bots bleiben auf deinem Konto erhalten, und ein Konto kann mehrere Keys halten, damit sich ein Backtest-Bot und ein Live-Bot nie ein Rate-Budget teilen.
| Name | Book | Key | Aufrufe | Zuletzt genutzt |
|---|
Deine Keys, ihre Nutzung und das Book, das jeder handelt, erscheinen hier, sobald du angemeldet bist. Keys sind Geheimnisse - wer einen hält, kann dein Paper-Konto handeln.
Jedes Konto startet auf Free und bekommt das komplette Produkt: die Trading-Engine, echte Börsengebühren, Limit- und Stop-Entries, Trailing Stops, Replay, Books, den WebSocket-Stream und alle keyless Marktdaten. Die bezahlten Pläne heben die Limits an und bringen Webhooks, Report-Aufschlüsselungen mit geschriebenen Findings, 90 Tage Trade-Historie statt 30 sowie mehr Keys und Books. Die Engine selbst wird nie gedrosselt.
Die komplette Engine, kostenlos für 7 Tage ab dem Tag, an dem du deinen ersten Key erstellst. Danach braucht die Engine einen Plan - Marktdaten bleiben für immer kostenlos und keyless, ganz ohne Konto.
Für einen Bot, der unbeaufsichtigt läuft, und um Strategien zu vergleichen, statt zwischen ihnen zu raten.
Für eine Flotte - eine Familie von Strategien, jede mit eigenem Book, die gleichzeitig laufen.
Für eine App oder einen Desk, der im Namen seiner eigenen Nutzer handelt - je ein Key, je ein Book.
Über 125 Konten und 174 Keys erreicht der aktivste Bot in Produktion Spitzen von 66 Requests pro Minute von den 120, die Free bereits erlaubt, und kein Key wurde je auf irgendeinem Plan ratenbegrenzt. Das einzige Free-Limit, das tatsächlich erreicht wird, sind die Keys: 12 dieser 125 Konten liegen bei oder über dem Limit von drei Keys, weil ein ernsthaftes Setup einen Key pro Bot will, damit sich ein Backtest und eine Live-Strategie nie ein Rate-Budget teilen. Webhooks und zusätzliche Books gehören zu den bezahlten Plänen und wurden bisher gar nicht genutzt - das sagen wir lieber, als dir dafür eine Stufe zu verkaufen. Alles, was entscheidet, ob ein Ergebnis echt ist - die Engine, jeder Markt, Limit- und Stop-Orders, Replay, der WebSocket-Stream, die ganze konfigurierbare Simulation und die Kostenaufschlüsselung in deinem Report - ist auf Free.
| Was sich mit dem Plan ändert | Free | Pro · $27 | Max · $69 | Business · $139 |
|---|---|---|---|---|
Marktdaten-API (/api/v1/*) mit deinem Key60 / Min pro IP ohne Key, auf jedem Plan | 120 / min | 600 / Min | 2000 / Min | 5000 / min |
| API-Keys pro Account | 3 | 10 | 30 | 100 |
| Gleichzeitig offene Positionen | 50 | 200 | 500 | 1000 |
| Books - ein eigenes Journal, Guthaben und Report pro Strategie das Limit, das die meisten tatsächlich erreichen | 1 | 5 | 20 | 50 |
| Webhooks - signiert, mit Wiederholung, zugestellt, während du offline bist | keine | 3 | 15 | 50 |
| Trade-Historie gespeichert was /v1/trades, der Report und die Equity-Kurve noch sehen können | 30 Tage | 90 Tage | 90 Tage | 90 Tage |
| Requests pro Minute, pro Key gemessen: der aktivste Produktions-Bot nutzt 46, und nie wurde etwas begrenzt | 120 | 600 | 2000 | 5000 |
Trading-Report /v1/report | Summen + Skill-Score bis zu 30 Tage zurück | + Aufschlüsselungen & Erkenntnisse bis zu 90 Tage zurück | + Aufschlüsselungen & Findings | + Aufschlüsselungen & Findings |
Auf jedem Plan, auch Free: die gesamte Trading-Engine - Market-, Limit- und Stop-Orders, Trailing Stops, Teil-Closes, Dry Run und Replay - der WebSocket-Stream, der MCP-Server, der Gebührenplan von 9 echten Börsen, $1 bis $100,000 Margin pro Trade bei bis zu 1000× Hebel und jeder keyless Marktdaten-Endpoint in voller Geschwindigkeit. Die bezahlten Pläne verschieben Limits. Sie schalten das Produkt nicht frei.
Premium ist ein anderes Produkt. Ein MarginPad Premium-Abo schaltet Funktionen auf der Website frei - die exklusiven Chart-Indikatoren, die Liquidations-Heatmap, Ask AI auf Charts - und ändert seit dem 15. September 2026 kein einziges API-Limit. Diese Pläne schalten diese Website-Funktionen ebenfalls nicht frei. Kauf, was du wirklich nutzt.
Pläne laufen monatsweise, bezahlt in Krypto oder direkt aus deinem MarginPad-Belohnungsguthaben, und ein früh gekaufter Monat wird zum laufenden addiert, statt ihn zu ersetzen. Deine aktuellen Limits stehen immer in GET /api/bot/v1/usage - limits, features, plan_until - damit ein Bot sie lesen kann, statt zu raten.
Was du kaufst, schriftlich. Abschnitt 9 der Bedingungen regelt die API für sich: was ein Plan enthält und was an dem Tag passiert, an dem er endet, dass sich nichts automatisch verlängert und nichts zu kündigen ist, was wir bei der Verfügbarkeit zusagen und was nicht (es gibt kein SLA - das sagen wir, und wir sagen, was wir stattdessen zusagen), dreißig Tage Vorankündigung vor jeder Breaking Change und dass du auf dieser API kommerzielle Produkte bauen und verkaufen darfst, ohne uns zu fragen.
Dein Bot wird informiert, bevor der Plan ausläuft, nicht danach. Jede Antwort mit Key trägt X-MP-Plan, und in den letzten vierzehn Tagen zusätzlich X-MP-Plan-Expires und X-MP-Plan-Days-Left. Logge sie, und ein unbeaufsichtigter Bot kann dich selbst warnen; derselbe Countdown steht auf dieser Seite und in /v1/usage. Ein ablaufender Plan setzt den Key auf Free zurück - er hört nie auf zu antworten.
Der erste braucht gar keinen Key - füge ihn in ein Terminal ein, bevor du irgendetwas entscheidest. Jeder Pfad unten existiert in einem eingefrorenen v1 und einem v2 mit Envelope; wähle einen, und er verschiebt sich nicht unter dir.
GET /v1/price und /v1/klines sind keylos und CORS-fähig. Bis zu 1,000 Kerzen pro Aufruf, sieben Intervalle, rückwärts mit &end= geblättert, für so viel Historie, wie ein Backtest braucht.
POST /v1/open füllt zum Live-Preis mit Isolated Margin und gibt dir das Liquidationslevel zurück. Füge type:"limit" oder "stop" hinzu, um eine Order serverseitig offen zu halten, oder dry_run, um einen Trade zu bepreisen, ohne etwas zu schreiben.
Stops, Ziele, Trailing Stops und Liquidationen werden bei uns abgewickelt, auf 1-Minuten-Kerzen, egal ob dein Bot läuft. Öffne den WebSocket, und das Ergebnis kommt nach etwa zwei Sekunden an - er ist in jedem Plan kostenlos und der Unterschied zwischen einem Bot, der reagiert, und einem, der auf seinen nächsten Loop wartet.
# 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}}}
Gemessen, und der Grund, warum es diesen Tab gibt: 76.4% aller Aufrufe an diese API in den letzten 40 Tagen waren ein Poll von /positions oder /account - 890,921 und 471,390 Aufrufe - während der WebSocket in seiner ganzen Lebenszeit 15 Mal geöffnet wurde. Der Stream ist absichtlich in jedem Plan kostenlos - ihn zu sperren würde alle zurück ins Polling treiben, und das kostet uns mehr als der Stream. Wenn du pollen musst, sende den ETag zurück: Ein unveränderter Poll kostet dann ein 304 mit leerem Body.
# 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"])
Authentifiziere dich bei jedem Aufruf mit X-API-Key, außer bei /price, /klines und /time. Offizielle Clients, ohne Abhängigkeiten - npm install marginpad oder pip install marginpad, oder je eine Datei: marginpad.py · marginpad.js - REST, WebSocket, ETag-Polling, 429-Back-off und Webhook-Signaturprüfung sind eingebaut.
Testnet-Bücher sind dünn, ihre Preise weichen vom echten Markt ab, und sie werden ohne Vorwarnung zurückgesetzt. Hier wird alles aus dem Live-Multi-Börsen-Feed bepreist, auf dem auch unsere eigenen Charts laufen - nur die Dollar sind simuliert.
Achtzehn Felder und acht Presets: Größe des Buchs und ob es ein echtes Budget ist, was das Durchqueren des Orderbuchs beim Einstieg und Ausstieg kostet, wie lange deine Order unterwegs ist, Teilausführungen, wie oft die Börse ablehnt, deine eigene Gebühr, Funding und wo die Liquidation liegt. Freqtrade lässt dich das Startguthaben setzen und sonst nichts; ein Testnet gibt dir, was sein Buch hergibt. Jedes Feld mit Bereich →
Limit-Entries, Stop-Entries, Stop-Losses, Targets und Trailing Stops werden alle auf unserer Seite gegen 1-Minuten-Kerzen ausgewertet. Dein Bot kann offline sein, neu starten oder neu deployt werden, und die Ausführung landet trotzdem auf deinem Niveau, gestempelt mit der Minute, in der der Markt es tatsächlich erreicht hat.
Beide Seiten zahlen eine Taker-Gebühr, die beim Close als Round Trip berechnet wird, mit über die Marks aufgelaufenem Funding. Nenne eine Börse, und das Paper-Konto wird nach dem veröffentlichten Gebührenplan dieser Börse abzüglich unseres Referral-Rabatts belastet - eine Scalping-Strategie scheitert hier also aus demselben Grund, aus dem sie dort scheitern würde.
Isolated Margin, 0.5% Maintenance, Verluste auf deine Margin begrenzt. Ein Trailing Stop wird durch das Extrem jeder Kerze verschoben, nachdem diese Kerze gegen den geltenden Stop geprüft wurde - eine Kerze kann dich also nie auf einem Level ausstoppen, das sie selbst erzeugt hat.
Sende client_order_id, und ein wiederholtes Open liefert die Position zurück, die der erste Aufruf erzeugt hat, markiert mit idempotent: true. Auch das Schließen akzeptiert eine. Dieses eine Feld ist der Unterschied zwischen einem Bot, dem du unbeaufsichtigt vertraust, und einem, den du bewachen musst.
Ein kostenloser WebSocket pusht Positions-Events und Marks etwa alle 2 s; Webhooks senden dieselbe Form per POST an deine eigene URL, HMAC-signiert und mit Wiederholung, auch wenn nichts von dir verbunden ist. ETags machen die Polls, die du behältst, fast kostenlos.
Jedes Book bekommt ein eigenes Journal, eine eigene Equity-Kurve und einen eigenen Drawdown. /v1/report liefert Trefferquote und Rendite nach Coin, Hebelbereich, Seite und Stunde, mit einem Skill-Score - und es sagt unter acht Trades nichts, statt ein Muster zu erfinden.
Vierundzwanzig davon. Alles ist JSON über HTTPS, CORS an, ein Header. Ersetze v1 in jedem Pfad durch v2, um das {ok,data,ts}-Envelope zu bekommen.
&end=<unix ms>, um weiter zurückzublättern.asset_class, max_leverage und taker_fee_pct pro Symbol. Filtere mit ?class=crypto|stock|forex|metal|index. Rufe das einmal beim Start auf, statt Limits per Trial-and-Error zu entdecken.drift_ms zurück. Ein Bot, der Kerzen gegen eine driftende lokale Uhr bucketet, baut Bars, die sonst niemand sieht - und das ist von außen mühsam zu debuggen.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 optional). Gibt die Position inkl. ihres liq_price zurück. Füge "dry_run":true hinzu, um den bepreisten Trade zurückzubekommen - Einstieg, Menge, Liquidationspreis und Abstand, die Eröffnungsgebühr und den vollen Round Trip - ohne etwas zu schreiben. Nutze den Dry Run, um eine Position zu dimensionieren oder deinen Bot gegen die echte Engine zu testen.trail_pct setzt einen Stop, der dem besten seit dem Einstieg gesehenen Preis folgt, in diesem prozentualen Abstand und serverseitig nachgezogen: aus den Extremen der 1-Minuten-Kerzen im Minuten-Sweep und aus dem Live-Preis bei jedem /positions-Read, er bewegt sich also weiter, während dein Bot offline ist, und lockert sich nie. Ein Long, eröffnet bei 60,000 mit trail_pct: 1, startet mit dem Stop bei 59,400; wenn der Preis 63,000 druckt, liegt der Stop bei 62,370. Positionen tragen trail_pct und trail_hwm.{"symbol":"BTC","side":"long","type":"limit","limit_price":58000,"margin_usd":100,"leverage":20}. Sie wird zu deinem Preis ausgeführt, nicht zu dem Preis, bei dem die Engine den Cross bemerkt hat - die Ausführung wird aus dem 1m-High/Low ermittelt, ein Docht, der zwischen zwei Prüfungen zurückgelaufen ist, zählt also trotzdem. Dein Bot muss nicht laufen. Ein Limit-Long muss unter dem Markt liegen und ein Limit-Short darüber; sonst bekommst du limit_marketable statt einer stillen Market-Ausführung.{"symbol":"BTC","side":"long","type":"stop","limit_price":66000,"margin_usd":100,"leverage":10}. Dieselbe Engine wie bei einer Limit-Order - sie wird auf dem Niveau aus 1m-Kerzen ausgeführt, auch bei geschlossenem Browser - aber die falsche Seite wird abgelehnt (stop_wrong_side), damit sich ein Stop und ein Limit nie verwechseln lassen. sl, tp, trail_pct, client_order_id und dry_run gelten alle.{"id":"bp...","pct":50} - pct ist optional (Standard 100); Teil-Closes teilen die Position genau wie auf der Website.{"id":"bot...","sl":63500,"tp":66000,"trail_pct":1.5} - sende null, um einen Wert zu löschen, und lass ein Feld weg, um es zu behalten. Die Levels werden gegen die Einstiegsseite geprüft. Davor musstest du schließen und neu eröffnen, um einen Stop zu verschieben, was deinen Einstieg änderte und einen vollen Round Trip kostete.type: "limit" | "stop", dazu die letzten 20, die ausgeführt wurden, abgelaufen sind oder storniert wurden - eine ausgeführte trägt die position_id, die sie erzeugt hat. Orders gelten bis zur Stornierung, laufen nach 30 Tagen ab, und pro Account dürfen 20 offen liegen.{"order_id":"lo...","limit_price":58500,"sl":57000,"tp":62000,"margin_usd":150,"leverage":10,"trail_pct":1} - sende nur, was sich ändert. Vorher ging es nur über Stornieren und Neu-Platzieren, was die client_order_id der Order verlor. Die Richtung wird jetzt aus dem Markt neu abgeleitet und die Candle-Watermark startet neu, sodass ein verschobenes Niveau nie auf einer Bar ausgeführt werden kann, die vor der Änderung gedruckt wurde. Eine ausgeführte, stornierte oder abgelaufene Order antwortet mit 409.{"order_id":"lo..."}. Bereits ausgeführt oder storniert kommt mit 409 zurück, sodass eine Wiederholung nie eine Ausführung rückgängig machen kann.mark_price und unrealized_pnl_usd; erreichte Liquidationen und SL/TP werden automatisch abgewickelt. ?status=open|closed kürzt den Body auf das, was deine Schleife wirklich liest; ?since=<unix ms> und If-None-Match (304, wenn sich nichts geändert hat) werden ebenfalls unterstützt.balance_usd, equity_usd, free_margin_usd und return_pct./account, wenn deine Sizing-Logik nur das braucht./positions ist auf 100 Zeilen begrenzt; das hier blättert durch das gesamte Aufbewahrungsfenster - folge next_before, bis es null zurückgibt. Nutze es, um Strategiestatistiken auf dem vollständigen Verlauf statt auf einem abgeschnittenen Ende zu berechnen.max_drawdown_pct und dem live unrealisierten Punkt am Ende.{"confirm":true} auf $10,000 zurück: Closes archiviert, Orders storniert. Wird mit 409 open_positions_exist abgelehnt, solange etwas offen ist.usage_30d - Aufrufe pro Tag und Endpoint plus refused (die 429er), damit ein Bot sehen kann, wie nah er an seinem Limit läuft.POST {"venue":"bybit"} setzt den Account-Standard; fee_venue auf /open überschreibt ihn für eine Position. Siehe Börsengebühren.locked[] nennt, was zurückgehalten wird). Jedes Finding trägt das n, auf dem es beruht, und sagt unter 8 Trades nichts.POST {"act":"add","url":"https://…"} registriert einen, {"act":"test","id":…} sendet einen Ping und liefert den Status, den dein Server geantwortet hat, {"act":"delete","id":…} entfernt ihn.Maschinenlesbar: die OpenAPI-3.1-Spezifikation mit vollständigen Request- und Response-Schemas · eine interaktive Referenz, aus der du Aufrufe abfeuern kannst · der Changelog (JSON).
Orders werden sofort zum echten Live-Preis ausgeführt (Multi-Börsen-Feed - dieselben Preise wie unser Paper Trade). API-Ausführungen haben keine Slippage (Ausführungen auf der Website selbst schon), betrachte Einstiegspreise also als leicht optimistisch.
Jede Position zahlt eine Taker-Gebühr auf beiden Seiten, beim Close in pnl_usd verrechnet. Sie wird als Roundtrip berechnet: fee = qty × (entry + exit) × rate. Funding läuft auf Positionen auf, die über Funding-Zeitpunkte gehalten werden, und wird genauso abgezogen. Offene Positionen zeigen den PnL bereits netto nach dem Roundtrip in unrealized_pnl_usd, sodass das, was du siehst, auch abgerechnet wird.
| Market | Gebühr pro Seite | Round Trip auf $10,000 Nominalwert |
|---|---|---|
| Krypto-Perps | 0.055% | $11.00 |
| Aktien & ETFs | 0.02% | $4.00 |
| Metalle & Indizes | 0.015% | $3.00 |
| Forex-Majors | 0.008% | $1.60 |
Lieber die exakte Rechnung der Börse, auf der du laufen wirst? Belaste das Paper-Konto nach ihrem Gebührenplan, inklusive Referral-Rabatt. Ab etwa 180× Hebel verjüngt sich die Rate, damit der Roundtrip nie 20% deiner Margin übersteigt. GET /v1/markets liefert die exakte Rate und den Hebel-Cap für jedes Symbol. Kurzfristige Strategien leben oder sterben mit dieser Zahl - ein Scalp, der weniger einbringt als der Roundtrip, ist ein Verlierer, egal wie oft er recht hat.
Isolated Margin. Verluste sind auf deine Margin begrenzt. Der Liquidationspreis nutzt einen Maintenance-Margin-Satz von 0.5%; kreuzt der Live-Preis ihn, wird die Position automatisch zum Liquidationspreis abgewickelt. Auch Stop-Loss- und Take-Profit-Orders werden automatisch ausgeführt - kreuzt der Preis dein sl oder tp (geprüft gegen die Dochte der 1-Minuten-Kerzen im Minuten-Sweep, sodass auch eine Spitze zählt, die wieder zurückging), wird die Position auf diesem Niveau abgewickelt. Ein Trailing Stop zieht dem besten gesehenen Preis nach: Im Sweep wird er um das Extrem jeder Kerze verschoben, nachdem diese Kerze gegen den geltenden Stop geprüft wurde, sodass dich eine Bar nie auf einem Niveau ausstoppen kann, das sie selbst erzeugt hat.
Jedes Paper-Konto startet mit nominal $10,000. /v1/account und /v1/balance melden balance_usd, equity_usd und free_margin_usd, damit du Ergebnisse als Rendite statt als nackte Dollar-Zahl ausdrücken kannst. Dieses Guthaben ist eine Scorecard, keine Beschränkung: Margin wird nicht davon abgezogen, und eine Eröffnung wird nie wegen fehlender Mittel abgelehnt (margin_enforced: false). Dimensioniere deine Positionen selbst, wenn die Beschränkung echt sein soll.
Jede Antwort enthält X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Epoch-Sekunden); ein 429 fügt Retry-After hinzu. Limits werden pro Key gezählt, ein zweiter Key bekommt also sein eigenes Budget. X-RateLimit-Scope sagt, ob das Limit des Keys oder das pro IP galt.
Über die API eröffnete Positionen liegen serverseitig auf deinem Konto, erscheinen also in My Trades, zählen für die Season-Boards und XP und speisen deinen Trading-Report - denselben Report, den GET /v1/report an den Bot liefert.
Ein Paywall würde alle anderen zurück zum Polling drängen, das uns weit mehr kostet als der Stream - die Anreize passen also zusammen: Nutze den WebSocket, dann gewinnen wir beide. Marktdaten bleiben dauerhaft keyless und kostenlos; ein Key hebt nur das Limit an.
Zwei Dinge in dieser Engine sind bewusst großzügig, und es ist besser, sie zu benennen, als dich auf einem Live-Konto darauf stoßen zu lassen. Eine Market-Order wird zum Live-Preis ausgeführt, sodass eine neue Position 0.00 unrealisiert zeigt und die Entry-Linie genau dort liegt, wo du sie wolltest. Und die Maintenance Margin ist pauschal 0.5%, egal was die Position wert ist. Zum Lernen des Tradings ist beides richtig. Um eine Strategie zu beweisen, sind sie optimistisch, und je größer die Größe, desto optimistischer.
Es sind also Schalter, keine Annahmen. Standardmäßig aus - nichts, was du schon gebaut hast, verschiebt sich - und eingeschaltet verhalten sich Ausführungspreis und Liquidationspreis so, wie ein echtes Book und eine echte Risk-Limit-Tabelle sie sich verhalten lassen.
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}
Die Ausführung bewegt sich gegen dich um das, was das Durchqueren eines echten Orderbuchs kostet: 0.01% bei den Majors, 0.05% bei dünnerem Krypto, 0.005% bei Forex, 0.02% bei Aktien, Metallen und Indizes. Ein Kauf zahlt drauf, ein Verkauf verkauft darunter - nie umgekehrt.
Die Maintenance Margin steigt mit dem Nominalwert, wie bei der Risk-Limit-Tabelle einer Börse, sodass eine große Position früher liquidiert wird - eine höhere Maintenance-Anforderung verträgt weniger Gegenbewegung, bevor sie dich schließt, genau das will eine Börse bei großen Größen. Das ist unser veröffentlichtes Modell und nicht die Tabelle einer bestimmten Börse, und GET /realism liefert die ganze Leiter - du sollst sie nie aus einem Liquidationspreis rückrechnen müssen.
Auf welchem veröffentlichten Maintenance-Margin-Satz einer Börse aufgebaut wird: Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Er verschiebt nur, wo der Liquidationspreis liegt - nie Größe, Gebühren oder PnL.
Diese drei sind nur ein Teil. Die gesamte Simulation ist konfigurierbar - Größe des Buchs und ob es ein echtes Budget ist, deine eigenen Slippage- und Gebührenwerte, Größeneffekt, Latenz, Teilausführungen, Ablehnungen und Funding - und acht Presets setzen sie in einem Aufruf. Eine Position behält die Maintenance Margin, mit der sie ausgeführt wurde, daher überschreibt das Einschalten nie einen Trade, den du schon hältst, und jeder Close hält fest, womit er lief. Daher hat die Arena ihre Spalte Fills - ein Board, das Bots rankt, sollte sagen, welche davon im einfachen Modus liefen.
Die drei Schalter oben sind Teil von etwas Größerem. Alles, was diese Engine annimmt, ist ein Feld, das du setzen kannst: die Größe des Buchs und ob es ein echtes Budget ist, was das Durchqueren des Orderbuchs beim Einstieg und beim Ausstieg kostet, wie lange deine Order unterwegs ist, ob eine Order teilweise ausgeführt wird, wie oft die Börse Nein sagt, was du an Gebühren zahlst, ob überhaupt Funding berechnet wird und wo der Liquidationspreis liegt.
Die Standardwerte sind bewusst einfach, und das sollte man offen sagen. Eine Market-Order wird komplett zum Live-Preis ausgeführt, die Maintenance Margin ist pauschal 0.5%, das Guthaben ist eine Anzeigetafel, die eine Eröffnung nie ablehnt, und es gibt weder Latenz noch Auswirkung der Ordergröße. Das ist genau der richtige Ort, um einen Bot zum Laufen zu bringen. Es ist der falsche Ort, um zu beurteilen, ob er einen Vorteil hat. Ein Aufruf ändert das.
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"}
Werte außerhalb des Bereichs werden abgelehnt, nie begrenzt - eine Strategie darf nie unter einer Einstellung gemessen werden, die du nicht gewählt hast. Eine Position behält Maintenance Margin, Gebührensatz und Exit-Durchquerungskosten, mit denen sie ausgeführt wurde, ein Leben lang; das Einschalten von irgendetwas überschreibt nie einen Trade, den du schon hältst.
Die Engine, wie sie immer war. Bring den Bot zum Laufen, sieh Trades entstehen, dann ändere ihn.
Das Profil, an dem du einen Edge misst: Das Book kostet, was wir auf beiden Seiten messen, Größe kostet mehr, die Risk-Limit-Staffel ist aktiv, Funding wird berechnet, und das Book lehnt ab, was es nicht finanzieren kann.
Die veröffentlichte Taker-Gebühr und Maintenance Margin dieser Börse, mit unseren gemessenen Durchquerungskosten, erzwungener Margin und eingeschalteter Leiter.
Ein Mid-Cap-Perp zu einer unfreundlichen Stunde, und dann schlimmer als alles, was dir begegnen wird: 60 bps zum Durchqueren, 120 bps pro $100k Größe, Ausführungen ab einem Viertel, jede zwanzigste Eröffnung abgelehnt, eine Sekunde Latenz. Unsere Werte, nicht die einer Börse. Funktioniert eine Strategie hier noch, lebt sie nicht von Ausführungsglück.
| Feld | Bereich | Was es tut |
|---|---|---|
| Das Book — was der Bot riskieren darf | ||
start_balance_usd | 100 – 10,000,000 | Das Buch, an dem deine Ergebnisse gemessen werden: return_pct, die Equity-Kurve und der maximale Drawdown richten sich danach. Teste mit der Kontogröße, mit der du wirklich handeln wirst. |
margin_enforced | off / on | Der größte Unterschied zwischen Scorecard und Börse. Eingeschaltet wird eine Eröffnung, die mehr als deine freie Margin braucht, mit 402 insufficient_margin abgelehnt. Freie Margin ist Guthaben minus gebundene Margin — unrealisierter Gewinn einer offenen Position ist keine Sicherheit für eine neue, denn jede Position hier ist Isolated Margin. |
leverage_max | 0 – 10,000 | Dein eigenes Limit unterhalb des Caps pro Markt. Beweist, dass eine Strategie nie unbemerkt auf 100× abgedriftet ist. 0 = der Cap des Marktes. |
max_notional_usd | 0 – 1,000,000,000 | Deine eigene Obergrenze für den Nominalwert einer Position. 0 = keine eigene. |
| Die Ausführung — was das Durchqueren des Orderbuchs kostet | ||
slippage | off / on | Fülle gegen dich selbst, wie es das Durchqueren eines echten Buchs tut: 0.01% Krypto-Majors, 0.05% dünneres Krypto, 0.005% Forex, 0.02% Aktien, Metalle und Indizes. Ein Kauf zahlt drauf, ein Verkauf verkauft darunter. |
slippage_bps | 0 – 500 | Deine eigene Zahl statt dieser Tabelle. 10 = 0.10%. null geht zurück zur Tabelle. |
impact_bps_per_100k | 0 – 500 | Größe kostet mehr, weil eine größere Order weiter durchs Buch läuft: so viele Basispunkte zusätzlich pro $100,000 Nominalwert. |
exit_slippage | an / aus | Zahle die Durchquerungskosten auch beim Ausstieg, nicht nur beim Einstieg. Ohne das liest sich eine Scalping-Strategie besser, als sie je handeln kann. Ein Stop-Loss, Take-Profit oder eine Liquidation wird weiterhin auf ihrem eigenen Niveau ausgeführt — siehe die Grenzen unten. |
latency_ms | 0 – 2,000 | Deine Order ist so lange unterwegs, und der Preis wird danach neu gelesen — die Ausführung ist also der Markt, wie er war, als deine Order ankam, nicht als du sie gesendet hast. |
partial_fills | off / on | Eine Market-Order kann weniger ausgeführt werden, als sie verlangt hat. Die ausgeführte Größe ist position.margin_usd; das Verhältnis steht im Header X-MP-Fill-Pct und im fill-Objekt bei v2. |
min_fill_pct | 10 – 100 | Das schlechteste Verhältnis, das du bekommen kannst. 40 bedeutet irgendwo zwischen 40% und 100% dessen, was du angefragt hast. |
reject_rate_pct | 0 – 50 | Dieser Anteil der Eröffnungen wird absichtlich mit 503 venue_rejected abgelehnt. Ein Bot, der eine Ablehnung nicht verarbeiten kann, ist nicht fertig, und hier findest du das günstig heraus. |
| Die Kosten | ||
taker_bps | 0 – 100 | Deine eigene Gebühr pro Seite statt eines Börsenplans. 5.5 = 0.055%. Die Hebel-Staffelung gilt weiterhin, sodass keine Einstellung einen Round Trip den ganzen Einsatz fressen lassen kann. |
funding | an / aus | Aus, wird nie Funding berechnet. So unterscheidest du einen Ausführungs-Edge von einem Carry-Edge — ein Short, der durch positives Funding gehalten wird, ist vielleicht nur wegen des Funding profitabel. |
funding_mult | 0 – 5 | Skaliere die echte 8-Stunden-Rate. |
| Die Liquidation | ||
margin_venue | 10 Börsen | Dessen veröffentlichte Maintenance-Margin-Rate bestimmt, wo die Liquidation liegt. Binance 0.40%, Bybit 0.50%, MEXC 0.10%, Kraken 0.60%, Hyperliquid 1.25%, Coinbase 1.33%. Sie verschiebt nur den Liquidationspreis. |
margin_tiers | off / on | Die Maintenance Margin steigt mit dem Nominalwert wie bei einer Risk-Limit-Leiter, sodass eine große Position früher liquidiert wird. Die ganze Leiter steht in GET /v2/realism. |
mmr_pct | 0.05 – 10 | Deine eigene Maintenance Margin, sie schlägt margin_venue und unseren Standard. |
Ein Stop-Loss, Take-Profit oder eine Liquidation wird auf ihrem eigenen Niveau ausgeführt und zahlt nie die Durchquerungskosten: Der serverseitige Sweep läuft über alle Konten gleichzeitig und kann pro Durchlauf kein Profil lesen. Hinter dem Impact-Modell steht kein Orderbuch mit echter Tiefe — impact_bps_per_100k ist eine deklarierte lineare Kostengröße, kein simuliertes Buch. Und die gesamten Durchquerungskosten beim Exit werden gegen den Mark berechnet, also ein Spread, nicht ein Bid und ein Ask, die du getrennt quotieren kannst. Alles andere oben wird genau wie beschrieben angewendet.
Jede Zahl in diesem Profil ist über GET /api/bot/v2/sim auslesbar, auch wie eine Ausführung jetzt gerade aussähe — eine Zahl, die ein Bot nicht zurücklesen kann, muss er raten. GET /api/bot/v2/report sagt dir dann, was die Ausführung tatsächlich gekostet hat: Gebühren, Funding, brutto gegen netto und kept_pct, den Anteil des Brutto, der übrig blieb. Das ist auf jedem Plan kostenlos, denn es ist keine Aufschlüsselung, wo dein Edge liegt — es zeigt, ob der Edge echt ist.
Standardmäßig zahlt jede Paper-Ausführung den MarginPad-Satz: 0.055% pro Seite bei Krypto, beide Seiten, als Roundtrip beim Close berechnet. Das ist ein fairer Durchschnitt, aber niemandes exakte Rechnung. Wenn du schon weißt, wo der Bot echt laufen wird, belaste das Paper-Konto nach dem Gebührenplan dieser Börse - ihr veröffentlichter Taker-Satz, abzüglich des Referral-Rabatts, den eine MarginPad-Anmeldung dort bekommt - damit der Forward-Test so abgerechnet wird wie später das Live-Konto:
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
| Venue | Taker | Unser Referral-Rabatt | Du zahlst pro Seite |
|---|---|---|---|
| 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% (Code MARGINPAD) | 0.0432% |
| OKX · Kraken | 0.050% | - | 0.050% |
| MEXC | 0.020% | - | 0.020% |
| KuCoin | 0.060% | - | 0.060% |
| MarginPad-Standard | keine Börse gewählt | 0.055% | |
Die Sätze sind die veröffentlichten Basis-Tiers der Börsen und die Rabatte, die wir auf /exchanges/ nennen; die API liefert sie mit source zurück, damit du weißt, dass es beworbene Zahlen sind, keine Messungen. Beide Seiten zahlen den Taker-Satz (die Paper-Engine füllt zum Market; ein Maker-Rebate auf einen offenen Einstieg wird nicht modelliert). Nur Crypto-Perps - Aktien, Forex, Metalle und Indizes behalten die MarginPad-Klassensätze, egal welche Börse. Offene Positionen behalten den Satz, mit dem sie ausgeführt wurden; die Obergrenze bei extremem Hebel (ein Round Trip nie über 20% der Margin) gilt weiterhin. Dieselbe Wahl ist der "Gebühren wie bei"-Selektor im Paper Trade-Formular, sodass ein Bot und die manuellen Trades seines Besitzers identische Gebühren zahlen.
Sende beim Open immer client_order_id mit. Das ist die wichtigste Zeile dieser Doku. Ohne sie lässt dich ein Request, der im Netzwerk in ein Timeout läuft, raten: Wurde die Position eröffnet oder nicht? Wiederholst du ihn, hast du vielleicht zwei. Mit ihr liefert die Wiederholung die Position, die der erste Aufruf erstellt hat, markiert mit 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}}
Nutze einen Wert, den deine Strategie deterministisch neu erzeugen kann - eine Signal-ID oder Symbol plus Kerzen-Zeitstempel. IDs werden 7 Tage gemerkt.
Auch das Schließen akzeptiert eine. Sende client_order_id an /close, und ein Retry meldet, was der erste Aufruf getan hat (idempotent: true), statt eines Fehlers, den du erst deuten musst.
Sende symbol beim Close mit. Jede /positions-Zeile enthält es bereits, daher kostet es nichts und verkürzt den Close messbar:
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
Unser Trading-Store ist eine einzelne, an eine Region gebundene Instanz, sodass jeder zusätzliche Hop das kostet, was der Round Trip dorthin von deinem Standort aus kostet. Gemessen am 2026-08-19: etwa 20 ms aus Europa, aber 198 ms im Median und 368 ms im 95. Perzentil aus Singapur. Ein kalter Preis-Feed addiert rund 400 ms, und ohne den Hinweis könnte ein Close auf einem liquiden Paar im selben Batch auf ein illiquides warten. Mit dem Hinweis ist ein Close ein Hop plus ein warmer Preis. Ein falsches oder veraltetes symbol kostet nichts - der Server bemerkt es und fällt zurück.
Verbrenne dein Rate-Budget nicht mit Polling. Die meisten Bots verbrauchen den Großteil ihrer Aufrufe mit der Frage "hat sich etwas geändert". Zwei Dinge machen das fast kostenlos:
# 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
Der ETag deckt den strukturellen Zustand ab - Positions-IDs, Status, Menge, Stop, Target, Exit - und bewusst nicht den Mark Price, der sich mit jedem Tick bewegt und den ETag nie passen ließe. Also: Polle /positions für "hat mein Stop ausgelöst", polle das keyless /price für den PnL. Beobachte X-RateLimit-Remaining und gehe bei Retry-After in den Back-off.
Positionen und Preise werden an dich gepusht, sodass du innerhalb weniger Sekunden erfährst, dass dein Stop ausgelöst hat, statt erst beim nächsten Poll:
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"}
Events: position mit event: opened | updated | closed feuert, wenn sich wirklich etwas ändert - eine Ausführung, ein verschobener Stop, ein Close, eine Liquidation. prices trägt bei jedem Tick den Mark Price deiner offenen Symbole. Allein eine Mark-Price-Bewegung löst nie ein position-Event aus, der Kanal bleibt also still, wenn nichts passiert ist.
Stops werden schneller abgewickelt, solange du verbunden bist. Der Stream treibt denselben serverseitigen SL/TP/Liquidations-Sweep an, den auch der REST-Pfad nutzt, im Takt von ~2s, statt deine Position dem periodischen Sweep zu überlassen.
Bis zu 3 gleichzeitige Sockets pro Konto, geteilt über deine Keys. Sockets werden nach 6 Stunden recycelt - verbinde dich neu und du erhältst einen frischen snapshot. Reißt die Verbindung ab, behandle den nächsten snapshot als Wahrheit, statt verpasste Events nachzuspielen.
Gemessen über die letzten 40 Tage: 76.4% aller Aufrufe an diese API sind ein Poll von /positions und /account nach Events, die noch nicht passiert sind. Ein Webhook dreht das um - wir senden dir per POST, wenn tatsächlich etwas passiert, mit derselben Position-Form, die ein Poll geliefert hätte, und er funktioniert, während dein Bot offline ist, neu startet oder irgendwo läuft, wo kein Socket gehalten werden kann.
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",…}}
Events: position.opened · position.updated (ein Stop oder Ziel wurde verschoben) · position.closed · position.liquidated · order.filled (trägt die Position, die sie erzeugt hat) · order.expired · order.cancelled. Lass events weg, um alle zu erhalten. Trades von der Website auf demselben Account feuern sie ebenfalls.
Prüfe jede Zustellung. X-MP-Signature ist sha256=HMAC_SHA256(secret, raw body) mit dem Secret, das du beim Hinzufügen des Hooks bekommen hast. Vergleiche es, bevor du den Body parst; beide SDKs liefern verify_webhook / verifyWebhook mit. Antworte innerhalb von 6 Sekunden mit 2xx - alles andere wird 5-mal mit Back-off wiederholt (30 s, 1, 2, 4 Min), und ein Hook wird nach 25 aufeinanderfolgenden Fehlern pausiert; GET /webhooks zeigt active, consecutive_failures und last_error, damit du siehst, warum. Drei Hooks pro Konto bei Pro, fünfzehn bei Max, fünfzig bei Business; Zustellungen erfolgen nach bestem Bemühen, der WebSocket-snapshot und /positions bleiben die Quelle der Wahrheit.
Probiere es, bevor du einen Empfänger schreibst: Registriere https://marginpad.io/api/whsink/<any-token-you-choose> als URL und rufe dann GET auf derselben Adresse auf - sie gibt die letzten 20 Zustellungen (Header und Body) 15 Minuten lang zurück. Keine Authentifizierung; der Token ist das Geheimnis.
Ein Book ist ein eigenes Journal mit eigenem Guthaben, Report und eigener Equity-Kurve innerhalb deines Kontos. Erstelle einen Key mit einem Book-Namen, und jeder Aufruf mit diesem Key handelt dieses Book; dein Hauptkonto und deine anderen Books sehen ihn nie. Free-Konten bekommen ein Book neben dem Hauptkonto, API Pro fünf, Max zwanzig und Business fünfzig.
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
Reset wird mit 409 open_positions_exist abgelehnt, solange etwas offen ist: erst schließen, dann zurücksetzen. Die archivierten Trades bleiben erhalten (nie gelöscht), aber Report, Ledger, /trades und die Equity-Kurve starten ab dem Reset, und ein Browser, der noch das alte Journal hält, kann es nicht zurückschieben. Webhooks feuern auf den Hooks des Kontos mit "account":"rsi" im Payload, sodass ein Empfänger jedes Book bedient.
Backteste mit dem Code, den du live laufen lässt. Starte ein Replay eines vergangenen UTC-Tages, und dieselben Routen, die dein Bot schon aufruft, wirken auf ein separates Replay-Journal, bepreist aus den 1-Minuten-Kerzen von MarginPad am Cursor. Stops, Ziele und Liquidationen werden bei jeder Kerze zwischen zwei deiner Aufrufe auf High und Low geprüft, mit derselben Gebühren- und Funding-Mathematik wie live. Nichts aus einem Replay erreicht die Boards, die Arena oder deinen Report.
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
Die Geschwindigkeit reicht von 1 (Echtzeit) bis 600 (ein Tag in 2.4 Minuten). Ein Replay pro Key gleichzeitig, nur Crypto, vorerst nur Market-Orders: Lies Replay-Preis und Kerzen über GET /v1/replay, denn das keylose /v1/price und /v1/klines liefern weiter Live-Daten.
Du kannst mehrere Keys auf einem Konto halten - trenne einen Backtest-Bot von einem Live-Bot und widerrufe einen, ohne den anderen anzufassen. Nutzung und Rate-Limits werden pro Key gezählt, daher hat jeder ein eigenes Budget und eine eigene Zeile in deinen Statistiken. Auf der Website angemeldet, aus dem Browser:
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
Ein widerrufener Key liefert 401 revoked_key. Keys sind Geheimnisse - wer einen hält, kann dein Paper-Konto handeln. Erstelle und widerrufe sie oben auf dieser Seite.
Jeder Account und jedes Book mit mindestens fünf geschlossenen Trades, die in dieser 14-Tage-Season über die API eröffnet wurden, wird auf /arena/ nach realisiertem PnL netto nach Gebühren und Funding gerankt, mit Trefferquote, Rendite auf die $10,000-Scorecard, durchschnittlichem ROE und Liquidationen. Keine Preisgelder und nichts zum Anmelden: Handle über die API, und das Board erfasst dich. JSON: GET /api/arena.
MarginPad betreibt einen Remote-MCP-Server, damit ein KI-Assistent Märkte lesen und dein Paper-Konto direkt handeln kann - ohne Glue-Code:
https://marginpad.io/mcp
Füge ihn in deinem Client als Remote-MCP-Server hinzu und setze den Header X-API-Key: mpb_…, wenn du die Paper-Trading-Tools willst. Marktdaten-Tools brauchen keinen Key. Es stehen achtundzwanzig Tools zur Verfügung: Preise, Kerzen, Märkte, Screener, Funding, Open Interest, Liquidationen, Fear and Greed, der Wirtschaftskalender, zwei Rechner, und Paper open (mit Trailing Stops und Dry Run) / Limit- und Stop-Orders / modify / cancel / close / sltp / positions / orders / balance / trades / report / fees / accounts / reset / equity / replay. GET /mcp im Browser liefert den Server-Descriptor.
/api/bot/v1/* ist eingefroren. Seine Response-Bodys ändern sich nicht; dagegen geschriebene Bots laufen unbegrenzt weiter, und es bekommt weiterhin Korrektheits-Fixes.
/api/bot/v2/* ist dieselbe API mit dem Envelope, den unsere Daten-Endpoints bereits nutzen - eine vorhersehbare Form für Erfolg und Fehler, sodass du das Parsing nur einmal schreibst:
{ "ok": true, "data": { ... }, "ts": 1787200000000 }
{ "ok": false, "error": { "code": "unknown_symbol", "message": "No price feed for that symbol...", "symbol": "FOO" }, "ts": 1787200000000 }
Gleiche Pfade, gleiche Parameter, gleicher Key - ersetze v1 in der URL durch v2. Die code-Werte der Fehler sind stabile Bezeichner; message ist für Menschen und kann umformuliert werden.
Bei /v2 sind Fehler immer {"ok":false,"error":{"code","message"},"ts"}. Der code ist ein stabiler Bezeichner, nach dem du verzweigen kannst; die message ist Fließtext und kann umformuliert werden. Manche Fehler tragen den Wert, den du zur Korrektur brauchst - sl_wrong_side und tp_wrong_side enthalten den Live-Preis.
| Code | HTTP | Was zu tun ist |
|---|---|---|
missing_api_key / invalid_api_key | 401 | Sende einen gültigen Key in X-API-Key. |
revoked_key | 401 | Erstelle einen neuen Key; dieser wurde widerrufen. |
rate_limit | 429 | Schlafe bis Retry-After. Kein Hot-Retry. |
unknown_symbol | 404 | Prüfe /v1/markets. |
symbol_required, margin_usd_min_1, margin_usd_max_100000, id_required | 400 | Korrigiere den Request-Body. |
sl_wrong_side / tp_wrong_side | 400 | Die Antwort enthält live - setze das Niveau auf die richtige Seite davon. |
stop_wrong_side | 400 | Ein Stop-Entry wartet auf der Ausbruchsseite (Long darüber, Short darunter). Nutze type:"limit" für einen Pullback-Einstieg. |
trail_pct_invalid | 400 | trail_pct ist ein Prozentwert zwischen 0.05 und 50; außerhalb wird er abgelehnt, nie stillschweigend begrenzt. |
nothing_to_modify | 400 | /modify_order braucht mindestens ein Feld. |
plan_required | 402 | Webhooks brauchen einen bezahlten Plan. Alles andere auf dieser Seite ist auf Free. Der Body enthält plan_needed. |
premium_required | 402 | Legacy-Code für plan_required, wird weiter gesendet, damit ein 2.3-Bot ihn erkennt. |
too_many_webhooks | 409 | Lösche zuerst einen - drei Hooks bei Pro, fünfzehn bei Max, fünfzig bei Business. |
bad_url / bad_event | 400 | Webhook-URLs sind https auf einem öffentlichen Host; die Event-Namen stehen in GET /webhooks. |
too_many_open | 409 | Du hast die Obergrenze offener Positionen deines Plans erreicht. Schließe etwas. |
already_closed | 400 | Bei einer Wiederholung unbedenklich - die Position ist bereits abgewickelt. |
no_price | 400 | Gerade kein Live-Preis; die Position bleibt offen. Wiederhole. |
unavailable | 503 | Vorübergehend. Wiederhole mit Back-off. |
Immer noch festgefahren? Der Error-Body ist die erste Anlaufstelle, Status die zweite. Wenn beides nicht hilft, schreib an support@marginpad.io mit dem Endpoint und dem genauen Body, den wir zurückgeschickt haben - was du sonst noch angeben solltest, steht auf der Support-Seite. Ein Mensch liest es.
Liquidationen in Echtzeit, aggregiert von acht Börsen durch unseren eigenen Collector - die Daten hinter unserem Rekt-Feed und der Liquidations-Heatmap, als kostenloses JSON bereitgestellt. Vergleichbare Daten kosten anderswo üblicherweise $300+/Monat; hier brauchst du überhaupt keinen API-Key. Edge-gecacht und ratenbegrenzt, damit er pollende Bots problemlos verkraftet.
{events:[{ts, exchange, symbol, side, price, qty, notional}]}. Events landen hier Sekunden nachdem sie passieren (3s Edge-Cache). Polle alle 3-5s.side ist long_liquidated oder short_liquidated, notional ist die Größe in USD.minutes: bis zu 43200 (30 Tage).{clusters:[{price, side, est_notional}]}. Aktualisiert sich laufend aus dem Live-Orderflow.Namensnennung erwünscht (verlinke marginpad.io), aber nicht Pflicht. Abdeckung: ~70%+ des Liquidationsflusses am Markt - die Börsen, die den Preis bewegen. Zu Lernzwecken; kein Uptime-SLA. Du willst nur Marktdaten? Die gesamte keyless Oberfläche ist auf der Seite Free Crypto Data API dokumentiert.
Die meisten Krypto-Trading-Bots, die im Backtest profitabel aussehen, verlieren in der ersten Woche live Geld. Backtests spielen saubere historische Kerzen ab - sie erkennen keine Race Condition in deiner Order-Logik, keinen Fehler bei der Positionsgröße, der erst nach einer Verlustserie auftritt, und keinen Hebel, der unbemerkt über das wächst, was deine Margin übersteht. Forward-Testing lässt denselben Bot, denselben Codepfad, gegen echte Live-Preise in Echtzeit laufen. Hat die Strategie einen Fehler, zeigt er sich hier, wo ein Bug dich nichts kostet.
| Backtesting | Paper Trading (diese API) | Live-Trading | |
|---|---|---|---|
| Kurse | Historische Kerzen | Echte Live-Preise, in Echtzeit | Echte Live-Preise |
| Risiko | Keine | Keine - simulierte Dollar | Echtes Geld im Spiel |
| Fängt Logikfehler | Selten - Replay-Daten verbergen sie | Ja - derselbe Codepfad wie live | Ja, aber jeder Bug kostet Geld |
| Overfitting-Check | Nein - du hast auf diesen Daten optimiert | Ja - ungesehene Zukunftsdaten | Ja |
| Kosten | Free | Kostenlos nutzbar - Gebühren & Funding simuliert | Gebühren + Verluste + Funding |
| Am besten für | Ideen schnell filtern | Den Bot beweisen, bevor du ihn finanzierst | Eine Strategie, die schon zweimal bewiesen ist |
Der mittlere Schritt ist der, den die meisten überspringen - und der, der ihnen Geld gespart hätte. Backteste hier eine Idee, teste sie vorwärts mit dieser API und finanziere dann ein Konto.
Alles auf dieser Seite wird in simulierten Dollar abgewickelt. Hat der Bot Wochen im Forward-Test überstanden, braucht derselbe Code eine Börsen-API, um echte Orders zu platzieren. Zwei Börsen, auf die wir Bot-Entwickler aus unterschiedlichen Gründen hinweisen:
Perps auf einer eigenen Chain mit öffentlicher REST- und WebSocket-API, Sub-Accounts, die jeweils ein eigenes API-Wallet bekommen (der Bot hält nie deinen Haupt-Key), stündlichem Funding und einem Buch, das jeder on-chain prüfen kann. Das Nächste an dem, was es heißt, gegen diese API mit echtem Geld zu laufen.
REST- und WebSocket-Formate nah an dem, was du gerade geschrieben hast, ein eigener Key pro Subaccount und eine der Quellen, aus denen unsere eigenen Preise stammen. Die Standardwahl, wenn du ein zentralisiertes Book mit Fiat-On-Ramps willst.
Open a Bybit account →Ja - MarginPad stellt in Echtzeit aggregierte Liquidationen von 8 Börsen als kostenloses JSON bereit, ohne Key: /api/v1/feed, /api/v1/liquidations/live, /api/v1/liquidations/recent und /api/v1/clusters. Vergleichbare Feeds kosten meist $300+/Monat. Siehe den Abschnitt zu Liquidationsdaten.
Ja. Es ist ein Paper-Trading-Simulator - Positionen nutzen echte Live-Marktpreise, aber kein echtes Geld. Melde dich mit einer E-Mail an, erzeuge einen API-Key und fang sofort an zu testen. Bezahlte Pläne heben nur die Obergrenzen an.
Jede Sprache, die einen HTTPS-Request senden kann - Python, JavaScript/Node.js, Go, Rust, PHP oder einfach curl. Standard-REST, JSON-Antworten, ein X-API-Key-Header.
Jedes USDT-Paar mit Live-Preis an großen Börsen - BTC, ETH, SOL und Hunderte Altcoins, dazu US-Aktien, Forex-Majors, Metalle und Indizes als Perps. Prüfe ein Symbol mit GET /api/bot/v1/price?symbol=SOL.
Nein. Keine Einzahlung, kein Wallet, kein KYC. Du meldest dich nur mit einer E-Mail an, damit dein API-Key und deine Positionen über Sessions hinweg erhalten bleiben.
Nein. Die Bot API hat eigene Pläne, und ein Premium-Abo ändert kein API-Limit. Premium schaltet Funktionen auf der Website frei; die API-Pläne schalten API-Limits frei. Sie werden getrennt gekauft.
Baue einen funktionierenden Bot in Python und richte ihn auf diese API - kompletter Code: Preis-Feed, EMA-Cross-Strategie, Open-/Close-Orders und die Schleife.
Derselbe Bot in JavaScript - kompletter Node.js-Code ohne Abhängigkeiten, auf diese API gerichtet.
Der dreistufige Ablauf, der funktionierende Bots von geleerten Konten trennt: Backtest, Paper Trading, dann live gehen.
Wie Grid-Bots funktionieren, wo sie gewinnen und wo sie scheitern - und wie du einen per Forward-Test prüfst, bevor du ihn finanzierst.
Was jede Teststufe beweist und in welcher Reihenfolge du sie nutzt.
Die KI-gestützten Strategien, die wirklich bestehen - und wie du sie risikofrei testest, bevor du automatisierst.