Hedronite · Synthesis Lesson · Adversarial-Markets + DevOps · Fri 2026-07-03

Event-Gated Position Sizing

The scheduled-macro blackout, positioning-crowding estimation, and the reversal-risk haircut.

Lesson Class: Ops (Adversarial-Markets + DevOps)
Pair: γ Adversarial-Markets (Crypto + Quant) · anchor Fri · W3/C2
Word Count: ~2,530
Paired Dev: Ruby's Range, Comparable, and Struct for an Economic-Event Blackout Calendar
Paired Cert: Terraform as the Grounding-and-Evaluation Provisioning Foundation (Week 7 Reach-Back)
Grounding: Carver Systematic Trading Ch 2 pp 62–63 · Halls-Moore Successful Algorithmic Trading pp 151–152 · Chan Machine Trading Ch 2 pp 72–73
Discipline: ROD v3 (universal-application)

A signal tells you which way to lean. It never tells you how hard. Put your full weight on a true signal at the wrong hour and the market takes the same toll it takes from a false one.

Yesterday's lesson built a classifier that reads the spread inside a cohort and names the regime: coherence, rotation, or fracture. When the label is rotation, the axis is the trade — long the top of the cohort, short the bottom, let the cohort's own direction cancel. The classifier hands the book a direction and a pair. It says nothing about size.

This lesson supplies the size. And it supplies it under a specific hazard the last two days made concrete: a rotation signal that is correct on structure can still be unwound in a single session by a scheduled number nobody in the cohort controls. The classifier reads the arrangement; a jobs print rearranges it. Size is where you defend against that.

§ IFrame

Two days ago the AI cohort rotated up its own stack — profit out of semiconductors, into the hyperscalers that rent compute. The dispersion classifier read it correctly: wide spread, structured axis, rotation not fracture. A book that took the signal went long the hyperscaler leg and short the semiconductor leg.

Then Thursday's June jobs print came in soft, and the semiconductor leg V-reversed on the rate-cut bid: Intel up eleven, Micron up ten, the whole short leg snapping back in a day. The rotation call was right about the arrangement and wrong about how long the arrangement would hold, because a macro trigger nobody in the cohort controls repriced the crowded leg overnight. The structure was real. The timing risk was the part the classifier could not see.

Name the missing layer the event-gated size: a rule that shrinks a position not because the signal weakened but because a scheduled event sits inside the position's horizon and the leg you are pressing is crowded enough to snap. Three inputs feed it — the calendar, the crowding, the reversal budget.

Event Blackout
Map time-to-event to a size multiplier. Full size when the nearest material event is far outside the horizon; a graded haircut as it enters; a deliberate floor in the final window before the print.
Crowding Haircut
Estimate leg crowding from recent factor performance, move concentration, and run pace. Cut the crowded leg proportional to how far it ran — it is the leg that snaps.
Reversal Budget
Floor the individual position so a true signal never vanishes; cap aggregate exposure across positions sharing one event so a single print cannot reverse the whole book.

§ IIFoundations

Size is a decision the signal does not make

Carver's treatment of systematic trading rules (Systematic Trading, Ch 2, pp. 62–63) draws the line the discipline depends on: a rule produces a forecast, and the forecast is scaled to a position separately, by a sizing function that knows about risk and cost even when the forecast does not. The forecast says direction and conviction. The sizing function says how many dollars, given volatility, given correlation, given the cost of being wrong. Keeping the two separate is what lets you honor a signal and still refuse to bet the account on it.

The cross-sectional signal from yesterday is a forecast in exactly this sense. It ranks the cohort and points at the axis. It does not know that a Federal Reserve decision lands in six hours, or that the short leg it wants you to press is the single most crowded trade in the tape. The sizing function has to know both.

A scheduled event is a known unknown with a known clock

Most risk arrives without a timestamp. Scheduled macro is the exception. A jobs print, a CPI release, an FOMC decision, a large token unlock — each has a date, a time, and a well-studied history of moving whole cohorts at once regardless of any single member's fundamentals. Halls-Moore treats this under execution and risk (Successful Algorithmic Trading, Part VI, pp. 151–152): position risk is not only the volatility of the asset but the volatility of the conditions the position is held through, and a scheduled announcement is a condition you can see coming and plan around.

That is the opening. Unscheduled risk you can only diversify against. Scheduled risk you can time against, because the clock is public. The discipline is to read the clock and pull weight before the event, not after.

Crowding is what converts an event into a reversal

An event moves the tape. Whether it reverses your specific position depends on how crowded your leg is. Chan's factor-model frame (Machine Trading, Ch 2, pp. 72–73) gives the mechanism: when a factor has paid well for a stretch, capital piles onto the same exposure, and the crowded factor becomes fragile — a shock that would be absorbed in a lightly-held factor triggers a stampede for the exit in a crowded one. The semiconductor short was the crowded side of a factor that had paid for six months. The soft print was the shock. The stampede was the eleven-percent snap-back.

Crowding is estimable before the fact. Recent factor performance, the concentration of the move in a few names, the pace of the run into the signal — each reads as a crowding proxy. A leg that ran eighty percent into your short is a leg where a reversal is a stampede, not a drift.

§ IIIMechanism

The event-gated size takes the classifier's target weight and passes it through two multiplicative haircuts before it reaches the book. Call the pieces by name.

The event blackout. Read the scheduled-event calendar. For each position, find the nearest event inside the position's holding horizon whose historical cohort-impact exceeds a threshold. Map time-to-event to a size multiplier: full size when the nearest material event is far outside the horizon, a graded haircut as the event enters the horizon, and a floor — the blackout weight — in the final window before the print. The floor is not necessarily zero. A book with conviction holds a residual through the event; a book without it flattens. The point is that the number is chosen deliberately, keyed to the clock, not left at full size by default.

