← Back
#!/usr/bin/env python3
"""
Manual script to cancel all stale unverified/pending orders.
Run: python cancel_stale.py
Frees locked capital from orders that will never fill.
"""
import sys
import os

# Ensure project root is in path
sys.path.insert(0, os.path.dirname(__file__))

from loguru import logger

# Setup logging to stdout
logger.remove()
logger.add(sys.stdout, level="INFO", colorize=True)

import db
from resolver import cancel_stale_orders

def main():
    db.init_db()

    # Show current stale orders first
    conn = db.get_conn()
    pending = conn.execute("""
        SELECT t.id, t.order_id, t.price, t.size, t.status, t.created_at, m.question
        FROM trades t
        LEFT JOIN markets m ON t.market_id = m.id
        WHERE t.status IN ('pending', 'unverified') AND t.outcome IS NULL AND t.dry_run = 0
    """).fetchall()
    conn.close()

    if not pending:
        logger.info("No pending/unverified orders found. Nothing to cancel.")
        return

    total_locked = sum(t["size"] for t in pending)
    logger.info(f"Found {len(pending)} pending/unverified orders (${total_locked:.2f} locked):")
    for t in pending:
        q = (t["question"] or "")[:60]
        logger.info(f"  #{t['id']} | {t['status']:10s} | ${t['size']:.2f} @ ${t['price']:.2f} | {t['created_at']} | {q}")

    # Cancel all stale orders (0 min age = cancel everything pending)
    logger.info("")
    logger.info("Cancelling all pending/unverified orders...")
    cancelled = cancel_stale_orders(max_age_minutes=0)

    logger.info(f"Done: {cancelled}/{len(pending)} orders cancelled")
    if cancelled > 0:
        logger.info(f"Capital freed: check Polymarket wallet for updated balance")


if __name__ == "__main__":
    main()

📜 Git History

8fca132chore: initial commit — version control setup5 weeks ago
Show last diff
Loading...