- AI Market Signals
- Open Data
Open data: AI trading signal outcomes
Every trading signal we publish is locked at the moment it fires and later scored against real market prices. That scored record — wins, losses and expiries alike — is available two ways: as aggregate JSON, and as the underlying row-level file with one line per signal. You may use, quote and republish either with attribution.
We publish this because the honest answer to “what win rate should I expect from trading signals?” does not currently exist in public anywhere, and a number nobody can check is worth nothing. Read the full methodology for how signals are generated and scored.
Current figures
Signals scored
17
last 90 days
Decided
17
published at 20
Reward:risk
1.8 : 1
Expectancy
-2.9%
per resolved signal
Last scored
The endpoint
One GET request, no key, no rate limit, CORS-open. Cached at the edge for five minutes.
GET https://www.smartinvestai.io/api/signals/statsReturns { "stats": { … } }, or { "stats": null } if the record is temporarily unreadable — it never returns an error status, so a failed read cannot break a caller's pipeline.
Schema v1.0
Fields are added, never silently renamed or removed. A breaking change bumps the major version and is announced in the feed.
| Field | Type | Meaning |
|---|---|---|
| resolved | integer | Signals scored to a win, loss or expiry in the window |
| wins | integer | Reached the target before the stop |
| losses | integer | Hit the stop before the target — including same-candle ties |
| expired | integer | Reached neither level within the horizon; scored on close vs entry |
| winRate | integer | null | wins ÷ (wins + losses), 0–100. Null below 20 decided signals |
| avgReturnPct | number | Mean signed return across all resolved signals, in % |
| avgWinPct | number | null | Mean return of winning signals (positive) |
| avgLossPct | number | null | Mean return of losing signals (negative) |
| rewardRisk | number | null | avgWinPct ÷ |avgLossPct|, to 1 decimal place |
| profitFactor | number | null | Gross profit ÷ gross loss. Above 1 is profitable |
| byClass | object | The same metrics broken down by crypto, stock and forex |
| recent | array | Most recent resolved signals: asset, action, outcome, return, timeframe |
| windowDays | integer | Rolling window the aggregate covers, in days |
| updatedAt | string | null | ISO 8601 timestamp of the last scoring run |
The row-level file
The aggregate above is computed from these rows. One line per scored signal, newest first, up to 25,000 rows. Add &days=90 to restrict the window. No key, no sign-up, CORS open.
| Column | Meaning |
|---|---|
| signal_id | Stable unique id for the signal |
| asset, name | Symbol and instrument name |
| asset_class | crypto, stock or forex |
| action | buy or sell |
| timeframe | 4H or Daily |
| confidence | Model confidence when published, 0–100 |
| entry, target, stop_loss | Price levels exactly as published |
| published_at | When the signal went public (ISO 8601, UTC) |
| resolved_at | When it was scored (ISO 8601, UTC) |
| outcome | win, loss or expired |
| return_pct | Realised signed return, negative for losses |
| max_favorable_pct | Best unrealised move in the trade’s favour before it resolved |
| max_adverse_pct | Worst unrealised move against it before it resolved |
The two excursion columns are the ones worth having: they show how far a trade ran in your favour before it stopped out, and how far underwater a winner went first. Neither is visible in any win-rate figure.
How these numbers are produced
- Entry, target and stop are written when the signal publishes and never altered. There is no retrospective exit and no re-entry.
- Outcomes are scored against real OHLC candles. When target and stop fall inside the same candle we record a loss, because the candle cannot show which came first — a rule that can only make these figures worse, never better.
- Signals reaching neither level expire on a fixed horizon and are scored on signed close-versus-entry, so mediocre outcomes stay in the record instead of disappearing.
- A win rate is withheld below 20 decided signals, and an asset gets its own published page only past 12 resolved signals. Both gates exist so a small sample cannot be presented as a result.
- Coverage is 111 markets across crypto, US equities and major forex pairs. See the full scoring rules and what expectancy measures.
Licence and attribution
Free to use, quote, chart and republish — including commercially — with attribution to SmartInvest AI and a link to this page. No permission needed and no notification required. If you publish an analysis using it we'd genuinely like to read it.
Source: SmartInvest AI trading-signal outcomes
https://www.smartinvestai.io/dataThe data describes past signal performance. It is published for research and transparency, is not financial advice, and past performance does not predict future results. See our risk disclosure.