Appearance
Are you an LLM? You can read better optimized documentation at /safety-and-reliability/signal-sanitizer.md for this page in Markdown format
Signal Sanitizer
Telegram signals are typed by humans on phones, often copy-pasted from yesterday's chart in a hurry. The signal sanitizer is the very first check TTMT runs — before any other validation — and its whole job is to catch prices that are obviously wrong: a decimal in the wrong place, a level pasted from an old signal, a price that no longer makes sense. It does this by comparing every number in the signal against trusted reference points, so a "1.0850" typed as "10.85" never reaches your broker.
What It Catches
The sanitizer targets three failure modes:
- Decimal errors — a typist enters
1.085as10.85. Left alone, that order goes out roughly 900% away from market: a guaranteed broker rejection or, worse, a pending order that never fills. - Copy-paste artifacts — yesterday's level pasted into today's signal. Left alone, the stop or entry is positioned against a market that has since moved, producing an instant stop-out or a stuck order.
- Stale prices — a signal posted late, where the level no longer makes sense at the current market. Left alone, a pending order sits waiting for a price that will never come back.
The sanitizer runs first, before the stop-loss, take-profit, and entry-zone checks. Those later checks only ever see corrected numbers, never the raw ones.
How It Decides: Trusted Reference Points
The sanitizer gathers price reference points and trusts each one differently. The hierarchy is one-directional — what the market is doing right now outranks anything typed into a signal.
| Reference point | Trust |
|---|---|
| Live market price (current bid/ask) | 1.00 — highest; it is true right now |
| Existing positions or orders on the symbol | 0.90 |
| Other values from the same signal (cross-checked against each other) | 0.85 |
| Your configured default stop and target distances | 0.50 — lowest; a generic preference |
Live market price is most trusted because it is empirically true at this moment. Your default distances are least trusted because they are generic — a "30-pip default stop" is a preference, not a fact about this symbol right now, so it can never override real market data.
TTMT trusts the live market above the signal itself
The current market price outranks every number in the signal. Your generic default distances are the least-trusted reference precisely because they are generic.
How It Scores Each Number
Every price in the signal — entry, stop loss, and each take profit — gets three weighted checks.
| Check | Weight | What it asks |
|---|---|---|
| Magnitude ratio | 0.95 | Is this within 10x of a trusted reference? If not, it is a hard reject no matter what else scores. |
| Anchor distance | 0.90 | How far is it from the trusted references, measured in pips? |
| Peer consistency | 0.60 | Does it fit with the other numbers in the signal? |
The decision is a single rule, not two sequential passes: a value is flagged as an extremity if either any single check scores 0.90 or higher, or the combined score reaches 0.80.
The 10x Magnitude Floor
The magnitude ratio carries a hard floor. Any value off by a factor of ten or more from a trusted reference is treated as a decimal error and rejected outright — regardless of how it scores on the other two checks. There is no realistic legitimate signal where a price is ten times the market.
The combined scoring above is for borderline cases. The 10x floor is for the blatant ones, where no further deliberation is needed. A value 3x off the market is suspicious and feeds the weighted scoring; a value 10x off is simply a typo.
A value 10x off the market is a decimal typo
TTMT rejects it on the spot. There is no legitimate signal where a price is ten times the current market price.
This 10x floor is the sanitizer's magnitude guard. It is a different number from the stop-loss check that flags a stop "too far" at five times the distance to your farthest target — that rule lives on Signal Validation. Do not conflate the two.
What Happens to a Flagged Value
Whether a flagged value is rejected or replaced depends on which field it is. A wildly wrong stop loss can be replaced with one derived from your configured default distance, because there is a safe substitute. A wildly wrong entry usually rejects the whole signal, because there is nothing safe to put in its place. Either way, the corrected signal — not the raw one — is what the rest of the validation runs on.
Why It Runs First
Order matters. If the stop-loss and take-profit checks ran on raw numbers, a 10.85 entry could confuse them into "correcting" it — building a 100-pip buffer around a nonsense price. Sanitize first, and the later checks receive sane inputs, so their corrections make sense.
A single un-sanitized decimal-slip trade hitting the market can cost more than every sanitizer check the system will ever run. The sanitizer takes milliseconds; the bad fill is real money.
You do not configure the sanitizer
It runs on every signal automatically, before any other check. There is nothing to turn on or tune.
Worked Examples
Decimal slip. A BUY EURUSD signal types the entry as 10.85 while the market is 1.0850. The magnitude ratio is about 10x off, so it is a hard reject. Without the sanitizer, that order goes out roughly 900% away from market.
Copy-paste artifact. A gold channel pastes yesterday's 2670 stop into today's signal where price is 2840. The stop fails the magnitude and distance checks against the live market, and is either replaced with a stop derived from your default distance or rejected, depending on the field rule.
Stale price. A signal posted 40 minutes late lists an entry that price has already blown through. The live market reference (trust 1.00) shows the level is no longer reachable, and the sanitizer flags it before a pending order gets stuck waiting forever.
Related Pages
- Signal Validation — the stop-loss, take-profit, and entry-zone checks that run after the sanitizer (and the separate 5x stop-distance rule)
- Typos & Bad Signals — the catalog of signal-quality issues this and the validators catch
- Signal Processing — the full signal lifecycle
- Entry Zone Resolution — how TTMT resolves the entry zone just before the sanitizer runs

