feat: order management (cancel/amend), stale order cleanup before market close, enriched LLM reasoning (RSI+BTC+regime), fleet dashboard with SVG charts/gauges/donuts

This commit is contained in:
drjones
2026-08-02 20:10:24 -07:00
parent 8e860361ec
commit c817216ab1
9 changed files with 301 additions and 26 deletions

30
bot.py
View File

@@ -97,6 +97,15 @@ class Kalshi:
"post_only": False, "reduce_only": False}
if dry: return {"simulated": True, "order": body}
return self.req("POST", "/portfolio/events/orders", json=body)
def cancel_order(self, order_id, dry=False):
"""Cancel an open order by ID."""
if dry: return {"simulated": True, "cancelled": order_id}
return self.req("DELETE", f"/portfolio/events/orders/{order_id}")
def amend_order(self, order_id, new_price_cents, dry=False):
"""Amend an existing order's price."""
body = {"price": f"{new_price_cents/100:.4f}"}
if dry: return {"simulated": True, "amended": order_id}
return self.req("POST", f"/portfolio/events/orders/{order_id}/amend", json=body)
# ───────── btc price feed ─────────
def btc_price(coin="BTC"):
@@ -575,6 +584,27 @@ def run():
try:
resolve_bets(kx, conn)
adapt_controls(conn, cfg)
# cancel stale unfilled orders close to market expiration
try:
open_orders = conn.execute(
"SELECT id, ticker, order_id, side, price_cents FROM orders WHERE status IN ('placed','posted') AND dry=0"
).fetchall()
for oid, ticker, koid, side, px in open_orders:
try:
m = kx.req("GET", f"/markets/{ticker}")
ct = m.get("close_time","")
if ct:
close_ts = datetime.fromisoformat(ct.replace("Z","+00:00")).timestamp()
mins_left = (close_ts - time.time())/60
if mins_left < 1.5:
kx.cancel_order(koid, cfg.get("dry_run", False))
conn.execute("UPDATE orders SET status='cancelled' WHERE id=?", (oid,))
conn.commit()
log_event(conn, "info", f"CANCEL stale {ticker} {side}@{px}¢ (mins_left={mins_left:.1f})")
except Exception:
pass
except Exception:
pass
p = btc_price(cfg.get("coin", "BTC"))
if p:
conn.execute("INSERT INTO ticks VALUES (?,?)", (time.time(), p))