068b2adc75
Composable Agent Skills (SKILL.md format) for Polymarket prediction market trading. Includes scanner, analyzer, monitor, paper trader, strategy advisor, and live executor. All tested against live Polymarket APIs. Security audited with all HIGH/MEDIUM findings resolved. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.1 KiB
Python
Executable File
74 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Fetch the full order book for a Polymarket token from the CLOB API."""
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
from py_clob_client.client import ClobClient
|
|
|
|
CLOB_HOST = "https://clob.polymarket.com"
|
|
|
|
|
|
def fetch_orderbook(token_id, depth=10):
|
|
"""Fetch order book for a token and return structured data."""
|
|
client = ClobClient(CLOB_HOST)
|
|
ob = client.get_order_book(token_id)
|
|
|
|
bids = [{"price": float(b.price), "size": float(b.size)} for b in ob.bids]
|
|
asks = [{"price": float(a.price), "size": float(a.size)} for a in ob.asks]
|
|
|
|
# Sort: bids descending by price, asks ascending by price
|
|
bids.sort(key=lambda x: x["price"], reverse=True)
|
|
asks.sort(key=lambda x: x["price"])
|
|
|
|
best_bid = bids[0]["price"] if bids else 0.0
|
|
best_ask = asks[0]["price"] if asks else 1.0
|
|
spread = round(best_ask - best_bid, 6)
|
|
midpoint = round((best_ask + best_bid) / 2, 6)
|
|
|
|
bid_depth = round(sum(b["size"] for b in bids), 2)
|
|
ask_depth = round(sum(a["size"] for a in asks), 2)
|
|
|
|
return {
|
|
"market": ob.market,
|
|
"asset_id": ob.asset_id,
|
|
"bids": bids[:depth],
|
|
"asks": asks[:depth],
|
|
"spread": spread,
|
|
"midpoint": midpoint,
|
|
"best_bid": best_bid,
|
|
"best_ask": best_ask,
|
|
"bid_depth": bid_depth,
|
|
"ask_depth": ask_depth,
|
|
"total_bid_levels": len(bids),
|
|
"total_ask_levels": len(asks),
|
|
}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Fetch order book for a Polymarket token"
|
|
)
|
|
parser.add_argument(
|
|
"--token-id", type=str, required=True,
|
|
help="CLOB token ID (from scan_markets.py output)"
|
|
)
|
|
parser.add_argument(
|
|
"--depth", type=int, default=10,
|
|
help="Number of price levels to show (default 10)"
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
result = fetch_orderbook(args.token_id, depth=args.depth)
|
|
print(json.dumps(result, indent=2))
|
|
except Exception as e:
|
|
print(json.dumps({"error": str(e)}), file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|