Signals
A signal is the atom of the pipeline — one news item, scored by the AI, with a direction call and a confidence.
Every 15 minutes a server job pulls news and per-ticker headlines. Each deduplicated, ticker-attributed headline is sent to the model with a structured prompt. The model returns a direction, a confidence between 0 and 1, and a one-paragraph reasoning trace. All of that is written to the signals table.
Lifecycle
- pending — scored but not yet considered for execution. The next portfolio pass decides.
- traded — a position was opened from this signal.
- skipped_* — the agent decided not to act. The suffix tells you why.
- errored — execution attempted but the broker rejected the order. See the trade row for details.
Skip reasons
| Field | Type | Description |
|---|---|---|
| skipped_low_confidence | — | Confidence was below min_confidence_to_trade. |
| skipped_auto_disabled | — | auto_trade_enabled is off in Config. |
| skipped_not_tradable | — | Ticker not found in the eToro instrument cache. |
| skipped_conflict | — | An existing open position contradicts this signal — agent refuses to trade against itself. |
| skipped_caps | — | Would breach max_simultaneous_positions or session_budget_usd. |
| skipped_non_directional | — | Model returned no clear long/short call. |
| skipped_stale | — | Headline too old to act on (outside news_lookback_minutes). |
Key fields
| Field | Type | Description |
|---|---|---|
| ticker | text | Primary ticker the signal applies to. |
| direction | long | short | AI's directional call. |
| confidence | 0–1 | Model's strength score for the signal. |
| signal_source | text | news | event | combined — what triggered the scoring. |
| mode | demo | live | Which environment the signal belongs to. |
| reasoning | text | Why the AI made this call. Always include this when debugging. |
| status | enum | Lifecycle state — see above. |
How to use the page
- Filter to traded when you want to audit recent executions.
- Filter to high-confidence + skipped when something feels off — every skip has a reason.
- Click any row to expand the AI reasoning and the original headline.