Two measurements, three regimes
Classification reads Wilder's ADX for trend strength and Bollinger-Band width for how far the market has expanded relative to its own recent history. Actively expanding bands read as volatile. Otherwise an ADX at or above the trend threshold reads as trending, and anything else reads as ranging.
There is a fourth state, idle, and it means only "not enough data yet". It is never a description of the market. That distinction was learned the hard way: an earlier version let a perfectly ordinary quiet reading fall through to idle, and because no strategy is mapped to idle, a router that landed there could not start anything at all. One router spent 14 of 32 bars stuck in it overnight.
ADX is direction-blind, so direction is a separate gate
ADX ends on the absolute difference between the positive and negative directional indicators. A rally and a crash of equal force are the same reading. A router mapping trending to a DCA leg would therefore average down through a collapse and call it a trend.
The optional per-leg direction requirement closes that gap. It compares the positive and negative directional indicators and refuses to act when it cannot tell them apart. It is checked after the entry conditions rather than before, because those conditions fire on a change from a stored previous price, and skipping them would leave that price stale and manufacture a false crossing later. The paper router and the backtester apply the gate identically, or the backtest would be measuring a different bot from the one you can run.
Structured entry and exit conditions, not free text
Entry conditions are chosen from a fixed list: price crossing a level, RSI, Stochastic RSI, Williams %R, Supertrend, a session window, or a cooldown. Exit conditions are take-profit, stop-loss, timeout and notify. A group can require all of its conditions, any one of them, or at least a set number of them.
Exit conditions are measured from what the position actually cost, not from the price the market was at when the router switched to that strategy. The two stop agreeing as soon as a trade fills, because a signal leg arms itself and waits rather than buying straight away. The one deliberate exception is a grid leg: its average cost moves every time a rung fills, which would make a fixed stop tighten and loosen on its own.
A daily stop that latches, and refusals you can read
The daily stop is a percentage of the paper money you allocated to the router. It adds up realized gains and losses since the day began, plus whatever the open position is currently up or down. It latches for the rest of the UTC day and clears only when the date changes, never because the loss recovered, since otherwise a router would re-enter on a day it had already blown. When it trips it closes the open leg at once.
When a router decides not to start a leg, it says why. The refusal is saved, sent to you once, and shown on the router's card. Without that, a router waiting for its conditions and a router that cannot start at all look exactly the same from the outside: flat, for hours, with nothing to explain it.