Control how a market ticks, prototype

Table of Contents

Item Where
Prototype the prototype page
Gemini review the review
Group Market data prototypes
Successor Run the market

1. Summary

A feed's ticks used to be one number. They are now a regime: a mode (periodic, Poisson or Hawkes), a branching ratio and a decay that say how a cluster of ticks feeds itself, a sensitivity that says how hard the feed follows the market, and — one level up — a run-wide market state that a person can pin.

The controls exist in three surfaces that do not know about each other. This prototype argues how they should be managed before a fourth is added.

2. What we have

Surface What it offers What it cannot say
Feed editor (fxFeeds, irFeeds) the four columns as fields beside the rate whether the numbers produce a burst, and what the market is doing to them
Ticks panel, per feed the process and its mixture, the rate as one line anything about arrival: no mode, no clustering, no sensitivity
Shell synthetic regime get and pin the same, but readable and drivable by a person who knows the verbs
Prototype synthetic-feeds the tree, hero, summary, chart no arrival vocabulary at all

Three gaps follow.

  1. A number without a consequence. A branching ratio of 0.9 is a legal value that produces almost no clustering, and one of 0.99 produces bursts that the pipeline cannot keep up with. The editor shows neither.
  2. Two levels, one place. The market state is a property of the run and the sensitivity is a property of the row, but the only place both are visible together is a terminal.
  3. The screen's own rule. The screen standard says a node carries running, stopped or partial, and the editors behind it author one feed. It has no vocabulary for "this feed follows a market that is currently busy".

3. The journeys

A journey is one screen organised around a goal, and its steps draw the views they need; the rail is data. Three journeys cover this work.

3.1. J1: "See what a feed's ticks will look like"

Author opens a feed from the tree, and the editor's arrival section shows a sparkline of the gaps the current numbers produce — the same seeds the service would use — beside the fields. No state is committed to judge it.

3.1.1. Steps

  1. The feed, its pair and its rate.
  2. The regime, four fields and the gap preview.
  3. The market, where this feed sits against the run's state: its sensitivity and what the state does to it.

3.2. J2: "Set how the whole market behaves"

Operator opens the Market Simulator with no feed selected. The right-hand side is the run: the state in force, the multiplier, and a switch of auto, calm and active, with the time the pin was set and by whom.

3.2.1. Steps

  1. The run, its collections and how many feeds are live.
  2. The state, what is in force and whether a scenario pinned it.
  3. The consequence, the multiplier each feed is now scaled by, listed by asset class so a curve at 0.4 and a pair at 1.3 read side by side.

3.3. J3: "Test a fast market without waiting for one"

Tester pins the state, watches two feeds whose counts used to be independent move together, and releases the pin.

3.3.1. Steps

  1. Pin, from the panel, with the reason recorded like any other change.
  2. Observe, the run's counts per feed over a window, against the same window before the pin.
  3. Release, back to auto, with the same chart showing the fall back.

4. Three prototypes

4.1. A: inline, in the editor's arrival section

The four fields sit in the feed editor, and under them a small "what this produces" panel: a gap sparkline, the long-run rate, and the Fano factor of the gaps. The market state appears as one read-only line — "market: active ×2" — with a link to the panel.

For: one screen per feed, nothing new to learn, the consequence is where the choice is. Against: the run-wide state has no home; the same read-only line repeats in every editor.

4.2. B: a Market panel beside the tree

The Market Simulator gains a docked panel on the right: state, multiplier, the auto/calm/active switch, and the list of feeds by sensitivity. The feed editor keeps its four fields and gains nothing else.

For: the two levels are finally adjacent, and the run's state has one home. Against: a person editing one feed's clustering must look at two places to understand it.

4.3. C: one "Arrivals" journey screen

