> Website update, 2 November 2026: **independent indicator events** are the default chart view again. All ten studies below are selectable; each has its own labels, with ATR remaining neutral. The existing core-five setup engine is available separately under Combined setups. Indicator observations are not simulated trades. Automated trading is unchanged. # Hyperquant — 10 quantitative chart studies Research date: 31 October 2026 (Asia/Ho_Chi_Minh). Exa was used to review 25 search results across five search angles, followed by direct reads of ten primary documentation pages. Search results were filtered to the indicator creator, chart-platform documentation and brokerage technical guides. The selected studies are widely used and cover distinct types of information; the research does **not** establish a measured global ranking of the ten most popular futures indicators. This is a reproducible rule engine on exchange OHLCV, not a validated strategy or a model estimating a probability of profit. Parameters below are initial, explicit settings. Formula references support the definitions; the exact marker rules are Hyperquant implementation choices and have not been optimized or shown to have trading edge. ## Formula, interpretation and chart contract | Study | Calculation | Descriptive state / confirmed event | Chart mapping | Main limitation | |---|---|---|---|---| | EMA 20 / 50 | EMA uses α=2/(N+1), seeded with the first N-bar SMA. | Bullish alignment: close > EMA20 > EMA50; bearish is the reverse. Marker: EMA20 crosses EMA50. | Two price overlays and current price levels. | Lag; repeated crosses in ranges. The 20/50 choice is a configuration, not an optimal setting established by research. | | RSI 14 | Wilder RMA14 of up/down close changes; 100−100/(1+average gain/average loss). | Confirm bullish momentum on two consecutive closed RSI values ≥52, bearish on two consecutive values ≤48. Emit once per active episode; 30/70 remain context. | Separate 0–100 pane, thresholds 30/50/70; event attached to that candle's close on price chart. | Overbought does not automatically mean short; oversold does not automatically mean long. | | MACD 12 / 26 / 9 | EMA12−EMA26; signal EMA9 of MACD; histogram MACD−signal. | Histogram sign describes relative momentum; marker on MACD/signal crossing. | Separate unbounded oscillator pane with zero reference; event on corresponding price candle. | Highly correlated with EMA and RSI; multiple momentum votes are not independent evidence. | | Bollinger 20 / 2 | SMA20 ±2 times 20-bar population standard deviation (divide variance by N). Width=(upper−lower)/basis×100. | State beyond a band describes a continuation breakout. Marker on first close outside, not merely a wick touch. | Upper/basis/lower price overlays; current outer levels. | A band touch alone is not a reversal. Two standard deviations do not imply a normal-distribution confidence interval. | | ATR 14 | TR=max(high−low, abs(high−previous close), abs(low−previous close)); Wilder RMA14(TR). First TR uses high−low. | Always direction-neutral. Expansion event when ATR first exceeds 1.5× trailing 50-bar ATR average. | Separate ATR pane; close ±2 ATR as explicitly labelled volatility reference prices. | Measures range, not direction or a complete liquidation/stop model. The 1.5× and 2× rules are heuristic defaults. | | ADX / DMI 14 | Positive and negative directional movement are mutually exclusive; Wilder-smoothed DM/TR gives ±DI; RMA14(DX) gives ADX. | ADX row stays direction-neutral. <20 weak; 20–25 transition; ≥25 stronger trend. A directional marker requires a ±DI crossover and ADX≥25. | Separate ADX/+DI/−DI pane, 20/25 thresholds; qualified DI event on price chart. | ADX can rise in a strong decline. It must not be labelled bullish merely because ADX rises. | | Session VWAP | Σ(HLC3×base-asset volume)/Σ(base-asset volume), reset at 00:00 UTC. | Price above/below describes intraday location. Marker on same-session close/VWAP cross. | Price overlay and current VWAP level. | Bar-based HLC3 is an approximation of trade-level VWAP. Crypto has no unique official daily session; UTC is an explicit convention. | | Donchian 20 | Highest high and lowest low of the **previous** 20 bars, excluding the signal bar. | Close above/below previous channel = breakout/breakdown. Marker only on entry into that state. | Prior-channel price overlays and breakout/breakdown levels. | Including the current candle would make a strict close > current highest high impossible. False breakouts and slippage remain. | | Stochastic 14 / 3 / 3 | Raw %K=100(close−lowest low14)/(highest high14−lowest low14); slow %K=SMA3(raw); %D=SMA3(slow %K). | K/D relationship describes momentum. Marker: bullish cross from previous K<20, bearish cross from previous K>80. | Separate 0–100 pane, 20/80 thresholds; event at candle close. | Extremes can persist in trends; crossing the threshold alone is not an entry instruction. | | On-balance volume | Previous OBV + sign(close−previous close)×current bar volume; seed 0. | Compare OBV with EMA20(OBV) and price with EMA20(price). Marker on OBV cross only when price confirms the same direction. | Separate base-asset-volume pane; no fake price level for OBV. | Absolute level depends on loaded history. It is not order-flow delta, aggressor buy/sell volume, or a cross-exchange flow measure. | ### Primary sources - [Fidelity: EMA](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/ema) supplies the recursive formula and SMA seed convention; it explains the sensitivity/lag tradeoff. - [TradingView: RSI](https://www.tradingview.com/support/solutions/43000502338-relative-strength-index-rsi/) supplies the Wilder RMA calculation, default 14 and bounded oscillator interpretation. - [Fidelity: MACD](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/macd) specifies the 12/26/9 convention and range-market whipsaws. [TradingView: MACD](https://www.tradingview.com/support/solutions/43000502344-moving-average-convergence-divergence-macd-indicator/) clarifies histogram and separate-pane interpretation. - [John Bollinger's rules](https://www.bollingerbands.com/bollinger-band-rules) distinguish tags from signals, discuss continuation outside bands, identify defaults and reject naïve statistical-confidence assumptions. - [TradingView: ATR](https://www.tradingview.com/support/solutions/43000501823-average-true-range-atr/) gives true range, RMA smoothing and the non-directional volatility interpretation. - [TradingView: ADX](https://www.tradingview.com/support/solutions/43000589099-average-directional-index-adx/) describes Wilder DM/TR/DX smoothing, trend-strength thresholds and DI context. - [TradingView: VWAP](https://www.tradingview.com/support/solutions/43000502018-volume-weighted-average-price-vwap/) specifies HLC3-volume accumulation and the need for an anchor longer than the candle interval. - [TradingView: Donchian channels](https://www.tradingview.com/support/solutions/43000502253-donchian-channels-dc/) describes rolling extremes and the common 20-period setting. Hyperquant deliberately shifts its decision channel one candle backward. - [TradingView: Stochastic](https://www.tradingview.com/support/solutions/43000502332-stochastic-stoch/) specifies K/D smoothing and explains why overbought/oversold can accompany strengthening trends. - [Fidelity: OBV](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/obv) specifies signed-volume accumulation and why direction matters more than the arbitrary absolute level. ## Implementation and data requirements `src/discrete-indicators.js` provides the ten-study formulas. The website and new backtest share `analyzeIndependent(candles, {intervalSeconds, now})` from `src/indicator-events.js`; `src/indicators.js` remains the legacy core-five comparator. Candles use Unix **seconds** and numeric `{time, open, high, low, close, volume}`. Volume must be exchange base-asset volume, not turnover in USD. Invalid OHLC, negative volume, duplicate or unordered timestamps throw an error; no synthetic candles are created. The independent wrapper excludes candles whose end timestamp is in the future; it restarts every study's warmup after a timestamp gap, without filling missing bars. The loader must detect missing candles and stale feeds. The raw formula engine does not infer an expected interval or fill gaps; the shared independent wrapper explicitly receives that interval and splits history at gaps. A result computed from a gapped series must not be presented as a continuous, current signal. A chart may show a developing candle, but the quant engine must exclude it until the exchange time confirms completion. Labels appear at the signal candle's timestamp and store its close, not an executable next-bar fill price. Return shape: ```js { indicators: [{ id, name, category, numericValue, value, signal, detail, rule, ready, warmup, levels: [{price, label, color}], series: [{name, color, pane, unit, data: [{time, value}]}], thresholds: [{value, label}] }], markers: [{ id, time, price, indicatorId, direction, position, color, shape, text, detail, confirmed: true }], candleCount, lastTime, asOf, methodology } ``` Indicator IDs are `ema`, `rsi`, `macd`, `bollinger`, `atr`, `adx`, `vwap`, `donchian`, `stochastic`, `obv`. `signal`/`direction` is `bullish`, `bearish`, or `neutral`. These are descriptive state labels; `markers` are discrete rule events. `value` is presentation text and `numericValue` is the underlying number or `null`. `series.pane` is `price` or `oscillator`; do not put RSI, MACD, ATR, ADX, Stochastic or OBV directly on the asset price scale. RSI 70 has no unique corresponding BTC price, so no invented inverse-price mapping is supplied. Marker IDs are deterministic. Minimum seed lengths: EMA20/50 50 bars; RSI14 15; MACD12/26/9 34; Bollinger20 20; ATR14 14; ADX14 28; Donchian20 21; Stochastic14/3/3 18; OBV comparison 20. ATR-expansion events additionally need the trailing 50 ATR values. Minimum length is not full stabilization: load several hundred candles where possible for recursive studies. Changing the beginning of the history changes EMA/RMA seeds and OBV baseline; comparisons across platforms must align seed history, smoothing, sessions and price sources. VWAP refuses to use a truncated first session when its first loaded candle is not at 00:00 UTC. It becomes available upon the next complete session start, with positive cumulative volume. It should be offered on intraday intervals only; a daily VWAP on daily candles degenerates to one bar's typical price. No crossover is generated across a session reset. Documented degenerate conventions: unchanged close history produces RSI=50 when both smoothed gain and loss are zero; no losses with gains gives RSI=100; zero stochastic range gives 50; zero directional range produces DI=DX=ADX=0. These are deterministic neutral handling choices and can differ from a chart vendor's undefined/null convention. Division by zero does not produce a fabricated infinite series value. ## Validation performed `node --test tests/discrete-indicators.test.js tests/indicator-events.test.js tests/indicator-strength.test.js` checks the current ten-study engine against analytically known EMA, RSI, MACD, Bollinger, ATR, DMI/ADX, VWAP, Donchian, Stochastic and OBV values; warmups; flat/zero-volume handling; session resets; missing-session suppression; shifted channels; closed-bar and gap handling; causal strength/evidence snapshots; color persistence on selection; and independence from the combined setup engine. `tests/indicators.test.js` covers the legacy core-five implementation, while `tests/baseline-indicators.test.js` covers the frozen historical ten-study baseline. Prefix-invariance tests verify that appending later candles changes neither past events nor their intensity or evidence when the input history prefix is held fixed. This verifies numerical and causal behavior, not profitability. No backtest performance, win rate, confidence percentage or return estimate is fabricated. No research evidence here supports treating ten correlated indicators as ten independent votes. Keep trend, momentum, volatility/risk, breakout and volume groups distinguishable in the UI. ## What a strategy evaluation would require Before promoting any rule into automated execution: define a separate entry/exit policy and position sizing; execute only after the signal close; model bid/ask spread, exchange fees, funding, slippage and order rejection; preserve delisted instruments and time-specific universes; split calibration and out-of-sample periods chronologically; use walk-forward evaluation across assets and regimes; report turnover, exposure, drawdown and sensitivity alongside returns; account for searching many rules/parameters. Exchange-specific funding and open interest are valuable futures context, but are not substituted for the ten OHLCV indicators above and are not conflated with OBV. ## Archived signal selection and lifecycle (31 October 2026 revision) **Historical behavior only.** This section records an earlier implementation. The current independent view allows all ten studies, records observations without lifecycle statuses, and uses the color/evidence contract below. The old three-study limit and expiry/invalidation rules are not the current independent-label behavior. The toolbar **Indicators** picker chooses up to three studies from the ten above. Only those studies draw overlays/oscillators and emit rows in the signal panel. Each row and canvas badge share a deterministic event ID. Visible badges use the indicator name and direction (for example EMA ↑ or RSI ↓), with the confirmation timestamp distinguishing repeated events. Chronological indices remain internal and are not shown in the UI. The canvas label is anchored to the signal candle's closing price at the candle's opening timestamp, matching OHLC chart coordinates. The row's confirmation timestamp is **opening timestamp + candle duration**, because the signal was not available at candle open. Prices and trigger details are captured at that event, not substituted with current indicator values. Labels are rendered by a native chart primitive, so they remain attached during pan/zoom and appear in exported chart snapshots. In dense clusters the selected label gets placement priority; zoom in to separate overlapping events. ### Explicit monitoring rules Formula references do **not** establish a universal expiry or invalidation system. Hyperquant uses the following transparent implementation policy. These rules describe whether a condition persists; they do not prove a profitable trade strategy. They do not create or manage any order. | Study | Invalidation evaluated on subsequent closed candles | |---|---| | EMA | EMA20 moves strictly to the opposite side of EMA50. | | RSI | RSI14 moves strictly to the opposite side of 50. | | MACD | MACD moves strictly to the opposite side of its signal line. | | Bollinger | Close returns inside/on the corresponding outer band, using that candle's updated band. | | ATR expansion | ATR14 becomes ≤1.5 × its trailing 50-bar average. No Long/Short direction is attached. | | DMI with ADX filter | +DI/−DI moves to the opposite direction, or ADX falls below 20. | | Session VWAP | Close moves strictly to the other side of same-session VWAP. The event expires at the next UTC session. No daily-session VWAP signal is emitted on a daily chart. | | Donchian breakout | Close returns to/across the **frozen prior-20-bar breakout level recorded at the event**, not the subsequently moving channel. | | Stochastic | %K moves strictly to the opposite side of %D. | | OBV | OBV moves to the opposite side of EMA20(OBV), or price moves to the opposite side of EMA20(price). | The configurable maximum monitoring horizon is 5/10/20/50 closed bars, default 20. It is a product setting, not a research-derived optimal trade duration. A signal starts active on its confirming close; later closes may invalidate or expire it. A resolved signal never reactivates and its original trigger stays in history. If horizon expiry and invalidation coincide on the same close, expiry takes precedence; a UTC VWAP reset also takes precedence. The lifecycle is evaluated on observed closed bars, not wall-clock interpolation. Stale data is indicated separately and must not be mistaken for a newly checked active signal. There are no generic “retest” labels: a retest would require a separately specified tolerance, reference level, timing and failure rule. The current implementation labels the ten verified indicator rules rather than fabricating a retest from a visual resemblance. ### References rechecked for this revision - [John Bollinger's original rules](https://www.bollingerbands.com/bollinger-band-rules): distinguishes band tags from confirmed outside closes, and cautions against redundant indicators. - [Fidelity MACD](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/macd) and [EMA](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/ema): moving-average and crossover definitions. - [TradingView ATR](https://www.tradingview.com/support/solutions/43000501823-average-true-range-atr/): volatility measurement with no direction. - [TradingView Stochastic](https://www.tradingview.com/support/solutions/43000502332-stochastic-stoch/): bounded momentum and K/D interpretation. - [TradingView VWAP](https://www.tradingview.com/support/solutions/43000502018-volume-weighted-average-price-vwap/): session anchors, intraday usage and daily-chart limitation. - [TradingView Donchian](https://www.tradingview.com/support/solutions/43000502253-donchian-channels-dc/): rolling high/low channels and breakout context. Excluding the signal bar is Hyperquant's causal implementation choice. Additional automated tests cover selection limits, selected-only events, first-close activation, irreversible invalidation, exact closed-bar expiry, frozen Donchian levels, UTC VWAP expiry and prefix-stable event identities/numbers. These tests verify mechanics, not future returns. ### RSI signal noise filter (31 October 2026) The Wilder RSI14 calculation and plotted numeric values are unchanged. Hyperquant confirms bullish momentum only after two consecutive closed-bar RSI readings ≥52, or bearish momentum after two consecutive readings ≤48. Markers attach to the second qualifying candle; forming candles never qualify. A reading inside the buffer or missing value resets pending confirmation. Once confirmed, remaining on the same side of 50 produces no duplicate events, even if RSI re-enters the buffer. Crossing strictly to the opposite side of 50 invalidates the old setup; a new setup requires two consecutive qualifying closes again. Signal expiry remains unchanged. The chart, background scanner and JEV momentum family all consume the same confirmed state; model-cache version changes prevent reuse of old-rule verdicts. This restores the two-close baseline at the user's request; it is not a claim of improved backtested performance. Frozen intraday-v1 research results remain unchanged. Fees, technical evidence thresholds and JEV risk gates remain unchanged. ## Independent profit simulation — 2 November 2026 The chart defaults to Indicator events and renders only the selected studies. Clickable labels carry indicator identity, direction, observed close and confirmation time. They do not inherit composite target/expiry/invalidation labels. The combined setup/JEV view is separate. Chart 1m continues to project 5m events onto the final 1m candle of the completed bucket. `src/indicator-candidates.js` creates nine directional event streams and two optional family-confluence streams. `src/paper-trades.js` simulates next-open fixed TP/SL brackets, stop-first ambiguous candles, adverse stop gaps, no favorable target gap improvement, timeout, fees, historical funding and censored open positions. It never submits orders. RSI/VWAP/ADX lifecycle changes do not terminate these simulated positions. The frozen research protocol tests 66 configurations on 49 native altcoins. Selection requires positive stress net on both chronological train and validation; no configuration qualified. Some final-week configurations were profitable, but these are post-hoc observations, not validated strategy selections. Full results and individual trade ledgers: `docs/backtests/independent-profit-v5-2026-11-02/report.html`. ## Event evidence and strength colors — 2 November 2026 The chart and matching history row use green for ordinary bullish observations, red for ordinary bearish observations, and yellow with a ★ for strong observations. The ↑/↓ arrow always retains direction, including after selection. ATR is directionless: ordinary events use gray; a strong ATR expansion is yellow with a dot, never a Long/Short arrow. A legend explains the colors. Color is not the only encoding. Each event detail names the actual trigger, shows its own indicator values at the confirming candle, states what a trader can watch next, links the primary formula reference, and distinguishes conventional definitions from Hyperquant settings. It does not invent divergences, retests, Bollinger squeezes, zero-line MACD crosses, or order-flow observations that the engine does not detect. Suggested follow-up observations do not create a trade lifecycle. `src/indicator-evidence.js` defines `indicator-strength-v1`. Every criterion in the corresponding row below must pass at the event close. All are **Hyperquant descriptive heuristics**, not source-validated thresholds, calibrated confidence or a strategy selected through backtesting. These rules have not been shown to improve profitability. Indicators remain separately evaluated; no count of correlated votes promotes a label to yellow. ATR is only a scale normalization for price distances, not a directional vote. In the table, d = +1 for bullish and −1 for bearish. ATR means current Wilder ATR14. Δ3 is change from three closed bars earlier. Insufficient history, missing values or nonpositive normalization denominators cannot qualify as strong. Means use only the current contiguous segment. These new presentation fields do not change event triggers or the paper-trade candidate selection. | Event | All conditions for yellow ★ | |---|---| | EMA20/50 cross | d × Δ3 EMA20 / ATR ≥0.25; d × Δ3 EMA50 / ATR ≥0.10; d × (close−EMA20) / ATR ≥0. | | RSI momentum confirmation | d × (RSI−50) ≥10; d × Δ3 RSI ≥5. This measures momentum intensity, not reversal likelihood. | | MACD signal-line cross | d × MACD / ATR ≥0.25; d × Δ3 histogram / ATR ≥0.10. | | Bollinger outside-band close | Close beyond the corresponding band by ≥0.25 ATR; absolute band width ≥1.10× width five bars earlier. No squeeze is inferred. | | ATR expansion | ATR14 ≥2× its trailing 50-bar mean (including this close). Still no direction. | | DMI cross with ADX≥25 | ADX≥35; Δ3 ADX≥1; d × (+DI−−DI) ≥5. | | Same-session VWAP cross | d × (close−VWAP) / ATR ≥0.5; d × (close−open) / ATR ≥0.5. | | Prior-20-bar Donchian break | Close beyond the frozen channel boundary by ≥0.5 ATR. | | Extreme-zone Stochastic K/D cross | Bullish K≥20 / bearish K≤80, and d × (K−previous K) ≥10. An ordinary cross need not leave its extreme zone. | | OBV/EMA20 cross with price alignment | d × (OBV−EMA20 OBV) / mean volume ≥1; current volume / mean volume ≥1.5. Mean volume is the previous 20 bars, excluding this bar. | These intensity gates can highlight extended moves as well as useful momentum. Yellow is not evidence of a better entry price. The frozen profit simulation still found no candidate that qualified on both train and validation. Reclassifying colors is not a new profitability result; a future test of yellow versus ordinary events must freeze these thresholds before evaluating unseen periods.