--- name: desk-signal-scan description: How the desk finds and times opportunities without being asked - the Market Analyst's universe scan across every trading market, the Research Analyst's T-minus catalyst alerts, the Strategist's live rule monitors, the shared signals file they all write to, the four clocks that decide whether a fired rule is actionable now, and how a signal becomes a proposal or expires. Use when setting up routines, when the user asks what the desk is watching, or when a signal needs to be turned into a ticket. license: MIT metadata: version: 1.0.0 author: Mendurim category: desk --- # Signal scan The desk's earlier versions waited for the user to bring an idea. This skill is how the desk brings the idea to the user, at the bar it matters, without any Bot forecasting anything. Three producers write to one file; the Desk Lead reads it; the four clocks decide the tier. ## The signals file `/workspace/trading-desk/signals/YYYY-MM-DD.md`, UTC, append-only, one line block per item. Chat is for exceptions; this file is the steady flow. Every block carries a kind, a UTC time, a source, the numbers and their arithmetic, and a `next:` owner. | Kind | Producer | When | | --- | --- | --- | | `SCAN` | Market Analyst | on the scan routine, hourly by default | | `CATALYST` | Research Analyst | T-72h, T-24h, T-1h before each calendar entry on a held, SA-covered or watched market | | `RULE FIRED` | Strategist | on the closed bar where a frozen rule's condition is true | | `RULE STALE` | Strategist | one bar after a fire with no fill | | `WATCH COULD NOT TELL` | any watch owner | when a feed or read fails past its staleness bound | Nothing in this file is a recommendation. A `RULE FIRED` block is a fact about a frozen rule plus that rule's measured record. ## The universe scan Owner: Market Analyst. Inputs, one read per endpoint per market per run, against the cached `data/exchangeInfo.json` list of `status: trading` markets: ``` /v2/ticker/24hr price, change, volume /v2/premiumIndex funding rate, next funding time /v2/openInterest OI in base units (notional at mark) /v2/klines?interval=1h 480 bars for ATR20 (daily) via aggregation, or interval=1d 30 bars /v2/depth?limit=1000 only for the top ten by the first three metrics, to save weight ``` Per market, four metrics with defaults the user may tighten in `desk.md`: | Metric | Computation | Flag when | | --- | --- | --- | | funding extreme | percentile of current hourly rate within the market's own 30-day history (`data/funding/.csv`, appended each run) | ≥ 95th or ≤ 5th | | positioning | 24h OI change vs 24h price change | OI moves ≥ 8% with price inside ±1%, or OI and price diverge by sign with OI ≥ 10% | | range expansion | today's range / ATR20 | ≥ 2.0 | | depth shift | size within 10 bps vs its 7-day median (`data/depth/.csv`) | ≤ 0.6× or ≥ 1.8× | Rank by count of flags, then by the largest percentile deviation. Append the top three to five. A run with nothing flagged appends `SCAN |