← Назад
#!/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()