SF

ScottFree Flow

Methodology

What this is not

This is not a backtest, and it is not a trading strategy. It is a record of what the market did after each tag appeared on this dashboard, measured the same way every time and published whether or not the answer is flattering.

The purpose is narrower and, we think, more useful: to stop the dashboard making claims it cannot support. If a tag has no measurable edge, this page exists so the site can say so plainly.

Episodes, not readings

The dashboard re-evaluates every rule roughly once a minute. If a condition stays true for forty minutes, that is one thing that happened, not forty. Counting each evaluation would turn the polling rate into evidence — poll twice as often and the sample appears to double.

So consecutive firings are collapsed into a single episode, and every statistic is computed on episodes. A short cooldown after each episode stops one flickering condition being counted as several.

The per-asset cards are a display composite

The “By asset” cards on the dashboard, and the per-family pages that show several readings side by side, are a rearrangement of readings that already exist. Each card gathers the funding, open interest, options and liquidation readings for one asset into one place. It emits no tag of its own, writes nothing, and carries no rule version.

That distinction matters more than it looks. A card that said “crowded funding and building open interest means X” would be a genuinely new rule. It would need an entry in the registry, its own rule version, and a track record measured from zero — because nothing in the four baselines has ever tested that combination, and its component readings' records say nothing about it. A composite invented in the display layer would instead inherit an implied track record that no baseline ever produced: the reader would see four measured readings arranged into a fifth claim that has never been measured at all.

So nothing on those cards is scored, and nothing on them appears on the scorecard. If a combination is ever worth claiming, it becomes a rule in the registry and starts its record at zero, like everything else here.

Effective sample size

Two episodes eight hours apart are separate events. Their seven-day measurement windows, though, overlap by more than ninety-five percent — they are largely one observation of one stretch of market. Treating them as two independent draws would make the evidence look roughly twice as strong as it is.

Every cell therefore reports two numbers: the raw episode count, and an effective count that discounts each episode by how many others overlap it. Where they diverge sharply — and at seven days they diverge by an order of magnitude — both are shown side by side. All confidence intervals use the smaller one.

The four baselines

"Price rose 1.2% after this tag" is not a finding on its own. Price rises after lots of things. The question is whether it rose more than it would have anyway, and that needs something to compare against. We use four, because each is wrong in a different way:

  1. Unconditional. Every window, tagged or not. Simple, and it is fooled by a market that only went up during the sample.
  2. Matched on hour and volatility. Crypto has real intraday seasonality and strong volatility clustering. A tag that mostly fires in one session, or when volatility is already high, would otherwise show those conditions as its own edge.
  3. Matched on trailing return. Several rules read the last 24 hours of price as an input. Comparing them against windows with a similar prior move stops the tag being credited with the move it was computed from.
  4. Cross-sectional. What the other admitted assets did at the same instant, excluding any carrying the same tag. The strongest control available: same moment, same regime, everything the same except the tag.

The headline is the most conservative of the four — the smallest edge any of them supports, including a negative one. Not the average: averaging a ladder that disagrees produces a number no baseline actually supports. When the four disagree sharply, that disagreement is displayed, because it is the finding.

Every baseline is restricted to windows in which the rule could actually have fired. If a feed was down, the rule was not staying silent — it was unable to speak, and those windows are excluded rather than counted as quiet.

Multiple comparisons

There are twenty-two rules, several assets and four horizons. Test a few hundred combinations at the usual 5% threshold and roughly fifteen of them clear it by chance alone. Publishing those as discoveries is the single easiest way for a project like this to produce confident nonsense.

So a Benjamini–Hochberg correction runs across the entire grid at once, and only the corrected values — q-values — are ever displayed. Raw p-values appear nowhere on this site. Significance is also assessed by shifting the return series against the firing times while keeping their spacing, which respects the fact that signals cluster; where the sample is short enough that only a few hundred distinct shifts exist, the resulting p-value is coarse and is labelled as such.

What is excluded, and why

Every exclusion below is displayed as a count wherever it applies, and every one is available as a sensitivity view. A result that changes when an exclusion is lifted is reported as unstable and deliberately not resolved in favour of whichever version looks better.

When a number is not shown

Below twenty effective episodes, no percentage is displayed at all — not greyed out, not shown with a warning. A number on a page gets quoted regardless of what surrounds it. The episode count is shown instead, so the state reads as collecting rather than nothing found.

Rules with no declared direction — where "up" and "down" are not meaningful — never receive a hit rate. Only magnitude, volatility expansion, and adverse movement on both sides. Several tags exist purely as controls: they are supposed to mean "nothing is happening", and if one of them starts predicting the market it is treated as evidence that something upstream is broken, and the entire scorecard is held back until it is explained.

Reporting or predicting

Some inputs are stale by the time a tag fires — options data can lag by up to a day. A tag that only ever appears after a 3% move has already happened, and is followed by a further 0.2%, is reporting that move rather than anticipating anything. To separate the two, the move that occurred before each firing is recorded alongside the move after it, and edge is broken down by how large that prior move was. Where the edge sits entirely in the largest prior moves, the rule is labelled as reporting rather than predicting.

No leaderboard

Nothing on this site sorts rules by performance, and there is no "top signals" view. Sorting several hundred cells by outcome and reading off the top is precisely how a false discovery becomes a headline. Lists sort alphabetically or by sample size, and the code refuses any other ordering.

Liquidation side mappings

Which side was liquidated is the highest-consequence field on the dashboard: get it backwards and the panel reads plausibly while saying the opposite of what happened. Each feed answers a different question — an order direction, a position side, a letter, a numeric code — so the mapping is declared per source rather than assumed, and rendered here from the same declarations the parsers use, so the two cannot drift apart.

SourceEndpoint / fieldMeans

Two are marked unverified, and that is not caution for its own sake: Coinalyze does not document what its fields mean, and Coinglass documents the same field two contradictory ways — as an order direction on its REST page and a position side on its websocket page. Documentation cannot settle those, so the mapping is checked against the market instead.

The primary test is fill versus mark. A liquidated long is a forced sell, so it should fill at or below the mark price from a minute earlier; a short is a forced buy and should fill above it. That is a property of how liquidation works rather than of anyone's prose, and it needs only our own price history. A sign test over the sample decides, so a ratio on a handful of fills is not mistaken for evidence, and the mapping stays unverified below a minimum sample.

Comparing two feeds against each other is kept as corroboration, but it is no longer primary: it needs 48 hours in which both feeds are live, and one of them is rate-limited without a key, so it might never conclude. Two feeds agreeing with each other also cannot confirm the mapping on their own — they can agree and both be inverted relative to the market, which is exactly what a documentation-derived mapping produces.

Until it resolves, liquidation readings on the dashboard carry an unverified marker and the directional badge is replaced with neutral wording. The long/short totals are unaffected — they are evidence; it is the verdict the mapping determines. An inverted result is never auto-corrected: flipping a sign would silently rewrite the meaning of every row already recorded under it.

Every displayed statistic carries the rule version it was measured under, the date range, the cohort, the raw and effective episode counts, and a hash of the code that produced it. A rule whose thresholds change starts a new track record rather than continuing the old one.