A single screen with a rail: the run (state, pin, multiplier), the feeds (a table of every feed's mode, ratio, decay, sensitivity and live rate), the preview (pick one row, see its gaps). The editor's four fields become read-only with "open in Arrivals".

For: every control in one place, and a table is the only shape that compares twenty feeds. Against: it puts the choice away from the row it belongs to, and adds a second place a rate is edited.

5. Decided: two views, not three variants

The first build conflated a feed's own view with the run's. They are different jobs and belong in different places.

  • The model is a field, not a tab. The tab carries a tick arrival model selector — periodic, Poisson or Hawkes — and the fields below it mean something for Hawkes. A fourth model joins that selector rather than a screen of its own.
  • Local, one row, in the feed's own Arrivals tab. A feed's arrival regime is edited and judged in a tab of its editor, beside the Instrument, Price behaviour and Provenance tabs it already has: the four fields, and a raster of that feed's ticks alone — one row, at the market's current state. Nothing here changes the market and nothing here shows another feed.
  • The tab is called Arrivals, not Hawkes. Two of the three modes are not Hawkes, and a person on a periodic feed would read a Hawkes tab as not theirs.
  • Global, every row, in a Market regime tab. The market is a property of the run, so it gets its own tab: the state in force, the multiplier, the auto/calm/active switch, who pinned it and why, and the raster of every live feed. The tab sets the market and reads the feeds; it edits no feed's clustering.
  • The raster's names are its axis, not a list. Rows follow the tree exactly, so a reader finds a feed by looking down the tree and across to the same row; the names are there because eight unlabelled rows cannot be read, and they are the only names on the tab.
  • No list of feeds on that tab. A table of each feed's mode, ratio, decay and sensitivity is a table of configs, and the feed list and the editors already are one; the raster says which feeds are busy without repeating their settings.

The two tabs share one state, so pressing Calm on the Market tab changes what the feed's own row is drawn under — one market, read twice, rather than two pictures that can disagree.

The third variant, a whole screen of arrivals, is what the Market tab now is, so it is gone rather than left as a shape that duplicates it.

The two views never do the same job, which is the test to hold them to: if a control can be moved from one to the other without loss, it is in the wrong one.

6. Decided: B, rebuilt

The panel is the chosen shape, and the first build of it was wrong twice over.

It ignored the Simple and Advanced convention. The screen standard already sets how a screen shows an ORE element's settings: one switch, Simple for the value in force and Advanced for the raw entries behind it. The panel follows it — Simple gives the state, the multiplier, who pinned it and the raster; Advanced opens the chain's own rates and the shared heat's jump and decay, which are the raw entries behind the same fact.

A per-feed sparkline cannot show a market-wide factor. Every argument for the endogenous half of the factor is about several feeds at once: a burst in one row raising the others, and the rows densifying together when the market turns. A neuron-spiking raster is the figure that says that — one row per feed, time across, a tick as a mark — and it makes the pin visible as a vertical mark with a denser, more correlated field to its right.

7. Recommendation

B for the run, A for the row, and the table from C as the panel's lower half rather than a screen of its own: the Market panel lists feeds by sensitivity, so "who follows the market hardest" is one glance, and the feed's own editor keeps its four fields with the consequence preview under them.

The argument is the standard's own: a node carries a state and the editors author one feed. The market is not a feed, so it is not the editor's business; the clustering is one feed's, so it is not the panel's.

8. What to prototype next

Built. The page carries the two views: the feed's Arrivals tab with one row, and the Market tab with its Simple and Advanced switch and the raster of every live feed. There is no list of feeds on the Market tab; that was a table of configs.

The raster is drawn from the same model the service uses: a shared heat that every event feeds and that fades, each feed's intensity sensitivity × (mean × S + heat), and its own Hawkes excess on top, which is the branching ratio's job. The chain turns before the pin as well, so the field to the left of the mark is the market moving on its own and the field to the right is the same market held active.

The panel keeps the screen standard's Simple and Advanced switch as a pair, and Advanced adds the raw rows rather than hiding anything: the chain's rates are in Simple because they are the value in force, and Advanced adds the shared heat and the ORE XML path behind the multiplier.

9. Signed off

Decided 2026-10-26. The split and the names stand, and the build follows this page.

  • Arrivals, a tab of a feed's editor beside Instrument, Price behaviour and Provenance: a tick arrival model selector (periodic, Poisson, Hawkes), the two Hawkes fields, the sensitivity, and one row of that feed's ticks. The fields below the selector are Hawkes-only and the built screen disables them otherwise; the prototype keeps them visible to show the full shape.
  • Market regime, its own tab: the state, the multiplier, auto, calm and active, who pinned it and why, and one raster of every live feed, rows in tree order and named because eight unlabelled rows cannot be read.
  • Nothing else on either tab. The by-sensitivity table, the third column and the separate arrivals screen were all dropped.

Build order: the Arrivals tab first, because its controls already exist in the editor; the Market regime tab second, because its verbs already exist on the service; the raster last, since it is the only part with no backend yet.

10. Superseded

On 2026-10-28 Gemini reviewed the built Market regime tab, and the Run the market prototype answers that review. The split between a feed's Arrivals tab and the market stands. The market's own tab becomes five tabs, one question each, and its raster becomes a temporal raster of the last hour with the two-minute lanes kept as its zoom.

Emacs 29.3 (Org mode 9.6.15)