The problem
Whoever buys a trading signal buys a promise they cannot check. The seller shows the curve that went up, the month that worked, the hit rate without saying how much is lost on a miss. The average hides the worst case, and the worst case is what wipes out the account of whoever follows the signal.
The question that matters to a trader is not "does this strategy win?". It is "how many more trades until I know whether it wins, and what does the worst plausible scenario say today?". No tool I knew answered that directly, because the honest answer is almost always "we do not know yet", and that does not sell.
The constraints
The decisions
Rank by the worst plausible case, computed on read
Each cell (one market pair with one set of parameters) is ranked by the worst plausible outcome rather than the average one (in statistical terms, the lower bound of the 95% confidence interval). The ranking is recalculated on every request, from each account's full history, instead of being stored and going stale.
That lets the screen show, for every strategy, how many trades it still needs before it proves anything. The public transparency page publishes that scoreboard, including when it is negative.
Rank by average return or hit rate. Discarded: it rewards the cell that got lucky on its first trades, which is exactly the mistake the product exists to prevent.
What learns is the size of the bet, never the strategy
The strategy is deterministic and versioned: every run records the strategy version and the configuration version, and every signal can be followed from the market move that started it to the outcome. The only automatic adjustment is position size, and every risk change is written down before it applies.
Tune the parameters automatically from the results. Discarded: a variant that looked great in replay was measured and thrown out for overfitting. A parameter that fits itself to the past measures the past.
The assistant writes, but only with the system's numbers
Nia, the platform's assistant, drafts the alerts and answers questions in the dashboard and on WhatsApp. Every price-like number in her message has to be on the list the system calculated, and entry and stop have to be present. If not, she tries again knowing the mistake; if she fails again, a standard message goes out with no free text.
To answer about an account, she only receives that account's data; the filter happens earlier, in the database, and does not rely on asking the model to behave. And nothing that changes the account runs on the message that asks for it: she repeats what she understood, with the values spelled out, and waits for a yes.
Give the model tools to fetch whatever it thinks it needs. Discarded: that hands it the choice of which data to read, which is the one decision you do not delegate when the data belongs to someone else.
The result
The platform is live at trade.samuelramos.dev, testing 66 market and strategy combinations with simulated money, with each subscriber's account kept apart from the others, alerts by email and WhatsApp, daily backups with a tested restore, and a watchdog that speaks up when something stops.
Underneath there are about 42 thousand lines of Rust, checked by more than 600 automated tests, plus the Next.js dashboard.
The result that matters most is what the platform says about itself: at the time this case was written, no combination had built up enough proof that it works. The product shows that on its public page instead of hiding it. There is no profit figure here because there is no proven profit, and the product's rule is to never publish a number it cannot back up.
The next step is leaving simulation. First, the platform starts operating real digital wallets under supervision: every trade is proposed by the system and only goes through after a person approves it. Later, with a track record of approvals and outcomes to back the decision, it operates on its own. The order is the same as everywhere else in the product: autonomy only where there is already proof.
tech sheet
- stack
- Rust · axum · PostgreSQL · Valkey Streams · Next.js · Docker
- duration
- in production since September 2026
- role
- Product, architecture and development