SignalBack

How every call is scored

Signal publishes a win rate. A win rate is only worth reading if you know what counted as a win, so here is every rule. Where a rule could have gone either way, it went the way that makes the record look worse.

What a call contains

Once a day, for each asset with a newly closed daily bar and no buy or sell still open on it, the model is shown that asset's price history, a set of computed indicators, the last 48 hours of headlines, and its own recent calls on that asset with how they turned out. It answers with one of buy, sell or hold. A buy or a sell carries a target, a stop and a horizon in days. A hold carries none of those, because a hold is the absence of a call.

A call is written once and never edited. The database refuses an update to it, and the whole input it was given is stored alongside it, so a call from a year ago can still be examined against exactly what the model saw.

The fill

A call is scored from the opening price of the first final daily bar whose opening occurs after publication, not from the entry price the model suggested. For crypto that is the next 00:00 UTC open. For US stocks it is the next regular-session open at 09:30 New York time, with DST accounted for. Weekends and holidays have no bar and are skipped. Calls issued at or after the open wait for a later session. Policy 1 calls, including pending historical calls, retain the original issue-day fill convention; policy 2 applies to new calls. Historical results are preserved, not recomputed. The model's suggested entry is shown on the page and plays no part in the arithmetic.

This matters more than it sounds. A model allowed to pick its own fill could name a price the market never reaches, and every such call would sit unresolved forever — producing a track record made entirely of the calls that happened to work. Filling at the open means every call opens, whether the model would have liked it to or not.

When both levels are hit on the same day

Daily bars record a high and a low but not the order they happened in. So when a single day's range contains both the target and the stop, there is no way to know which was touched first.

It counts as the stop. Always. That is the conservative reading, and it is enforced by the order the two tests run in rather than by a rule somebody has to remember, so no future change to the prompt can turn one of those days into a win.

Gaps

A price can open past a level rather than trading through it. When that happens the fill is the opening price, not the level:

  • A long stopped out by a gap down fills at the gap, which is worse than the stop.
  • A long whose target is passed by a gap up is credited only with the gap — which is better than the target, and gets counted honestly rather than capped.

Both directions use the price the market actually offered.

Expiry, and unresolved calls

A horizon is counted in calendar days, because that is what “a ten-day call” means to a person. A stock therefore gets about five bars in a ten-day window and crypto gets ten, and that difference is left alone rather than corrected for.

A call that reaches neither level closes at the last close inside its window and is recorded as expired. An expired call still counts: it goes into the average return and the win rate with whatever it actually returned. A call on an asset that stopped producing prices is marked void and excluded from everything.

Hit rate and win rate

These are different numbers and both are shown. Hit rate is the share of calls that reached their target. Win rate is the share that ended in profit at all, including ones that expired slightly up.

Win rate is the headline figure, because it is closer to what somebody following the calls would have experienced. Hit rate sits beside it because a model can produce a decent win rate by setting unambitious targets, and comparing the two shows that.

Holds are excluded

A hold has no target, so “did it hit” has no answer, and it is left out of the hit rate, the win rate and the equity curve. It is not hidden: holds get their own figures, showing how far the price moved over the horizon the model declined to take a side on.

The reason for excluding them is that including them would be a free pass. A model that says hold on every ambiguous setup and buy only on the obvious ones would post an excellent record built mostly out of declining to answer.

The equity curve

One unit per resolved call, not compounded, ordered by the day each resolved. The curve is the running sum of those percentage returns; the drawdown at any point is how far it sits below its own best level, measured from flat rather than from the first trade.

It is not compounded because calls overlap — several are open at once — and compounding would require inventing a position-sizing rule that nobody chose. Read it as “the sum of what these calls returned”, not as a portfolio.

Prompt versions, and why nothing is ever reset

Every call records the version of the instructions that produced it, and the version changes whenever the wording does. The track record opens on the current version, so after a fix the headline figures describe the model as it is now rather than averaging in what it was before.

That is the only reset there is. No call is ever deleted or edited — the store refuses both — and every earlier call stays one click away under “All versions”, next to a table comparing the versions against each other. A record that could be wiped whenever it looked bad would not be a record.

Every call also records the AI model that made it. When two models are being compared, each asset’s call on a given day comes from one of them, picked at random, so each model sees every asset over time and neither gets the easy ones. The same table compares them, model by model.

Confidence

Every call carries a confidence figure the model chose itself, and the track record groups results by it. This is the most useful chart on the page and the least flattering: a model claiming 80% and winning 45% of the time is not slightly optimistic, it is telling you its confidence carries no information.

Confidence is the model’s chance that the target is reached before the stop. Since prompt v4 the model is shown its own record before every call — how often its calls at each stated confidence actually reached their target over the last 90 days — and asked to calibrate against it. Whether it does is on the track record, like everything else.

What is left out, and would make the record worse

  • No trading costs. No spread, no commission, no slippage beyond the gap rule above. Real execution would return less than these figures on every single call.
  • No borrow cost on sells. A sell is scored as a short at the same weight as a buy, with none of the cost or availability constraints an actual short carries.
  • Corporate actions are handled by hand. Stock prices are requested split-adjusted, but a split or a ticker change during an open call can still distort it. Affected calls are voided when spotted, and spotting them is manual.
  • The sample is small and the universe is fixed. About eighty assets, one call each per day at most. A few months of that is not enough history to distinguish skill from luck, and the page says how many resolved calls the figures rest on for exactly that reason.
  • Crypto calls have a small head start. The analysis runs from 00:30 UTC, and a crypto daily bar opens at 00:00 UTC — so a crypto call is made between thirty and seventy-five minutes into the bar it is then scored from, and its fill is a price that already printed. Stocks have no equivalent overlap: the US session opens hours after the call, so a stock fill is a genuine future open.

Still not financial advice

A published track record is a record of the past. It does not make the next call more likely to be right, and a language model has no mechanism for predicting a price. Every rule on this page exists to stop the numbers being flattering, not to make them predictive.