EngineIndicators & Algorithms

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

EvidenceDecision treatment
Missing required modelWait and report configuration problem
Invalid or unavailable valueWait and inspect input/readiness
Ready values that are equalApply the strategy's defined equality rule
Ready values with directional agreementEvaluate the remaining strategy conditions
Conflicting ready valuesApply 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.

On this page