Combining signals
Turn valid evidence into a deliberate decision before considering execution.
Build a decision in stages: validate inputs, establish readiness, evaluate conditions, then inspect execution state. This keeps missing data from accidentally becoming an entry signal.
Define each condition
For a fast and slow average, state the window definition and what equality means. The comparison observer uses time-window SMA values and returns ABOVE, BELOW, or EQUAL only when both are finite numbers.
It observes the current relationship. It does not detect a crossover: a crossover also requires a stored previous relationship and explicit repeated-timestamp and gap rules.
Keep absent and neutral separate
| Evidence | Decision treatment |
|---|---|
| Missing required model | Wait and report configuration problem |
| Invalid or unavailable value | Wait and inspect input/readiness |
| Ready values that are equal | Apply the strategy's defined equality rule |
| Ready values with directional agreement | Evaluate the remaining strategy conditions |
| Conflicting ready values | Apply an explicit conflict rule |
Do not replace a missing numeric signal with zero merely to make a comparison run.
Match horizons and timestamps
Two values can be individually valid while representing different observations or time horizons. Record whether that difference is intentional. Historical bounds, aggregation, execution order, and model update intervals all matter.
An entry filter can deliberately use slower evidence than the entry trigger. Document how old that evidence may be and what happens when it becomes unavailable.
Decide who submits the request
A composed signal should still pass order and position checks. Choose whether SJS or a configured action owns submission so two layers do not independently enter from the same evidence.
Use the existing SJS crossover for a complete stateful execution example. The observation examples here make no order requests.
Continue with state and lifecycle.