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 | How much it is trusted |
|---|---|
| Live market price (current bid/ask) | Most — it is true right now |
| Existing positions or orders on the symbol | High |
| Other values from the same signal (cross-checked against each other) | Moderate |
| Your configured default stop and target distances | Least — 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 Judges Each Number
Every price in the signal — entry, stop loss, and each take profit — is weighed against the trusted reference points along three lines of reasoning:
- How big is it? Is the value in the same ballpark as a trusted reference, or wildly larger or smaller?
- How far away is it? Measured in pips, how far does the value sit from where the market and your open trades say it should be?
- Does it fit the rest? Is the value consistent with the other numbers in the same signal?
A value is corrected when it is clearly out of line — either it fails one of these badly on its own, or several mild warning signs add up. Borderline numbers are left alone; only the ones that no plausible signal would contain are acted on.
Blatant Decimal Errors Are Rejected Outright
There is a bright line for the obvious cases. Any value that is off by roughly a factor of ten or more from a trusted reference is treated as a decimal error and rejected on the spot — there is no realistic legitimate signal where a price is ten times the current market. A value only slightly off is merely suspicious and feeds the weighing above; a value ten times off is simply a typo.
A value 10x off the market is a decimal typo
TTMT rejects it immediately. There is no legitimate signal where a price is ten times the current market price.
This decimal-error guard is a distinct check from the stop-loss "too far" rule on Signal Validation, which flags a stop that sits more than five times the distance to your farthest target. Different checks, different purposes — do not conflate them.
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. That is about 10x off the market, so it is rejected outright. 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 is clearly out of line with the live market, so it is either replaced with a stop derived from your default distance or rejected, depending on the field.
Stale price. A signal posted 40 minutes late lists an entry that price has already blown through. The live market — the most trusted reference — 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

