- AI Market Signals
- Methodology
How Our AI Trading Signals Are Generated
Our signals are produced by deterministic technical analysis, not by a black box. The engine reads whether a market is trending or ranging before anything else, and stands aside when it is neither. A signal publishes only when every condition in the relevant playbook agrees — and it publishes a complete setup: an entry zone, a stop, two targets, and an expiry, all sized to that asset's own volatility. Every one is later scored against real market prices, wins and losses alike. Nothing on this page is hand-entered.
1. The inputs
Every signal is computed from daily candles — high, low and close, not closing prices alone, because the true range of a bar is what the stop and target are sized from and a close-to-close estimate cannot see it. At least 60 candles are required before anything is computed, so the 50-period moving average is a real 50-period average.
Crypto candles come from Coinbase Exchange, with Kraken and then CoinGecko behind it. Stocks and forex use Yahoo Finance, with Nasdaq and the European Central Bank (via Frankfurter) as fallbacks. Each class tries its sources in order until one answers, so a provider going down thins the feed rather than blanking it. All are free, keyless, publicly checkable sources.
2. Reading the market first
Before any setup is considered, ADX(14) decides which playbook — if any — applies. ADX measures trend strength without regard to direction:
- Above 25 — trending. The trend playbook applies.
- Below 20 — ranging. The mean-reversion playbook applies.
- Between the two — neither. The engine stands aside and publishes nothing at all.
That third case matters more than it looks. An earlier version of this engine had no notion of an unsuitable market and traded chop as confidently as it traded a clean trend.
3. The setup must agree, not out-vote
In a trending market, a buy requires all of the following together:
- The 20-period moving average above the 50-period, and price above both.
- A positive MACD(12,26,9) histogram.
- Price above the 100-period average — no trading against the bigger trend.
- Wilder RSI(14) below 80, so we are not buying an exhausted move.
- Price no more than 4 ATRs beyond the 50-period average — beyond that it is a chase.
A signal that clears all of the above is published. Whether it is sent to anyone is a second, stricter question — see below.
Sells are the exact mirror. In a ranging market, a buy instead requires RSI below 30 with price stretched more than 1.5 ATR below the 20-period average.
These are a gate, not a scorecard, and that is the important change. The moving-average cross, price above that average, and a positive MACD histogram nearly always fire together in a trend — they are three views of one thing. The previous engine awarded each a point and read the total as confidence, which manufactured three confirmations out of one, and paired them with an RSI rule that pulled in the opposite direction. Confidence is now derived only from what the gate did not use: trend strength, RSI headroom, and extension. It is shown as a band rather than a percentage, because it is a ranking and has not been calibrated against realised win rate.
4. Which signals we actually send
Publishing every valid signal and calling all of them trade ideas would be volume wearing the label of selectivity. Signals are split into two tiers, and only one is ever delivered:
- Trade ideas — cleared every filter, including the tighter 2 ATR distance limit from the 50-period average. Sent by alert and email, and shown first on the site.
- Watchlist — fired, but sat further from the mean or below the conviction threshold. Published and scored in full, never sent.
The 2 ATR limit is the whole of the difference, and it was measured rather than chosen. A parameter sweep ranked candidate rules on one half of the history and validated them on a half withheld from that ranking. The distance limit produced the same ordering in both halves:
- within 2 ATR — profit factor 1.54 in-sample, 2.00 out-of-sample
- within 3 ATR — 1.30 in-sample, 1.49 out-of-sample
- within 4 ATR — 1.09 in-sample, 1.18 out-of-sample
Requiring a stronger trend instead made results worse, which is what makes this a finding rather than a coincidence: it is the distance price has already travelled that costs money, not the strength of the move.
Watchlist signals stay in the published record on purpose. Removing them would improve the headline number and destroy its meaning — the point of scoring everything is that nothing is quietly dropped once it goes wrong. Both records are shown separately, so the delivered product can be judged on its own results without hiding the rest.
5. Setting the entry zone, target and stop
A fixed percentage would be wrong for almost every asset — a 3% move means something very different for Solana than for Apple. Every level is therefore scaled to the asset's Average True Range (ATR-14):
- Stop — 2.5 ATR from entry.
- First target — twice the stop distance, a fixed 2:1 reward-to-risk.
- Second target — 3.5x the stop distance, for scaling out. Only the first is scored.
- Entry zone — plus or minus a quarter ATR around the published price, rather than a single number. By the time anyone reads a signal the market has moved; a band is something a reader can actually fill inside, and it gives us a definition of whether the trade is still available.
The 2:1 constant matters when reading the track record: at 2:1, a strategy needs a win rate above 33.3% to break even before costs.
6. How long a signal stays live
Every signal carries an explicit expiry — 36 hours — after which it is never presented as live again, regardless of what has or has not happened to it. It is also tracked continuously between publication and resolution:
- In entry zone — price is still inside the published band, so the trade is available at the levels shown.
- Running — price has left the zone. The trade is tracked to target or stop, but entering now would mean chasing it.
A trade can keep running long after it stops being worth entering, and those are different questions. The feed answers both rather than showing every signal as equally current.
7. Scoring the outcome honestly
Once a signal publishes, it is locked. Real OHLC candles from after publication are walked forward in time order:
- Win — the target is reached before the stop.
- Loss — the stop is hit first.
- Both inside the same candle → scored a loss. The candle does not tell us which came first, so we take the pessimistic reading. This is the single most important choice on this page: it can only ever make our numbers look worse.
- Expired — neither level reached within 30 days. Scored on the signed close-versus-entry return, so a signal that quietly drifted is still counted.
- Void — market data was unavailable for long enough that we cannot say what happened. Excluded from the record entirely rather than filled in with an assumed result. An earlier version of this engine defaulted a missing price series to the entry price, which quietly recorded provider outages as real, flat trades.
We also record how far each trade ran in your favour and against you before resolving — published on every asset page, and the part most signal providers leave out.
8. One trade at a time, per asset
Only one signal per asset is live at any moment. The engine regenerates throughout the day, but while a trade is open it will not publish another for that asset — the next one can only open after the current one resolves.
This is a measurement rule as much as a trading one. Without it, the same setup is written repeatedly while it runs and each copy is scored separately, so a track record reports a large number of trades that are really one trade counted many times, with their outcomes almost perfectly correlated. The sample size looks reassuring and means nothing. Every figure we publish counts independent trades.
Frequently asked questions
- How is a trading signal generated?
- Market structure is read first, using ADX(14). Above 25 the market is trending and a trend playbook applies; below 20 it is ranging and a mean-reversion playbook applies; in between the engine stands aside and publishes nothing. In a trend, a buy requires the 20-period moving average above the 50-period, price above both, and a positive MACD(12,26,9) histogram — all of them, not a majority — plus price above the 100-period average and Wilder RSI(14) below 80, and the move must not already be stretched more than 4 ATRs beyond the 50-period average. Sells are the mirror image. In a range, a buy requires RSI below 30 with price stretched below the 20-period average by more than 1.5 ATR.
- Why are the conditions required to agree instead of scored?
- Because they are not independent. A 20-over-50 moving-average cross, price above the 20-period average, and a positive MACD histogram almost always occur together in a trend — they are three views of the same thing. An earlier version of this engine gave each of them a point and treated the total as a confidence score, which made three confirmations out of one. They are now an all-or-nothing gate, and confidence is derived from things the gate did not already use: trend strength, how much room RSI leaves before exhaustion, and how far price has extended.
- What does the confidence score mean?
- It is a ranking, not a probability, and the site displays it as a coarse band rather than a precise percentage for that reason. It combines ADX strength, remaining RSI headroom and how extended the move is. Publishing a figure like "83%" would imply the number had been calibrated against realised win rate; it has not been, and we will not present it as though it were.
- How are the entry zone, target and stop-loss set?
- All three are scaled to the asset’s Average True Range (ATR-14), so a Solana setup is naturally wider than an Apple one. The stop sits 2.5 ATR from entry, the first target at twice that distance — a fixed 2:1 reward-to-risk — and a second target at 3.5x for scaling out. The entry is published as a zone of plus or minus a quarter ATR rather than a single price, because a single price is not something a reader can act on once the market has moved.
- How long is a signal valid for?
- Each signal carries an explicit expiry, 36 hours from publication, after which it is never shown as live again. Separately, it is tracked continuously: while price is still inside the published entry zone it is marked as available at the levels shown, and once price leaves that zone it is marked as running — so a reader can tell at a glance whether the trade is still there or has already gone.
- How is a signal scored as a win or a loss?
- Real OHLC candles from after the signal published are walked in time order. A buy wins if the high reaches the target before the low hits the stop, and loses if the stop is hit first. If both levels fall inside the same candle it is scored a loss — the conservative call, so the win rate is never overstated. If neither level is reached within 30 days it expires and is scored on the signed close-versus-entry return. If market data is unavailable, the signal is marked void and excluded from the record entirely; we do not fill the gap with an assumed result.
- Where does the market data come from?
- Crypto candles come from Coinbase Exchange, with Kraken and then CoinGecko as fallbacks. Stocks and forex use Yahoo Finance, with Nasdaq and the European Central Bank (via Frankfurter) behind it. Every source is free and keyless, and each asset class tries them in order until one answers — so a single provider going down thins the feed rather than blanking it. Keyless sources also mean the inputs can be independently checked.
- What is the difference between a trade idea and a watchlist signal?
- A trade idea is a signal that cleared every filter, and it is the only kind we ever send by alert or email. A watchlist signal fired but did not clear the bar — most often because price had already travelled more than 2 ATRs from its 50-period average, which makes an entry a chase rather than an entry. Watchlist signals are still published and still scored in full, because a track record that quietly omits the weaker calls is not a track record. Both records are shown separately on the site.
- Why does being close to the moving average matter so much?
- Because it is the difference between joining a trend and chasing one. Testing the same strategy at different distance limits, on data held back from the tuning, produced a clean gradient: entries within 2 ATRs of the 50-period average returned roughly three times the profit factor of entries allowed out to 4 ATRs, and the ordering was identical in both halves of the sample. Tightening the trend-strength requirement instead made results worse, so it is specifically distance travelled that matters, not how strong the trend looks.
- Why do you not always publish a win rate?
- A win rate computed on a handful of results moves too much on a single outcome to mean anything. We only publish one once at least 20 signals have resolved to a win or a loss. Below that threshold the raw counts are shown instead. A stronger bar governs whether we describe the record as showing an edge at all: the trade ideas must show a profit factor of at least 1.25 across 60 or more decided trades, AND the average result per trade must sit at least two standard errors above zero — a record that an edgeless strategy would produce less than about 2.5% of the time.
See the method applied: every published signal and its outcome, including the losses.
These signals are not financial advice. Technical analysis describes what prices have done, not what they will do, and no method described on this page changes that. Trading carries risk, including loss of capital.