A friend asked me to build him something practical.
He follows a paid trading group. Private Discord, trade alerts, green screenshots, people posting big percentage moves. He wanted an agent that could watch those calls and eventually trade for him, so he would not have to sit in front of the screen all day trying to catch every move himself.
That sounds simple until you ask the only question that matters:
Is the record actually good enough to risk money on?
I did not want to build him a money printer. I do not believe in those. I wanted to build the thing I wish more people had before they put cash behind someone else's confidence: a gate that refuses to confuse a receipt with an outcome.
So the first version did not trade. It audited.
It took the calls I could capture, reconstructed each signal chain, separated entries from updates from exits, and asked a colder question than the Discord ever asks:
What happened after the green screenshot?
Receipts are not outcomes
A green screenshot proves a trade existed at a moment.
It does not prove the trade ended well.
An option up 50 percent at 10:30am is a receipt. A trim post with a large open profit is a receipt. A chart with a confident caption is a receipt. None of those are the same thing as realized profit.
The outcome is where the trade actually closed, or where it expired, or where the stop should have forced it dead. That is the part that touches the account.
This distinction sounds obvious when written plainly, but it is exactly where trading records get distorted. People remember the visible peaks. They share the visible peaks. The Discord fills with the visible peaks. Then a trade goes quiet, and quiet feels neutral.
Quiet is not neutral.
Sometimes quiet is where the loss is hiding.
What I actually checked
I want to be precise because the precision is the point.
This was not a full audit of the entire service. It was a small, manually captured slice of calls from one paid trading Discord, pulled from screenshots and exported rows I had access to. That matters. A slice is not the whole record, and I am not going to pretend otherwise.
Inside that slice, I looked only at trades the agent could treat as agent-takeable enough to track: clear enough to identify the instrument, direction, expiry, and entry chain.
The first survivorship check focused on expired option positions that had no captured close message. There were 12 of those in the agent-takeable slice.
When I settled them against real underlying prices at expiry, 11 had expired worthless.
That is the moment the whole piece changed for me.
Some of those same trades had visible green updates before they disappeared. Seven had earlier green or update posts that would have looked encouraging if you stopped reading at the screenshot. One was last shown up around 50 percent. Another was last shown up about a third. Another had a trim/update that looked like a large open profit.
Then the chain went quiet.
When the agent finished the chain, the ending for most of those quiet trades was not green. It was zero.
The visible record was not fake. It was incomplete.
This is the fairest way I can say it:
I am not claiming the people posting those screenshots were lying. The green moments may have been real when they were posted. The screenshots may have been honest receipts of a temporary state.
The problem is more dangerous because it does not require anyone to fake anything.
If the win gets posted and the loss gets silence, the visible record becomes flattering by construction. Not necessarily because someone sat down and decided to deceive people. Sometimes the room just naturally rewards wins, ignores duds, and moves on. But the effect is the same for the person deciding whether to follow the next call:
They are judging a strategy from the part of the record that survived being shown.
That is survivorship bias in its most practical form. Not a textbook definition. A real account-risk problem.
The agent's job was not to decide whether the group was good or bad. It was to ask whether the shown record was enough evidence to act on.
On the captured slice I could verify, the answer was no.
Holding my own work to the same standard
This is the section I would not trust the article without.
The sample was small. It was captured by hand. It was not a complete, randomized, unbiased scrape of every trade that source ever posted. Because of that, I cannot honestly say, "this service loses money."
I also cannot honestly say, "this trader has no edge."
Those claims would require a complete record, consistent sizing, option price history, trim quantities, stop execution, and a clean definition of what counted before the outcome was known.
I do not have all of that.
What I do have is narrower and stronger:
In the captured agent-takeable slice, the visible record was not enough to trust. Trades that looked green midstream could and did expire worthless. The missing close posts mattered. When I forced the agent to settle the quiet trades instead of ignoring them, the story changed.
The blind-follow snapshot for the captured agent-takeable slice was ugly: 16 scored or settled trades, 3 wins, 13 losses, and a sharply negative result under equal-position, held-to-expiry accounting.
That held-to-expiry assumption matters. It is a rough blind-follow check, not a full trading simulator. It asks, "what happens if the quiet trades are not rescued by a stop or a later close post?" It does not include perfect option-price fills, exact position sizing, or every trim.
It is a warning label.
It says: if you only follow the visible trail, you are not measuring the same thing your money experiences.
That is the cost-bearer problem in plain form. The screenshot does not bear the cost. The Discord room does not bear the cost. The person whose account takes the trade bears it. So the record has to be judged from the account's side, not from the room's side.
That is the honest claim. Not "they lose." Not "I proved the whole service is bad." Just this:
The record I could inspect was incomplete in the exact direction that makes a trading source look safer than it is.
Then I made the agent stricter
The next question was obvious:
What if the agent did not blind-follow? What if it only took the clean calls?
So I made the policy stricter. A trade was not live-eligible unless it had the basic structure a machine could enforce:
- a clear entry
- a machine-checkable numeric stop
- a machine-checkable numeric target
- enough price data to test what happened first
That strict pass reviewed 40 positions.
Only 6 were clean enough for the agent to consider live-eligible.
The other 34 were refused or left paper-only.
| Stage | Count | Result |
|---|---|---|
| Captured positions reviewed | 40 | Raw signal chains from the slice |
| Refused / paper-only | 34 | Missing stops, vague exits, unmeasurable setups, or not agent-takeable |
| Live-eligible | 6 | Clean enough to test under strict stop-and-target rules |
That refusal is not a side detail. It is the product.
Most retail trading tools are built to help you act. This one was most useful when it refused. If a call has no enforceable stop, the agent should not turn it into an order. If the exit is vague, the agent should not pretend it can manage risk. If the setup cannot be measured, it should not be trusted with money.
On the 6 strict live-eligible trades, the outcome still did not show an obvious edge: 2 hit target first, 4 hit stop first. That is not an exact profitability model either, because exact option P/L needs option-price history and sizing. But it was enough to answer the practical question:
The captured slice did not give the agent a clean, obvious money-making lane.
It gave the agent a reason to protect my friend.
The agent is not the edge
This was the hardest part to accept because the original dream was simple: build an agent that trades for him and helps him make money.
I still want that.
But the agent cannot manufacture edge out of a source that has not earned trust yet. Discipline can reduce damage. It can enforce stops. It can size risk. It can refuse unclear trades. It can keep an honest scoreboard so the human gets better over time.
But if the underlying calls in front of it do not have positive expectancy, automation only makes the bad process faster.
That is why the first real agent is not a reckless auto-trader. It is an operator and coach:
- It reads a call.
- It asks whether the call has enough structure to act on.
- It refuses missing stops, vague exits, spreads it cannot model, or post-hoc winner posts.
- It proposes only review-eligible trades.
- It tracks every trade from entry to close.
- It builds the record the Discord does not give you.
If that record eventually shows a real edge, then live trading can be earned in small size.
If it does not, the agent still did its job. It saved the trader from funding a story.
The bigger lesson
This is a small story about trading, but it is not only about trading.
Whoever controls the visible record controls what looks true.
If all you see are the wins, the system looks better than it is. If the failures never become part of the shared record, the audience is not evaluating reality. They are evaluating a highlight reel.
The answer is not cynicism. Cynicism just says everything is fake and stops thinking.
The answer is better accounting.
Track the chain from start to finish. Separate receipts from outcomes. Mark what is open. Mark what expired. Mark what was refused. Mark what was too vague to trust. And when your own sample is limited, say that too.
That last part matters most.
If I expose someone else's survivorship bias while hiding my own sample limits, I have learned nothing. I would just be building a cleaner-looking version of the same distortion.
The visible seam is part of the receipt. If I am inside the experiment I am describing, I cannot pretend to stand outside it like a perfect judge. What I can do is show exactly where my view is limited, what I checked, what I did not check, and what conclusion the evidence is allowed to carry. That flinch is not weakness. It is the audit trail.
What I found
I set out to help a friend make money.
The first thing the system did was more important: it stopped him from losing money on evidence that had not earned trust yet.
In a small captured slice, the wins were loud. The losses went quiet. When the agent forced the quiet trades to finish their story, most of them ended at zero. When the agent applied strict live-trading rules, it refused most of the calls and found no obvious edge in the few clean enough to test.
That is not the ending I wanted.
It is the ending I trust.
And my friend did not have to lose a dollar to learn it.
That is what a self-correcting system is supposed to do. Not make the story prettier. Not force the outcome we hoped for. Just keep following the record until the story either earns belief or breaks.
This captured record broke.
So the agent said no.
Building a Better Room
I am also thinking about opening a small Discord for people who want to think through this kind of work together: AI agents, evidence, trading discipline, narrative control, verification, and the bigger question of how regular people build systems they can actually trust. Not a hype room. Not a signal room. A coherent place with the right channels, where builders and serious thinkers can pressure-test ideas, share receipts, and help each other stay honest.
If that is something you would want to be part of, tell me. I am still shaping it, but I want it to be built with the same rule as the agent: no empty confidence, no hidden record, no pretending the story is stronger than the evidence.
Top comments (15)
I ran the same audit from a different angle and hit the same wall.
Two Telegram signal channels, 300 signals, Nov 2025 - May 2026. Reported win rates: 78.9% and 76.3%. Numbers that look like edge.
When I tracked actual outcomes rather than the channel's receipts: profit factor on real signals collapsed to 1.57x. The same strategy on synthetic signals scored 10.79x. Average loss on real signals: -3.95%. On synthetic: -0.82%. Four and a half times worse, not reported anywhere in the channel.
2026 YTD on 288 signals: a baseline policy that trades every signal went to zero. Full wipe. The win rate the channel posts is real in the same way your green screenshots are real. It is the record of the moments the channel chose to report. Quiet is exactly where the losses live.
The only policy that survived 2026 was aggressive filtering: 10 trades taken out of 288 signals available. The filter was regime and confidence based, not channel trust based.
Your "receipts are not outcomes" ladder is the right frame. The channels are publishing receipt after receipt and calling the collection a track record. The outcome is what happens after the last update, and that is the part nobody posts.
I wrote up the full analysis, post will be later :)
The short version: 9,312 messages, 7 channels, 17 months, zero executed signals.
The funnel tells the story. Of 9,312 raw messages, 14.2% contained a parseable trade idea. Of those, 97.4% of all messages were stale by the time the pipeline tried to act. Of the signals that survived staleness, 82% turned out to be either post-trade result announcements ("TP1 hit") or locked teasers — subscription ads dressed as signals.
The result announcements are the exact mechanism you described. Channels flood the feed with win screenshots after the trade closes. That is not a track record. That is curation after the fact.
The actual measured win rate for the strongest channel was 46.6%, not the 78%+ they advertise. The gap between claimed and measured is partly survivorship bias and partly that the channel's "whale pump" framing pointed toward longs, while the actual edge in the data was in shorts: 54.7% win rate in 2025, 68.0% in 2026. The free tier was showing you the wrong direction.
Regime context was the only variable that made the data legible. Without tagging BTC regime at signal time, the 2026 long collapse looked like channel quality dropping. It was a regime shift. Any long-biased source would have suffered the same.
the 97.4 percent stale number is brutal and it's the part nobody models. people score signals as right or wrong, but the real third bucket is already gone, and it's most of them. by the time the pipeline can act, the moment that made it true is over.
the 82 percent being result announcements is the survivorship mechanism caught in the act. "TP1 hit" is the channel curating its own record in real time and the feed makes it read like live flow. you measured the exact thing i was only describing.
the one that gets me is the free tier pointing at longs while the edge was in shorts. that doesn't just leave the loss out, it points the wrong way for the person who can't see the regime. send the post when it's up, i want the full funnel breakdown.
It is up: dev.to/jugeni/a-published-win-rate...
You called the three things before I published them. The stale third bucket is most of the volume, the result-announcement flood is the curation caught in the act, and the free tier pointing at longs while the edge sat in shorts is the one I did not expect to find. That last one is the part I think generalizes past trading: a source can hold a real signal and still broadcast the wrong direction, because it never measures itself against anything it does not author. Full funnel and the per-direction breakdown are in the post.
read the whole thing. the wrong direction finding is the one that stays with me too, because it kills the last excuse. people assume a bad source is a lying source. yours held a real signal and still aimed the free tier the wrong way the entire time, and nothing in the channel could ever catch it because the channel never measured itself against anything it didnt author. your own line says it cleaner than i did, a footprint is a consequence the actor cant author, a screenshot is a record it authors completely. the 28 percent long against 68 percent short in 2026 is the part id frame loudest, because it proves the source wasnt random, it was confidently pointed at the losing side.
That 28/68 split is the one that surprised me too, because it's the cleanest way to see the channel wasn't underperforming, it was confidently wrong. A random oracle floats around 50/50 with noise. This one held a stable directional bias against the move the entire year. Whatever the signal actually measured, it was a real measurement of something that pointed the wrong way. That's a different kind of failure than "no edge" and it's the one a published win rate can never catch, because the win rate is computed on the side of the trade the channel chose.
Glad you read the whole thing. The footprint vs screenshot line was the one I wrote three times and only got right when I gave up trying to make it sound neutral.
this is the part that stuck with me too. no edge is just noise, you walk away from it. confidently wrong all year is something else, it's a real measurement of something that points you the exact opposite direction, and that's almost worse because it reads like signal. and you only ever catch it if you grade it against the move it didn't pick. the win rate is computed on the side the channel chose, so by construction it can never show you this. that's the whole trap living inside one number. and yeah the footprint vs screenshot line fought me for days, it only landed once i stopped trying to make it sound fair to both sides.
The asymmetry you're naming has a sting in the tail: the confidently-wrong signal is the valuable one and the one you usually can't trade. Knowing a channel is reliably backwards only pays if you can take the clean inverse, and retail structure rarely lets you. You can mute the call, you can't cheaply short it, and fees plus slippage on the flip eat the edge you found.
So grading against the move it didn't pick gives you a true measurement and a position you often can't express. That doesn't make it useless, it makes it a research signal before it's a trade: it tells you the channel is anti-correlated, and the work left is building something that can hold the short side. The number points the right way long before your account can follow it.
Yeah this is the receipts are not outcomes thing again, just one layer deeper. knowing a channel is reliably backwards is a real receipt. a position you can actually hold is the outcome, and the gap between them is structure and fees eating you alive on the flip. so the honest move is keep it a research signal and don't let "i found an anti-signal" quietly graduate into "i have an edge" until something exists that can hold the short side cheaply. the number pointing the right way before the account can follow it is exactly it. the measurement is real, the tradeable position is a separate build.
the 1.57 versus 10.79 is the whole thing in one number. synthetic signals never have to survive the part nobody screenshots so they keep the losses small and clean, and the real ones eat the -3.95 that never gets posted. survivorship showing up as a profit factor.
the part that lines up with what i found is the filter. you got one surviving policy in 2026 and it took 10 trades out of 288. i landed at 6 live-eligible out of 40 reviewed, and the thing that earned a trade was almost never the channel saying so, it was whether the call carried a real stop and target i could actually check. regime and confidence based like yours, not trust based. feels like we walked into the same wall from different rooms.
what did your filter key on for regime, btc level structure or something slower? that's the piece i honestly haven't built yet.
BTC level structure, not something slower. It keyed on higher-timeframe trend regime: where price sat against prior daily swing highs and lows, trend versus range, tagged at signal time and not at review. I tried the slower macro inputs, funding and dominance, and they lagged the early-2026 regime flip by enough that they would have kept me long straight through the collapse. Level structure caught the long-to-short edge shift because the structure broke before the slow signals repriced. The honest gap: structure tells you the regime changed, it does not tell you the new regime is tradeable, and that second cut is where the confidence axis did the work. Same wall from different rooms is exactly right, and the convergence on a real stop and target as the gate is the part I trust most, because it is the one filter the channel cannot fake for you.
This is basically the 97.2% coverage thing but for trading 😂 Same trap — you're measuring the stuff that survived, not the whole picture. "The visible record was not fake. It was incomplete." Yeah that one got me.
lol yeah it's the same shape, just meaner in trading. survivorship doesn't care what domain you put it in, you only ever see what made it through the filter. and here the filter is somebody's screenshot folder, so it's not even an honest selection effect. glad that line landed, it's the one i kept circling back to while i was pulling the data.
A screenshot folder as a 'selection filter' — that's grim but accurate. Respect for actually pulling the full data instead of just complaining about it 🙌
yeah its grim once you see it that way, the filter isnt even hiding, its just somebody's camera roll deciding what counts as the track record. pulling the data was the only way to stop arguing with myself about it though. opinions are cheap on this stuff, the funnel either survives or it doesnt. appreciate you 🙏