I’m a crypto enthusiast and active trader — these are the textbook reads I run on myself before I take a setup.
Five indicators across three axes — regime, momentum, participation — combined under a regime-gated composite. Run on a small set of liquid USDT pairs across a selectable analysis timeframe gated by the next higher one, and published as-is. No price targets, no claim of edge.
Not financial adviceThese are indicator readings computed from public OHLCV data using common formulas. Past indicator behavior does not predict future returns. Do your own research.
I’m in this market because I find it genuinely interesting.
I trade crypto actively on my own book — looking for clean setups on the pairs I care about. What I find endlessly interesting is the mix of code, markets, and human behavior that makes a chart move, and I’d rather read it with the same five tools every time than chase a fresh narrative each visit.
These signals are what I personally check before I take a position. Putting them in one place, computed the same way for every pair, is how I keep myself honest — and how I can share what I actually look at with anyone curious enough to scroll this far. Nothing here is a call.
Trading my own book
Looking for clean setups using the same five indicators on every pair.
Not selling anything
Methodology
Every formula. Every threshold.
The ledger scans a curated set of liquid USDT pairs across two timeframes: a higher-timeframe regime gate (one zoom-level above the selected analysis timeframe) sets the trend, and the selected analysis timeframe provides the entry-level reads. For each pair we compute seven textbook indicators across five orthogonal axes — regime, momentum, participation, momentum/price divergence, and funding crowding — then combine them under a regime-gated composite. No price targets, no tier system, no claim of edge — just the readings, openly described. OHLCV and live ticks come from Binance and Bybit public market-data APIs (and Hyperliquid for HYPE); funding rates come from the corresponding perpetuals venue and are sourced from data.binance.vision archives with OKX tail-fill for the current month.
Regime (EMA 50 / 200 · higher TF)
Formula
EMAs of close on the higher-timeframe chart, periods 50 and 200. Regime is bullish when price > EMA200 AND EMA50 > EMA200; bearish when price < EMA200 AND EMA50 < EMA200; otherwise no regime.
Scoring
+1 in a bull regime, -1 in a bear regime, 0 otherwise. Acts as a gate on the composite — when the regime is 0, the composite is 0 and we report neutral, regardless of what momentum says.
Score is the distance from 50, rescaled so RSI 70 → +1 (overbought, contrarian bearish) and RSI 30 → −1 (oversold, contrarian bullish). We intentionally read RSI contrarian: extreme overbought = bearish lean, extreme oversold = bullish lean.
No alpha for sale, no signals service, no calls. Just what I look at.
In it across cycles
Following crypto through bull, bear, and the long stretches in between.
EMA 9 / 21 crossover
Formula
Exponential moving averages of close, periods 9 and 21 on the analysis timeframe. We look at the sign of (EMA9 − EMA21) and whether a fresh crossover occurred on the latest 1–3 candles.
Scoring
+1 if EMA9 just crossed above EMA21 (fresh bullish cross), +0.5 if EMA9 > EMA21 without a fresh cross, mirror for bearish, 0 if essentially flat.
MACD (12, 26, 9)
Formula
MACD line = EMA12(close) − EMA26(close). Signal line = EMA9(MACD line). Histogram = MACD − Signal.
Scoring
Score is sign(histogram) × min(|histogram| / σ, 1), where σ is a rolling stdev of the histogram over 50 bars. This rewards expanding momentum and dampens noise.
Volume (20-bar participation)
Formula
ratio = latest analysis-TF volume / mean(prior 20 analysis-TF volumes).
Scoring
Score = tanh((ratio − 1) × 0.5), clamped to [-1, +1]. Roughly: 1.5× avg ≈ +0.24, 2× ≈ +0.46, 3× ≈ +0.76, half-avg ≈ −0.24. Reads participation only — not direction — so it confirms or fades the other reads rather than initiating them.
Divergence (RSI + MACD vs price)
Formula
Pivot-confirmed swing highs/lows over the last 30 bars (2 bars on each side, minimum 5-bar gap between the two swings being compared). Two flavors: regular divergence (reversal — price made a higher high while the oscillator made a lower high, bearish; mirror at the lows for bullish) and hidden divergence (continuation — price made a higher low while the oscillator made a lower low, bullish-in-uptrend; mirror at the highs for hidden bearish). Computed against both RSI(14) and the MACD histogram; if both sides of the chart fire, the one whose swing is closer to the latest bar wins.
Scoring
±0.5 when RSI and MACD agree on direction (regardless of whether both are regular, both hidden, or mixed types), ±0.3 when only one fires, 0 when directions conflict or no divergence is detected. A score of 0 (no divergence) is excluded from the composite mean rather than treated as a neutral vote, so absent divergence doesn't dilute the other indicators. Direction drives the score; the regular-vs-hidden split is surfaced in the display label (regular = reversal warning, hidden = trend-continuation confirmation) so the user can read intent at a glance. Capped low on purpose — divergence is empirically a confirmation signal, not a trigger, and it shouldn't overpower the trend stack.
Funding rate (z-score · confirmation)
Formula
Perpetual funding rate normalised as a z-score over the prior 90 aligned bars (~15 days on 4h, ~3 months on 1d). Score = tanh(z × 0.5), clipped to [-0.5, +0.5]. Data sourced from data.binance.vision monthly archives for the eight Binance-listed majors (with OKX tail-fill for the in-progress month) and Hyperliquid's info API for HYPE — perp funding informs spot price action via arb even on pairs we read spot klines from.
Scoring
Read as confirmation, not contrarian. Crowded longs in a sustained uptrend (extreme positive z) read bullish; crowded shorts in a downtrend read bearish. We tried the contrarian read first and it was destructive over the backtest window — funding crowding in crypto rides trend rather than exhausting it on the timeframes we trade. Capped at ±0.5; sub-threshold reads (|score| < 0.05) are excluded from the composite mean — funding is a supporting tiebreaker, not a primary trigger. The 0.05 threshold is the winner from a full A/B/C/D production sweep with out-of-sample sanity check, replacing the iteration-B default of 0.15.
Composite
composite is regime-gated. If the higher-TF regime is 0 (no clean trend), composite = 0 — neutral by honest admission, not by averaging conflict away. In a bull regime, composite = max(0, mean of the analysis-TF reads); in a bear regime, composite = min(0, mean). A zero-score divergence or funding read is excluded from the mean rather than treated as a neutral vote — absent divergence and sub-threshold funding don't dilute the other reads. Lean is bullish if composite ≥ +0.30, bearish if ≤ −0.30, neutral otherwise. This means we never surface a bullish call against a bearish higher-TF trend (or vice versa) — a 'no, this isn't a setup' rather than averaging it into the middle.
-1.00-0.300.00+0.30+1.00
BearishNeutralBullish
Caveats
Indicator readings are not predictions; they are summaries of recent price action and participation. For an actual backtest of the stack — long+short trades replayed bar-by-bar over historical data, with stops, targets, and a full per-trade ledger — see /ledger/backtest.
Most pairs sit in chop most of the time. The regime gate is deliberately strict — expect a healthy fraction of cards to read 'neutral' (composite = 0) because the higher-TF trend isn't clean. That is the feature, not the bug.
Three of the analysis-TF reads (RSI / EMA cross / MACD) are derivatives of close prices and will correlate. Divergence is also derived from RSI/MACD and so correlates with them. Volume and funding are the only orthogonal axes on the analysis timeframe; regime is the only orthogonal axis overall. Treat the composite as one perspective, not seven independent ones.
Funding rate is sourced from perpetual futures contracts even on pairs whose klines come from spot — perp funding directly drives spot price action via arb, and routing through perp is the standard reading. data.binance.vision serves the historical archive and is the same CDN we use for spot klines; OKX fills the current in-progress month for Binance pairs; Hyperliquid's info API serves HYPE end-to-end.
Scans run on demand and are cached for a duration that scales with the analysis timeframe (faster TFs refresh more often). The 'last scan' time on the page reflects when the exchange was last queried.