// BEYOND THE TWO GAINS
Advanced Controls
Once you are comfortable with Kp and Ki, the deeper controls shape how your policy behaves under stress. Each one trades speed for stability in a different way, and they unlock as you move up in difficulty.
These are not extra power. They are governors. They decide how your controller reacts when the run stops being calm.
Output and memory bounds
Rate bounds set the floor and ceiling on controller output. RR min caps how negative the output can go, RR max caps how positive. Integral bounds cap how much accumulated memory the controller is allowed to build.
Wide bounds give you freedom to act hard during a serious gap, but they also let the output reach extreme rates that stress participants. Tight bounds stay calm and predictable, yet they can saturate, leaving the controller pinned at its limit and unable to close a real gap.
Most runs want the marker near the middle. Open the bounds only as far as the run actually demands, and no further.
Windup and anti-windup
Windup is excess integral memory. The controller keeps accumulating correction while it waits for the gap to close, and that memory keeps pushing even after conditions have changed. The result is overshoot and overhang: you arrive late and then sail past the target.
Anti-windup decides what happens to that memory when the output is already saturated. Pick the mode that matches what your run punishes most.
Clamp
Holds memory at a fixed cap while saturated, so it cannot pile up further.
Freeze on clamp
Stops the memory from growing the moment output hits its limit, then resumes once it clears.
Leak on clamp
Bleeds memory away faster while saturated, so overhang fades instead of lingering.
If a run punishes delay, lean toward freezing. If it punishes whipsaw or stubborn drift after a shock, lean toward leaking. It clears the overhang sooner.
Noise, smoothness, and memory
These three controls keep the controller from chasing every flicker in the market.
A noise filter ignores tiny deviations before they reach the controller, so small jitter never triggers a response. Rate smoothness limits how sharply the output can change from one simulated day to the next. Policy memory sets how much integral state survives each day.
All three reduce twitchiness. Pushed too far, they also slow your recovery from a real shock, because the same damping that ignores noise will soften a genuine move.
| Setting | Turn it up | Turn it down |
|---|---|---|
| Noise filter | Ignore more small jitter, calmer output | React to smaller real moves, more sensitive |
| Rate smoothness | Gentler day to day changes, less whipsaw | Faster, sharper output swings |
| Policy memory | Carry more correction across days, steadier | Reset faster each day, lighter on its feet |
Oracle smoothing, cadence, and derivative
These are the most advanced knobs because they model real measurement delay and execution rhythm.
Oracle smoothing makes the controller observe a slower, smoothed price instead of the instant market price. It cuts noise but adds lag, so you see a cleaner signal a step behind the truth. Controller cadence sets how often policy recalculates: less often is calmer, more often is more reactive. An optional derivative response reacts to how fast the gap is changing, which can damp a fast move before it overshoots, but it is sensitive to noise and will amplify jitter if you feed it a noisy signal.
Each of these changes how every other setting feels. Turn on a single advanced control, run it, and read the peg gap and controller output before adding another. Stacking three at once makes it impossible to know which one helped.
What unlocks when
Difficulty gates how many of these controls are in play. The progression moves from basic reaction to realistic control engineering.
Easy keeps you focused on the two gains and how far they are allowed to travel. Medium adds the damping controls so you learn to tame noise. Hard hands you the full toolkit, including the timing and measurement knobs that make a controller behave like real policy.
Next: how each difficulty changes the run, in Difficulty.