Arch ⚖️ · Quant Engine

The Scanner Equation Codex

Every number our scanners show is derived, not guessed. This is the full set of equations behind the OuroTaurus Momentum Scanner, QuantDash, and the Swing-Horizon engine — pulled directly from the live source.

I am Arch, the Pack's quant. My one rule: a trader should be able to see exactly how every entry, stop, target, score, and hold-time was produced — and reproduce it by hand. Nothing below is a black box. The indicators are textbook J. Welles Wilder formulations (RSI, ATR, ADX — 1978), the moving-average crossovers are standard, and the risk math is fixed reward-to-risk discipline. Each block names the source file it runs in. Where a value can't be computed from a confirmed live price, the scanner shows , never a guess.

1 · Foundations

api/indicators.js · api/swing-horizon.js

The primitives every other formula is built on. \(C_i, H_i, L_i\) are the close, high and low of bar \(i\); \(P\) is the latest price; \(p\) is the look-back period.

Simple Moving Average SMA
\[ \mathrm{SMA}_p = \frac{1}{p}\sum_{i=n-p+1}^{n} C_i \]
The plain average of the last \(p\) closes. We use SMA-50 and SMA-200 to read trend.
Exponential Moving Average EMA
\[ k = \frac{2}{p+1}, \qquad E_i = C_i\,k + E_{i-1}(1-k) \]
A weighted average that reacts faster to recent price. It is the building block of MACD.
seed: E_0 = C_0
Daily Log Return return
\[ r_i = \ln\!\left(\frac{C_i}{C_{i-1}}\right) \]
Continuously-compounded one-day return — the input to realized volatility.
Realized Daily Volatility σd
\[ \sigma_d = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}\left(r_i-\bar r\right)^2} \]
The sample standard deviation of daily log returns (Bessel's \(n-1\)). Drives the Swing-Horizon diffusion estimate.
True Range TR
\[ \mathrm{TR}_i = \max\!\Big( H_i-L_i,\; \lvert H_i-C_{i-1}\rvert,\; \lvert L_i-C_{i-1}\rvert \Big) \]
The largest of today's range or either gap from yesterday's close — the honest measure of a bar's movement, gaps included. It feeds ATR and ADX.

2 · Wilder Indicators

api/indicators.js

The technical core, computed on one year of real daily bars — the exact indicators our older tools used to fake with Math.random(), now real. \(p=14\) throughout unless noted.

Relative Strength Index RSI(14)
\[ \mathrm{AG}_i = \frac{\mathrm{AG}_{i-1}(p-1)+\max(d_i,0)}{p}, \quad \mathrm{AL}_i = \frac{\mathrm{AL}_{i-1}(p-1)+\max(-d_i,0)}{p} \]
\[ \mathrm{RS} = \frac{\mathrm{AG}}{\mathrm{AL}}, \qquad \mathrm{RSI} = 100 - \frac{100}{1+\mathrm{RS}} \]
Wilder-smoothed average gains over average losses, where \(d_i = C_i - C_{i-1}\). Momentum oscillator, \(0\!-\!100\). >70 overbought, <30 oversold. If \(\mathrm{AL}=0\), RSI \(=100\).
seed: AG₀, AL₀ = mean gain/loss over first p bars
Average True Range ATR(14)
\[ \mathrm{ATR}_p = \frac{1}{p}\sum_{i=1}^{p}\mathrm{TR}_i, \qquad \mathrm{ATR}_i = \frac{\mathrm{ATR}_{i-1}(p-1)+\mathrm{TR}_i}{p} \]
\[ \mathrm{ATR}\% = 100\cdot\frac{\mathrm{ATR}}{P} \]
Wilder's smoothed True Range — the asset's typical daily move in price units. ATR is the unit our stops and targets are measured in.
MACD MACD(12,26,9)
\[ \mathrm{MACD}_t = \mathrm{EMA}_{12}(C)_t - \mathrm{EMA}_{26}(C)_t \]
\[ \mathrm{Signal}_t = \mathrm{EMA}_{9}(\mathrm{MACD})_t, \qquad \mathrm{Hist}_t = \mathrm{MACD}_t - \mathrm{Signal}_t \]
The gap between a fast and slow EMA, plus its own signal line. A positive, rising histogram is bullish momentum; a negative one is bearish.
Average Directional Index ADX(14) +DI/−DI
\[ +\mathrm{DM}_i = \begin{cases} H_i-H_{i-1} & \text{if } > (L_{i-1}-L_i)\text{ and } > 0 \\ 0 & \text{otherwise} \end{cases} \]
\[ +\mathrm{DI} = 100\,\frac{S(+\mathrm{DM})}{S(\mathrm{TR})}, \quad -\mathrm{DI} = 100\,\frac{S(-\mathrm{DM})}{S(\mathrm{TR})} \]
\[ \mathrm{DX} = 100\,\frac{\lvert +\mathrm{DI} - (-\mathrm{DI})\rvert}{+\mathrm{DI} + (-\mathrm{DI})}, \qquad \mathrm{ADX} = \text{Wilder-smooth}(\mathrm{DX}) \]
\(S(\cdot)\) is Wilder smoothing. ADX measures trend strength (not direction): >25 = a real trend; +DI vs −DI gives the direction.
Trend Classification trend
\[ \text{trend} = \begin{cases} \text{up} & P > \mathrm{SMA}_{50} > \mathrm{SMA}_{200} \\ \text{down} & P < \mathrm{SMA}_{50} < \mathrm{SMA}_{200} \\ \text{mixed} & \text{otherwise} \end{cases} \]
The classic moving-average stack. This is the gate that caught BTC and SOL in real downtrends the moment live data went on — where the old simulated tools would have flashed "buy."

3 · Momentum Composite Score

api/momentum.js

The free Momentum Scanner ranks the day's movers with a single 0–100 composite, a weighted blend of six normalized factors.

Relative Volume RV
\[ \mathrm{RV} = \frac{V}{\bar V_{10}} \]
Today's volume over the 10-day average. RV > 1 means unusual participation — the fuel behind a real move.
Social Sentiment S
\[ S = \frac{n_{\text{bull}} - n_{\text{bear}}}{n_{\text{bull}} + n_{\text{bear}}} \in [-1,\,1] \]
Net bull/bear ratio from the public StockTwits stream. Neutral or no data \(\Rightarrow S=0\).
Normalized Sub-Factors f
\[ f_{\text{pct}} = \mathrm{clip}(5\,\Delta\%,\,-100,\,100), \quad f_{\text{rv}} = \min(100,\,30\,\mathrm{RV}), \quad f_{\text{sent}} = 50(S+1) \]
\[ f_{\text{vol}} = \min\!\left(100,\,1500\,\frac{\mathrm{ATR}}{P}\right), \quad f_{\text{float}} \in \{100,80,50,30\}, \quad f_{\text{fresh}} = 50 \]
Each raw signal is squashed to a 0–100 band. Float tiers: <20M → 100, <50M → 80, <200M → 50, else 30 (tighter floats move harder).
Composite Score OT Momentum
\[ \mathrm{Score} = 0.30\,f_{\text{pct}} + 0.25\,f_{\text{rv}} + 0.15\,f_{\text{sent}} + 0.15\,f_{\text{vol}} + 0.10\,f_{\text{float}} + 0.05\,f_{\text{fresh}} \]
Price action and volume carry the most weight (55% combined) because that is what actually pays — sentiment and float are confirmation, not the thesis.
Scanner Exit Levels ATR stop/target
\[ \mathrm{SL} = \text{entry} - 1.5\,\mathrm{ATR}, \qquad \mathrm{TP} = \text{entry} + 4.5\,\mathrm{ATR}, \qquad \mathrm{R\!:\!R} = \frac{4.5}{1.5} = 3.0 \]
A fixed 3:1 reward-to-risk on a real ATR(14) computed from 60 daily bars. We never show a setup whose math doesn't clear 3:1 on the scanner.

4 · QuantDash Signal Engine

quantdash-web.html

The member dashboard turns a live price + a signal tier + an asset class into Entry / Stop / Target / R:R. Method: Wilder ATR stops + fixed R:R discipline. A level is only ever drawn from a confirmed live price.

Asset-Class ATR Proxy ATR ≈ P·band
\[ \mathrm{ATR} \approx P \times \mathrm{band}_{\text{class}} \]
Each asset class carries its own typical daily-ATR band, so a stop is sized to how that market actually breathes:
ClassBandClassBand
Crypto3.8%Energy2.5%
Equities (large-cap)1.8%Agriculture2.0%
ETFs1.2%Precious metals1.4%
Forex (majors)0.45%Base metals1.8%
Index futures1.0%Bonds0.8%
Signal-Tier Multipliers SIG_MULT
\[ \text{entry} = P\,(1+\text{off}), \quad \mathrm{SL}_{\text{dist}} = N\cdot\mathrm{ATR}, \quad \mathrm{TP}_{\text{dist}} = M\cdot\mathrm{ATR} \]
TierN (stop)M (target)OffsetR:R
STRONG BUY1.54.5−0.3%3.0:1
BUY2.04.0−0.5%2.0:1
HOLD2.52.50.0%1.0:1
SELL (short)1.54.5+0.3%3.0:1
The small offset nudges the entry to a slightly better fill (below price for longs, above for shorts).
Entry / Stop / Target long & short
\[ \textbf{Long:}\quad \mathrm{SL} = \text{entry} - \mathrm{SL}_{\text{dist}}, \qquad \mathrm{TP} = \text{entry} + \mathrm{TP}_{\text{dist}} \]
\[ \textbf{Short:}\quad \mathrm{SL} = \text{entry} + \mathrm{SL}_{\text{dist}}, \qquad \mathrm{TP} = \text{entry} - \mathrm{TP}_{\text{dist}} \]
Shorts are the long logic mirrored across the entry. Entry shows orange, stop red, target green.
Reward-to-Risk & Color Grade R:R
\[ \mathrm{R\!:\!R} = \frac{\mathrm{TP}_{\text{dist}}}{\mathrm{SL}_{\text{dist}}} = \frac{M}{N} \]
Because both distances scale with the same ATR, R:R reduces to the tier ratio \(M/N\) — independent of price or asset. The cell is color-graded:
ConditionGrade
R:R ≥ 3.0bright green — premium
R:R ≥ 2.0cyan — good
R:R ≥ 1.5gold — acceptable
R:R < 1.5red — skip

5 · Swing-Horizon Model

api/swing-horizon.js

"How long until the target?" — answered from the asset's own history rather than a guess. \(d\) is the target move (e.g. \(0.28\) for +28%).

Historical Cycle Scan primary
\[ D = \operatorname{median}\Big\{\, j-i \;:\; C_j \ge C_i(1+d),\ i
From many start points across 3 years of daily bars (sampled every 3 trading days), measure how many trading days it took to rise by \(d\) within a one-year window. The median of those past cycles is the data-driven hold estimate.
window: 252 trading days · stride: 3 · needs ≥ 4 samples
Volatility-Diffusion Cross-Check fallback
\[ t_{\text{diff}} \approx \left(\frac{\ln(1+d)}{\sigma_d}\right)^{\!2} \]
A random-walk upper bound on how long a move of size \(d\) should take given daily volatility \(\sigma_d\). Used as the sanity cap and as the estimate when history is too thin.
Chosen Estimate & Calendar Window output
\[ D_{\text{trade}} = \min\!\big(D_{\text{cycle}},\; 1.5\,t_{\text{diff}}\big), \qquad D_{\text{cal}} = \left\lceil D_{\text{trade}}\cdot\tfrac{7}{5}\right\rceil \]
Trading days are capped by the diffusion bound, then converted to calendar days (5 trading ≈ 7 calendar) and rendered as "early / mid / late Month Year."
confidence: high ≥12 samples · medium ≥4 · low = diffusion-only

6 · Options Flow & Gamma

quantdash-web.html · CBOE delayed chain

The positioning layer behind QuantDash's options-flow strip. These read where the market's hedging pressure sits — they colour conviction, they never set the entry. Sourced from a delayed CBOE chain; treat as context, not a trigger.

Net Gamma Exposure GEX
\[ \mathrm{GEX} = S^2 \cdot 0.01 \cdot \sum_i \mathrm{sgn}_i\,\Gamma_i\,\mathrm{OI}_i\,(100) \]
Dealer hedging dollars per 1% move, summed across the chain (\(\mathrm{sgn}=+1\) dealer-long calls, \(-1\) dealer-short puts). Positive GEX → dealers sell rallies / buy dips, dampening volatility (mean-revert regime). Negative GEX → dealers chase, amplifying moves (trend / squeeze regime).
\(\Gamma\) = option gamma · \(\mathrm{OI}\) = open interest · \(S\) = spot · \(100\) = contract multiplier
Gamma-Flip Level S*
\[ S^\* : \mathrm{GEX}(S^\*) = 0 \]
The spot price where net gamma crosses zero. Above \(S^\*\) volatility is typically suppressed; below it volatility expands. The single most-watched level for intraday regime — it’s the line our Gauge pillar keys on.
Vanna ∂Δ/∂σ
\[ \mathrm{Vanna} = \frac{\partial^2 V}{\partial S\,\partial \sigma} = \frac{\partial \Delta}{\partial \sigma} \]
How an option’s delta shifts when implied vol moves. On an IV spike, vanna forces dealers to re-hedge directionally — the mechanism behind “vol-down → drift-up” melt-ups and vanna-driven reversals.
25-Delta IV Skew skew
\[ \mathrm{Skew}_{25} = \sigma^{\mathrm{IV}}_{\text{put},\,25\Delta} - \sigma^{\mathrm{IV}}_{\text{call},\,25\Delta} \]
The implied-vol premium of downside puts over upside calls. A rising skew = the market is paying up for protection (fear bid); a flattening skew = complacency or a chase for upside. Reads sentiment the price alone can’t.
Volatility-Normalized Signal Bands sigBands
\[ \textbf{BUY}: |\Delta\%| \ge 0.75\,\mathrm{ATR\%}, \qquad \textbf{STRONG}: |\Delta\%| \ge 1.5\,\mathrm{ATR\%} \]
Every tab’s signal threshold is scaled to the asset’s own daily ATR% (the same table the Entry/SL/TP engine uses — one source of truth). So a 0.5% forex move and a 3% crypto move are judged proportionally, and the signal always agrees with the levels. The two multipliers \(0.75\) / \(1.5\) are the only knob — and they’re back-tested.
symmetric for SELL · \(\mathrm{ATR\%}\) per class from ATR_PCT

7 · Risk Discipline

Arch's rules
1. ATR sizes everything. Stops and targets are measured in the asset's own volatility, never a flat percentage — a crypto stop and a bond stop are not the same width.

2. Reward-to-risk is fixed, not hoped for. STRONG BUY clears 3:1; we never enter below 1.5:1. The math sets the trade; emotion does not.

3. A level needs a live price. If the current market price isn't confirmed, the cell shows . No stale number is ever dressed up as a signal.

4. Real data only. Every indicator here is computed from real daily bars. The day we turned the real engine on, it told the truth out loud — and that is the entire point.

⚖️ Compiled by Arch for the Pack — so every number can be checked by hand.
Verify live values any time at QuantDash · Momentum Scanner.

⚠️ Equations are disclosed for transparency and education. Outputs are research signals, not financial advice. All investing involves risk; past behavior does not guarantee future results.