The Trader Behind the Bot
PolyEdge scored 65/100 and sat. Knox traded manually and went 3 for 3. The gap between those two outcomes reveals the exact mechanisms the model was missing.

The most useful thing an AI trading bot can do is fail. Not crash — fail precisely, in ways you can diagnose.
Today PolyEdge scored 65/100 on three consecutive setups and declined to trade all three. The 80-point MODERATE threshold held firm. The bot sat. I traded all three manually and went 3 for 3. Now I'm shipping two PRs that will close the gaps the bot just revealed.
This is how you improve a model that has real money behind it.
What the Bot Saw vs. What I Saw
PolyEdge's scoring architecture pulls from nine factors — InDecision Framework as the backbone, fed by live Coinbase price data, MACD readings across timeframes, volume, Chainlink oracle price references, and window timing context. When the 9-factor composite lands below 80, the bot skips. That threshold exists because anything below it historically produces negative expected value after Polymarket's fee structure.
Today's BTC daily candle was a statement. Feb 25 opened with a hammer reversal, followed by a full engulfing bull candle. BTC ran +6.67% on the day, closing at $68,336. The daily structure was unambiguous.
The bot saw the daily momentum. score_momentum uses multi-period rate-of-change across timeframes — it registered the bullish macro signal correctly. What it couldn't do was translate that macro read into a precise intra-window position.
The model's blind spot wasn't the trend. It was temporal resolution — the difference between knowing BTC is up 6.67% on the day and knowing BTC is down $206 from the open of this specific 15-minute window.
That distinction cost the bot three trades it should have owned.
InDecision's six factors — Daily Pattern, Volume, Timeframe Alignment, Technical Confluence, Market Timing, and Risk Context — are built for directional bias over hours and days. They answer the question: does this asset have a confirmed direction? What they don't answer is: within this specific 15-minute window, how far has price already moved from the open, and which direction is it still running? Those are different questions operating on a different timescale. The model was answering the first one correctly while the second one went unmeasured entirely.
Three Trades, Three Mechanisms
Trade 1: BTC UP, 11:45AM–12:00PM ET. BTC was running on the +6.67% daily candle. The 1-hour context was bullish across the entire market — BTC, ETH, SOL, and XRP were all showing 100% UP simultaneously on the Polymarket 1h contracts. This is not a subtle signal. Four correlated assets with full directional alignment on the 1-hour timeframe is a structural read, not noise.
I bought UP at a 74¢ average across 14 shares. Total cost: $9.90. The window closed UP. Net gain: +$3.75, a 37.87% return on the position.
Trade 2: BTC DOWN, 12:00–12:15PM ET. The daily trend was still bullish — BTC was +6.67% on the day. The obvious read from daily structure was "stay long." That's the read the bot had. The intra-window read was different.
BTC opened the 12:00 window at $68,301. By the time I was evaluating the trade, it had already moved to $68,095 — a −$206 move, −0.30% from window open. That delta was visible in the price feed. The market was pricing DOWN at 53¢, implying roughly 47% probability of a down close. My read, based on the intra-window trajectory, was closer to 70%.
Bought DOWN at 53¢, 9 shares, $4.92 cost. Won +$3.48, a 70.79% return. The bot scored the setup as a low-conviction UP (daily trend bias) and skipped. The mechanism it was missing: price relative to window open.
The window-level trajectory was directionally unambiguous. The −$206 move from the window open had already established a clear intra-window trend — BTC wasn't hovering, it was actively running. The delta between what the market implied (47% probability) and what the price trajectory showed (~70%) represented 23 points of mispriced probability. That isn't edge requiring sophisticated analysis. It's edge left on the table by a model looking at the wrong clock.
Trade 3: Predictive UP on a future 15m window. The third trade required a different kind of information entirely — one the bot literally cannot access. While the 12:00 window was still active, Polymarket had the 12:15, 12:30, and 12:45 windows open simultaneously, each at discounted odds. The 12:15 UP token was trading at 43¢. The four-asset 1h alignment was still intact. I bought the future window before it became the current window.
Won. The pre-market discount — 43¢ vs. what UP would have been priced at window open — was the entire edge.
Polymarket's simultaneous multi-window availability creates a structural pricing inefficiency: future windows are discounted against current uncertainty. When 1-hour context is fully aligned across four correlated assets, buying the next window at 43¢ is not a speculative bet. It's paying below fair value for a signal you already have.
The Two PRs
These weren't post-hoc rationalizations. The gaps were observable in the bot's scoring output — specifically what factors were present vs. absent when it produced a 65/100 and declined.
feat/window-momentum adds a new scoring factor: price delta from window open to current price. If BTC is sitting −0.30% from the open of the current window and the evaluation is scoring a DOWN bet, that's a structural alignment the model should weight. Score range: −15 points (window moving against the thesis) to +20 points (window open moving in the thesis direction). This is the mechanism that would have caught Trade 2.
feat/predictive-stacking addresses the discovery problem. The bot currently only resolves the active window. Polymarket exposes up to three future 15-minute windows simultaneously, each at discounted pre-market odds. The PR adds a secondary resolution pass: when 1-hour trend context scores BULLISH above a confidence threshold, the bot evaluates future windows with an odds gate (skip if already priced >55¢). Trade 3 was 43¢. That passes the gate.
Window-momentum and predictive-stacking are not overlapping features — they address separate layers of the model's blind spot. Window-momentum fixes intra-window resolution. Predictive-stacking fixes temporal discovery range. Both need thorough regression testing before they go into the live scoring path.
What a Human Knows That the Model Doesn't (Yet)
The 65/100 score wasn't wrong given what the model could see. The macro signal was real. The daily trend was real. On daily-timeframe data alone, a 65 is defensible — not enough conviction, skip.
What broke the model was context it wasn't collecting: the window's own price trajectory from its open, and the existence of future windows sitting at pre-market discounts. Neither of those inputs existed in the feature set. The bot scored off information it had. I scored off information it didn't have.
That's the actual lesson from today. Not that the bot is insufficient, but that every human override that produces a win is a labeled training example for which features were missing. Three wins today means three mechanisms to encode. The model gap was specific, measurable, and fixable — and it took watching the bot sit on three live setups to surface the exact shape of the blind spot.
PolyEdge v4.1 runs with 1063 tests and 93% coverage. Both PRs ship with full regression test suites — window-momentum with 29 new tests covering aligned/opposed moves across magnitude bands and odds discount gates, predictive-stacking adding coverage for the upcoming-window discovery path and the 55¢ odds gate. The coverage floor isn't bureaucratic overhead. It's the mechanism that makes iterating on a live trading system safe — every change is bounded, every edge case is named, and every regression is caught before it costs real money.
The model learns the same way every other model does: by being wrong in ways that are precise enough to correct.
The model learns the same way every other model does: by being wrong in ways that are precise enough to correct.
Explore the Invictus Labs Ecosystem
Follow the Signal
If this was useful, follow along. Daily intelligence across AI, crypto, and strategy — before the mainstream catches on.

From Framework to Signal: Building the InDecision API
The InDecision Framework ran for 7 years as a closed system — Python scorers feeding Discord and a trading bot. Turning it into a public API forced architectural decisions that changed how I think about signal infrastructure.

The Signals Were Real: InDecision Framework Hits 93% Win Rate in Live Markets
The bot was cycling every 2 minutes — its own watchdog killing it every 129 seconds. The signals inside were perfect: 86–100/100, 92% accuracy, calling direction while the market priced uncertainty at 50/50. One coding session fixed the infrastructure. The rest is on-chain.

Bitcoin Doesn't Fear Wars — It Front-Runs Them
Retail panics on geopolitical headlines. Institutions position ahead of them. The data from 20 major conflict events says the same thing every time — and right now, the signal is as clear as it gets.