Signal Miner

Mine IF-THEN signals across a ticker universe.

Pick assets to invest in and assets to check signals against. Signal Miner brute-forces millions of Composer-style rules across all nine of Composer's condition functions (price, moving averages, EMA, RSI, returns, volatility, and drawdown), backtests each one, and ranks what worked. Everything runs in your browser on committed price history. No signal is a recommendation.

Loading price data...

Read this first. This tool tests tens of thousands of rules at once, so some will look brilliant purely by chance. High returns on a signal that is rarely active (low Time in Market) are usually noise. Results ignore trading costs, slippage, and taxes, and use history from 2010 onward, or from the listing date of the most recently launched ticker you selected, whichever is later. Treat every row as a hypothesis to investigate, never a strategy to run. This is an educational tool and is independent of Composer.trade.

1. Assets

Pick Target tickers (what you invest in when a signal fires) and Signal tickers (what conditions are measured on). Conditions are built only from the Signal set, so a target is not measured unless you also add it there. To test a rule that reads its own target, like if RSI(TECL) > 79 then hold TECL, put that ticker in both boxes. Chips are grouped by asset class, and each group has an All toggle; the row-level button selects the whole universe. Watch the estimate below as you go: signal counts grow with the square of the tickers used, so selecting everything is far heavier than it looks. A dashed chip means the fund covers less than 90% of the price history, so it both shortens the sample window for the whole run and has its metrics fit to fewer days.

Target tickers
Signal / comparison tickers

2. Signal families

Every family maps to a native Composer condition type, built from the nine functions Composer exposes. Each group has an All toggle. Eleven are on by default; the rest are off because they are either expensive or rarely productive, not because they do not work. Watch the estimate in section 1 as you add them: the compare families put two (ticker, window) operands on either side, so they grow with the square of tickers times windows, while the vs level families grow only linearly.

3. Filters & combinations

After single signals are ranked, the survivors can be paired with AND logic (both must be true), exactly like stacking two conditions in Composer. Once you have run a backtest, these four controls update the results live, no re-run needed (changing tickers, families, or the min period still needs a fresh run).

How to read a row

A row like MA-Return(10d) of KMLM < MA-Return(90d) of VIXM → QQQ means: on any day the 10-day average daily return of KMLM is below the 90-day average daily return of VIXM, hold QQQ the next day, otherwise hold cash. Calmar is annualized return divided by worst drawdown, so above 1.0 means a year's gain exceeds the worst peak-to-trough loss, Sortino rewards return per unit of downside volatility, Profit Factor is gross gains over gross losses, and Time in Market is the share of days the signal was active. See the Glossary for each term.

Copy JSON puts a complete Composer symphony on your clipboard, ready to paste straight into the Composer editor: an IF block that holds the target when the signal fires and a cash proxy (BIL) otherwise. AND-combined rows export as an "all of" compound condition. Swap the else asset or weighting inside Composer to taste.

Reworked from a community Google Colab notebook by IAMCAPTAINNOW (shared in the Composer Discord). Rebuilt from scratch to run fully client-side with no data upload.