whales demoted to volume class everywhere + status vocabulary in the backtest feed

- all three whales -> volume (conviction-only, 4%/bet); truth-scored 30d
  replay IMPROVES $2.5k -> $10.5k (+946%, 230W/54L/88R): follow-all at 12%
  was burning bankroll on low-conviction in-play scraps. Demoted wallets get
  floors PINNED from trusted cache p80 (Stavenson $4,760 / 0x4bFb $1,090 /
  ArbTrader $168) — their dust-heavy recent books auto-derive uselessly low.
- portfolio feed rows now carry status won/lost/refund (missed too),
  mirroring the live bot; no 'sold' by design (hold-to-resolution replay
  never exits early). Dashboard renders refunds amber with W/L/R counts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jaxperro
2026-07-07 02:59:13 -04:00
parent 7db6524055
commit 3674d2f099
3 changed files with 18 additions and 5 deletions
+3 -3
View File
@@ -33,17 +33,17 @@
{
"wallet": "0xf5fe759cece500f58a431ef8dacea321f6e3e23d",
"name": "Stavenson",
"class": "whale"
"class": "volume"
},
{
"wallet": "0x73afc8160c17830c0c7281a7bf570c871455b880",
"name": "0x4bFb-whale",
"class": "whale"
"class": "volume"
},
{
"wallet": "0x72e1597864456eda62878413cf3e60c332e4a45d",
"name": "ArbTrader",
"class": "whale"
"class": "volume"
}
]
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+14 -1
View File
@@ -421,10 +421,23 @@ def main():
"current": [{"title": c.get("title", ""), "name": c["name"], "outcome": c.get("outcome", ""),
"stake": c.get("stake"), "val": round(c["val"], 2), "pnl": round(c["pnl"], 2),
"end": c.get("end")} for c in sorted(current, key=lambda c: c["entry_t"])],
# status mirrors the live bot's vocabulary: won / lost / refund (50/50
# scratch — pays $0.50/share, so "not a win" can still be P&L-positive
# below 50¢ entries). No "sold" here BY DESIGN: this replay models
# hold-to-resolution, so it never exits early — only the live bot,
# which mirrors real exits, can show SOLD.
"resolved": [{"title": r.get("title", ""), "name": r["name"], "won": r["won"],
"status": ("refund" if r.get("refund")
else "won" if r["won"] else "lost"),
"stake": r.get("stake"), "pnl": round(r["pnl"], 2), "date": r.get("res_t")}
for r in resolved[:60]],
"missed": [{"title": m.get("title", ""), "name": m["name"], "won": m.get("won"),
"missed": [{"title": m.get("title", ""), "name": m["name"],
"won": (None if "won" not in m
else (m["won"] if m.get("wp") is None else m["wp"] > 0.5)),
"status": (None if "won" not in m
else "refund" if m.get("wp") == 0.5
else "won" if (m["won"] if m.get("wp") is None else m["wp"] > 0.5)
else "lost"),
"stake": m.get("stake"), "capped": bool(m.get("capped")),
"pnl": round(m["pnl"], 2), "date": m.get("res_t")}
for m in missed[:60]],