Skip to content

Releases: pm-trade/pmt

pmtrader v0.9.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 02:15

A new standalone shadow service, and three grading bugs that each misreported the ledger.

Fixed

  • 4h windows were missing from the record. A strict slug parser demanded a minutes token, so six settled 4h wins (+$164.35) silently never reached the ledger. All-time now matches the raw wallet walk to the cent.
  • Silent losses rode forever. A losing position pays $0 and posts no wallet row, so a wallet-only tally books every win and can never book a loss — three resolved-lost windows sat "riding" for up to 25h, hiding −$272.35. Grading now falls back to the market's own resolution. The tie-break that should have caught this never fired because the gamma lookup omitted closed=true, and gamma defaults it to false: every settled window answered "no such market", which parsed as "not resolved yet".
  • A zero-share $0 redeem is a stub, not a payout. Placeholder rows posted beside two resolution-confirmed wins were read as the wallet's own $0 settlement and graded both windows as full losses.
  • crypto watch no longer drops tape records when the terminal is squeezed, and merges eval/gate lines across symbols instead of per-symbol.

Added

  • pilot2 — a standalone shadow service with its own entry point, its own state and its own risk law; not a pmt crypto subcommand. It prices the 5m majors from a calibrated terminal model blended with the de-vigged book and logs every trade it would have made. Shadow by default: going live needs two explicit switches, is limited to its own series list, and refuses outright on any series an engine already owns.
  • crypto outcomes banks the exchange's settled outcome into the corpus, ranked above chainlink/book inference. On the first backfill it upgraded 709 inferred outcomes and disagreed with two of them.
  • python -m polymarket.prints harvests the public print tape continuously rather than once, rotated by print time and bounded by a retention window.
  • crypto watch is one table — arms, positions and recent windows folded together, with live odds on every position row until it grades.
  • crypto arm --settle-tw passes the measured 60s settlement width, and 5m stream-fed arms raise to it automatically; grading follows the same width.

pmengine v0.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 02:28

Public flavor — private strategies not included. This build carries only the in-tree example strategy; it is not the binary the live engine runs.

Two engine-halting bugs, and the tape now reaches a remote operator.

Fixed

  • The circuit breaker halted on a paper loss it could not price. It judged on realized + unrealized, but taker fills never write realized, and mid_price returns nothing for a one-sided book — so a resolving market's mark froze, the next position reconcile re-derived a doubling loss against that stale price, and the breaker tripped at −412 while the session was up $29. It now reads realized P&L in full plus marks on only the positions carrying a fresh, tradeable price, and reconcile moves share counts without inventing a re-mark.
  • Cancel storm. A cancel the CLOB refused terminally — already cancelled, already matched, not found — was read as "still live" and re-sent every 50ms tick: 16,028 round trips against 195 dead order ids, with 97% of batch cancels retiring nothing. A terminal answer now retires the order once; only transient failures retry, backing off 0.5s to a 30s ceiling. The worst observed window drops from 416 refusals to at most 5 calls.
  • Cancel/replace churn on coarse-tick markets. The keep-vs-replace check compared the strategy's raw model price against the order's wire price — two different grids — so a sub-tick drift cancelled and re-posted the identical wire order, buying nothing and paying queue position.
  • Position reconcile fetches the account once per pass instead of once per subscribed token. Sixteen sequential whole-account downloads every ~1.5s were starving the control plane for up to 9s and running the tick loop 22% behind schedule.

Added

  • GET /tape?since=&limit= on the control plane — a bounded reverse-tail of the eval/fire tape, so pmt crypto watch renders against an engine on another host. It never enters the trading loop, and is capped twice: at most 512KB read off the tail and at most limit records parsed, so cost does not grow with the tape.
  • PM_SIGNATURE_TYPE=3 for deposit wallets (EIP-1271 / ERC-7739). Frozen golden vectors prove the Rust order path byte-identical to the Python reference offline. An unrecognised value now warns instead of silently becoming an EOA.
  • PMENGINE_SERIES_ALLOWLIST — the slug prefixes this engine may trade. Two engines under one operator account share a book, so one can match the other's resting quote; arms outside the list are now refused. Unset keeps prior behaviour byte-for-byte.
  • replay --trace writes a decision trace per tape record, and an unknown tunables key is a hard error rather than a silent fall back to the default.

pmtrader v0.8.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 19:01

pmtrader v0.7.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 09:37

pmtrader v0.6.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 07:19

pmtrader v0.5.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 01:36

pmengine v0.5.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 19:12

Public flavor — private strategies not included. This build
carries only the in-tree example strategy; it is not the binary
the live engine runs.

Full Changelog: pmengine-v0.4.0...pmengine-v0.5.0

pmengine v0.4.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 09:50

pmengine v0.3.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 07:30

pmengine v0.2.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 01:48