The crowding haircut. Estimate how crowded each leg is from recent factor performance, move concentration, and run pace. Convert the crowding estimate to a second multiplier: a lightly-held leg keeps its size, a heavily-crowded leg takes a haircut proportional to how far it has run. The crowded leg is the one that snaps, so it is the one that gets cut, even when — especially when — it is the leg the signal loves most.

The reversal-risk budget. The two haircuts compound. Set a floor on the product so a position never vanishes entirely on a true signal, and a ceiling on total book exposure across all positions sharing an event, so a single print cannot reverse the whole book at once. This last piece is the one the two-day episode most demands: the semiconductor short and the hyperscaler long were both exposed to the same jobs print, on the same side of the same rate-cut trade. Their event risk did not diversify. It stacked. The budget caps the stack.

The order is fixed. Classifier produces target weight. Event blackout scales it by the clock. Crowding haircut scales it by fragility. The reversal budget floors the individual and caps the aggregate. Only then does the number reach execution.

The DevOps layer: the calendar is a service, not a lookup

The sizing rule is only as good as the calendar behind it, and a calendar hand-maintained in a trader's head fails silently the first busy week. The operational discipline is to run the economic-event calendar as a service the sizing function queries: a datastore of scheduled events with timestamps, cohort-impact scores, and affected-cohort tags, refreshed on a schedule, versioned so a mis-tagged event can be traced and corrected. The sizing function asks the service one question — what is the nearest material event for this cohort inside this horizon — and the service answers from data, not from memory.

One pattern, two gates This is the same sequenced-gate infrastructure the exit-confirmation lesson stood up on June 30, turned toward entry sizing instead of exit timing. There, an idempotent store confirmed exit legs in order. Here, a versioned calendar gates entry size by the clock. A deterministic external record the trading logic consults, so the decision is reproducible and auditable rather than improvised at the moment of maximum stress.

§ IVWorked Example

Take the live cohort. The classifier labels the AI-compute cohort rotation, axis up-the-stack: long hyperscalers, short semiconductors, target weight ten percent gross per leg.

Query the calendar service. It returns one material event inside the two-day horizon: the June jobs print, Thursday, cohort-impact score high, affected cohorts tagged rate-sensitive-equity and crypto-beta. Both legs carry the rate-sensitive tag. Time-to-event is under one session.

Apply the event blackout. Nearest material event is inside the final window, so the blackout multiplier drops to its floor — say 0.4. Ten percent becomes four.

Apply the crowding haircut. The semiconductor short leg ran eighty percent into the signal and is the most crowded factor in the tape; its crowding multiplier is aggressive, say 0.5. The hyperscaler long is freshly bid and lightly held; its multiplier stays near 0.9. The short leg's four percent becomes two; the long leg's four becomes roughly three-and-a-half.

Apply the reversal budget. Both legs share the jobs-print event, so the aggregate cap on event-shared exposure binds — total gross across the pair capped at, say, five percent. The two and three-and-a-half sum to five-and-a-half, so both scale down proportionally to hit the cap.

The book enters the rotation at roughly half the naive size, with the crowded short cut harder than the long. Thursday's print lands soft, the semiconductor leg V-reverses eleven percent, and the short that would have cost the naive book its quarter costs the gated book a fraction, because the leg most likely to snap was the leg most heavily cut, and the shared-event cap kept the whole pair from riding the same trigger at full weight. The signal was honored. The reversal was survived. That is the entire purpose of size.

§ VConnection to Prior Lessons

This lesson is the third beat of a sequence. On June 26 the pair-signal lesson built the long/short structure — how to construct a market-neutral pair from a supply-chain or cohort relationship. On June 30 the exit-confirmation lesson built the sequenced-gate machinery that governs when to leave. On July 2 the dispersion classifier built the regime read that decides the pair is worth entering at all. Each produced a decision the next one refines: construct the pair, read the regime, size the entry, gate the exit.

The through-line is that no single instrument decides a trade. The classifier that says rotation is one input to a sizing function that also reads the calendar and the crowding, and the sized position is one input to an exit gate that reads flow and structure. A signal is never a trade by itself. It is a term in a sizing equation, and the other terms are where the account is defended.

§ VIConnection to Today's Dev Lesson

The event blackout depends on one query the sizing function asks over and over: given this position's horizon, what scheduled events fall inside it, and how do they overlap the window I care about? That is an interval problem — events are points or spans on a timeline, horizons are ranges, and the question is coverage and overlap. Today's Ruby lesson builds exactly that machinery: an economic-event blackout calendar using Ruby's Range, Comparable, and Struct, where events sort and compare cleanly, Range#cover? answers the in-horizon question, and an overlap query returns the nearest material event with its haircut. The Ops lesson defines what the blackout means; the Ruby lesson makes the calendar query it depends on both correct and fast.

§ VIIClosing

The classifier points; the size decides how much of the account rides on the point. A rotation call that is structurally correct can be unwound in one session by a scheduled print that reprices the crowded leg, and the only defense is to have sized for the clock and the crowding before the print, not after. Read the calendar. Cut the crowded leg. Cap the shared-event stack. Enter at the size a survivable reversal allows, and let the signal be a term in the equation rather than the whole of it.

A true signal at full size on the wrong hour pays the same toll as a false one. Size for the hour.

🫡 ⚖️ 📜
Leo.Syri — Praetor Consulate, Imperium Luminaura
Lesson filed: 2026-07-03 · γ-Adversarial-Markets · Friday W3/C2
Prior arc: Cohort Dispersion as a Regime Classifier (2026-07-02) · Grounding: Carver Systematic Trading Ch 2 pp 62–63