Originaltitel: „Polymarket PnL Präzise Berechnung: Warum deine Gewinn- und Verlustrechnung möglicherweise komplett falsch ist“
Originalautor: Leo, Krypto-Analyst
Ich habe ein halbes Jahr lang automatisierten Handel bei Polymarket selbst entwickelt, der größte Fehler war nicht eine Strategie, die versagt, sondern dass ich nicht einmal richtig berechnen konnte, wie viel ich tatsächlich verdient habe.
Ich bin nicht schlecht. Das Problem liegt darin, dass die PnL-Berechnung von PM selbst eine Fallgrube ist. Die offiziellen API-Daten, die du bekommst, sind falsch, die Rankings auf Drittanbieter-Websites ebenfalls. Du schreibst dein eigenes Skript? Wahrscheinlich auch falsch.
Wie groß ist die Abweichung? Der Platz 3 im Ranking, kch123, hat mit einer falschen Methode einen Verlust von 3,5 Mio. USD berechnet, tatsächlicher Gewinn sind 11,4 Mio. USD. Es ist nicht nur ein paar Prozentpunkte Unterschied — die Gewinn- und Verlustsymbole sind sogar vertauscht.
In diesem Beitrag werde ich jeden Fehler, den ich gemacht habe, im Detail erklären. Für Trader, Tool-Entwickler und Ranking-Analysten – früher oder später wirst du auf diese Fallstricke stoßen.
Der naheliegendste Ansatz: Die /positions-API aufrufen, alle cashPnl (Bargeld-Gewinn/-Verlust) Felder summieren.
Praktische Tests mit den Top 3 Adressen im Ranking:
swisstony: Summe cashPnl +$35.000, tatsächliches Ranking +$5,6 Mio., Differenz 158-fach
kch123: Summe cashPnl -$3,52 Mio., tatsächliches Ranking +$11,4 Mio., Vorzeichen vertauscht
gmanas: Summe cashPnl -$2,64 Mio., tatsächliches Ranking +$5,02 Mio., Vorzeichen vertauscht
Bei diesen drei Adressen sind die Gewinn- und Verlustsymbole in zwei Fällen direkt vertauscht.
Ursache: Die cashPnl, die die /positions-API zurückgibt, enthält nicht die bereits geschlossenen/ eingelösten realisierten PnL. Wenn eine Gewinnposition automatisch in USDC ausgezahlt wird, verschwindet diese Position aus der API-Antwort. Es verbleiben nur noch offene Positionen – meist mit unrealisiertem Verlust.
Du denkst, du berechnest den gesamten Gewinn/Verlust, aber in Wirklichkeit hast du nur den noch offenen Teil erfasst.
In den JSONL-Handelsdaten gibt es ein Feld makerPnl (Market Maker Gewinn/Verlust), das nach dem Namen für die PnL-Berechnung gedacht ist. Glaub nicht daran.
Ich habe in den Market-Making-Daten beobachtet, dass die Summe von makerPnl deutlich von den auf der Chain erfassten Cashflows abweicht – um eine Größenordnung. Die genaue Differenz hängt vom Szenario ab, aber die Richtung ist immer gleich: Die interne Logik von makerPnl stimmt nicht mit den tatsächlichen USDC-Flows überein.
Egal wie groß die Abweichung ist: Verwende dieses Feld nicht zur PnL-Berechnung.
Das ist das unlogischste.
Wenn eine txHash (Transaktions-Hash) mehrfach vorkommt, denkt man: Das sind doppelte Daten, entfernen.
Das funktioniert nicht. Das CLOB (On-Chain-Limit-Orderbuch) bei PM kann in einer Transaktion mehrere Maker-Orders ausführen. Mehrere Einträge mit demselben txHash sind echte, separate Fills.
Ich habe früher nach txHash + Asset dedupliziert, dabei wurden auf der BUY-Seite 133 USD zu wenig berechnet. Auf Polygon habe ich bestätigt, dass eine Transaktion tatsächlich mehrere unabhängige USDC-Transfer-Events enthält, die jeweils eine echte Transaktion darstellen.
Fazit: Nicht nur nach txHash deduplizieren. Für die PnL-Berechnung direkt die Rohdaten aus /activity summieren.
Bei der Paginierung der /activity-API mit offset? Überschreitet man 3000 Einträge, gibt es direkt einen 400-Fehler. Das steht nicht in der Dokumentation.
Alle drei oben genannten Adressen haben das bestätigt: GET /activity?offset=3100 liefert HTTP 400, die Fehlermeldung lautet „max historical activity offset of 3000 exceeded“. Top-User haben oft Zehntausende Transaktionen, 3000 Zeilen reichen nicht aus.
Mit dem end-Parameter (letzte Zeile minus 1) als Cursor gibt es kein Limit.
Wenn du das PnL einer Adresse berechnest und es mit dem Ranking vergleichst, gibt es manchmal Abweichungen.
Meistens sind es weniger als 10 USD (durch Schwankungen im Marktwert der Positionen). Bei größeren Differenzen könnten Gründe sein: Das Ranking nutzt andere Zeitfenster, Cache-Refresh-Delay oder der Nutzer hat mehrere Proxy-Wallets verbunden.
In meinen Tests stimmt die PnL, die mit der Bargeldfluss-Methode berechnet wurde, sehr genau mit den lb-api-Daten überein. Wenn deine Ergebnisse stark abweichen, prüfe zuerst, ob das Paginieren vollständig ist (Fehler 4) und ob du die richtigen Felder benutzt hast (Fehler 1-2).
Nach verschiedenen Versuchen habe ich die zuverlässigste Methode bestätigt: die Summierung der Cashflows über die Data API. Ohne Vorberechnete Felder, direkt aus den Rohdaten der Transaktionen.
Formel:
PnL = SUM(TRADE where side=SELL) + SUM(REDEEM) + SUM(MERGE) + SUM(MAKER_REBATE) + SUM(REWARD) - SUM(TRADE where side=BUY) - SUM(SPLIT) + Positionswert
· TRADE BUY: USDC ausgeben, um Token zu kaufen (Ausgabe)
· TRADE SELL: Token verkaufen, USDC zurückerhalten (Einnahme)
· REDEEM: Gewinn-Position in USDC umwandeln (Einnahme)
· SPLIT: USDC in Token umwandeln (Ausgabe)
· MERGE: Token in USDC umwandeln (Einnahme)
· MAKER_REBATE: Maker-Rückvergütung (Einnahme)
· REWARD: Belohnungen / Airdrops (Einnahme)
· Datenquelle:
GET /activity?user=
&limit=500, mit end-Parameter paginieren, alles abrufen und nach Typ summieren.· Positionswert:
GET /positions?user=
, Größe × aktueller Preis.· Cross-Check:
Vergleiche die berechneten Ergebnisse mit der Polymarket-Ranking-API (lb-api.polymarket.com/profit?window=all&address=X). Differenz < $10 gilt als akzeptabel. Abweichungen kommen durch Schwankungen im Positionswert.
Nach der Berechnung mit der Bargeldfluss-Methode, Cross-Check mit der Ranking-API:
swisstony: Bargeldfluss +$5,601,000, Ranking +$5,601,000, Differenz < $10
kch123: Bargeldfluss +$11,396,000, Ranking +$11,396,000, Differenz < $10
gmanas: Bargeldfluss +$5,024,000, Ranking +$5,024,000, Differenz < $10
Alle drei Adressen weichen weniger als 10 USD ab, die Differenz ist auf Schwankungen im Positionswert zurückzuführen.
Nachdem ich diese Methode verifiziert habe, habe ich sie genutzt, um die echten Gewinne und Verluste von hunderten Top-Adressen zu analysieren. Das ist eine andere Hausnummer.
SUM(cashPnl) aus /positions → Funktioniert nicht, da es den realisierten Gewinn/Verlust nicht enthält, Vorzeichen können vertauscht sein.
Summe des makerPnl-Feldes → Funktioniert nicht, stimmt nicht mit den on-chain Cashflows überein.
Nach txHash deduplizieren → Funktioniert nicht, bei Beträgen über 100 USD werden echte Fills gelöscht.
Offset-Paginierung + Summierung → Funktioniert nicht, Daten werden abgeschnitten, bei mehr als 3000 Einträgen Fehler.
Data API Bargeldfluss-Methode → Derzeit die zuverlässigste, < $10 Abweichung.
Der erste Schritt beim Quantitative Trading ist nicht, Alpha zu suchen. Sondern sicherzustellen, dass du richtig rechnest.
Alle oben genannten Fehler basieren auf realen Erfahrungen, nicht auf theoretischer Überlegung. Die PM-API kann ihr Verhalten jederzeit ändern, daher empfiehlt es sich, regelmäßig mit der Ranking-API zu cross-checken.
Original-Link
Klicke hier, um mehr über die Rhythmik von BlockBeats zu erfahren und offene Stellen zu sehen.
Willkommen im offiziellen Telegram-Community von BlockBeats:
Telegram Abonnement-Gruppe: https://t.me/theblockbeats
Telegram Diskussionsgruppe: https://t.me/BlockBeats_App
Twitter Offiziell: https://twitter.com/BlockBeatsAsia
Verwandte Artikel
Konto mit 41% Gewinnrate kauft $103K Bayern-München-Siegesskontrakte auf Polymarket vor dem Halbfinale der Champions League am 7. Mai
Die US-Marktrendite von Polymarket bleibt hinter der Erwartung zurück, CEO Justin Hertzberg wird als bloße Nominalfigur wahrgenommen
Blockchain.com startet SnapMarkets vor dem Hintergrund eines Anstiegs bei Prognosemärkten
Prophet bringt heute einen KI-gestützten Prediction-Market mit einer Live-Trading-Tranche im Wert von 10.000 US-Dollar an den Start
MegaETH: Die erwartete First-Day-FDV liegt zwischen 1,5 Milliarden US-Dollar und 2 Milliarden US-Dollar; die Gate Prediction Market zeigt