Reviewed October 25, 2026

Methodology

This page exists so that every figure on the desk can be checked rather than trusted. It states what is computed, from which data, with which formula, and — in a section that is not an afterthought — what each method cannot do. Where a result was measured, the measurement is named and can be reproduced from the repository.

Nothing on this site is a prediction of price direction. Indicators summarise past bars. The volatility model estimates how large a move may be, not which way it will go. A reading is an observation about data that has already printed.

1. Where the prices come from

With no keys, the desk replays one bundled sample session whose prices are generated demonstration data. It is not a real market session and it is not a current quote. The desk labels every panel that shows it. In this mode the volatility model is fed daily bars rather than intraday bars.

With your own Alpaca keys, price data is supplied by Alpaca and, through it, the IEX feed. IEX is a single exchange; it is not a consolidated tape and not the NBBO. Bars can be delayed, missing or partial, and a bar built from one venue's trades can differ from the official high, low and close of the session. Volume is IEX-only volume, so it understates consolidated volume.

Headlines, the shared market overview and calendar entries come from third-party feeds described in sections 5 and 6. None of these sources is redistributed.

2. Candlestick and chart figures

Body, wicks and range are geometry, not interpretation. For a bar with open o, high h, low l and close c:

body = |c − o|  ·  upper wick = h − max(o, c)  ·  lower wick = min(o, c) − l

The desk names a shape only after the geometry is shown, and any named pattern is presented as a shape to recognise rather than a signal with an implied success rate. We do not publish a pattern hit rate, because measuring one honestly requires a defined pattern, a holding period, a benchmark and an out-of-sample test — and we have not run that study.

3. Indicators

Fourteen indicators are computed from the loaded bars. The four that raise the most questions:

RSI (14). Seeded from the first fourteen changes, then smoothed with Wilder's recursion. RSI = 100 − 100 / (1 + average gain / average loss). RSI 70 describes recent momentum; it is not a sell instruction, and an instrument can stay above 70 for a long time.

ATR (14). True range takes the widest of the bar's own range and its gaps from the previous close: TR = max(h − l, |h − prev close|, |l − prev close|), then ATRₜ = (13 × ATRₜ₋₁ + TR) / 14. ATR measures movement size, not direction, and is not a confidence interval for the next bar.

Bollinger bands (20, 2σ). The middle band is a 20-period simple mean of closes; the bands are that mean ± 2 population standard deviations of the same window. A close outside a band is unusual relative to those twenty bars. It is not automatically a reversal.

VWAP. The desk computes a running weighted average using each bar's typical price (h + l + c) / 3 weighted by volume. This is an approximation from bar data; it is not a reconstruction of every executed trade.

The remaining indicators — moving averages including EMA(9) and EMA(21), MACD, Stochastic, ADX, CCI, MFI, OBV, Keltner channels and rate of change — use their conventional published formulations on the same bars.

4. The indicator score

Trend, momentum and volume readings are combined into a single number, with the individual components shown next to it. The score describes what the indicators say at that moment.

We tested whether it forecasts, and it does not. Over five years of five-minute SPY bars, splitting the sample by reading produced much the same subsequent returns for bullish and bearish scores. That is why the score is never presented as a prediction. A number in the bullish column is a statement about the past, and the desk says so on the page.

5. The volatility model

The volatility panel runs a two-stage model in a worker, off the main thread:

  1. Stage 1. Realized volatility from the Garman-Klass estimator of each bar, then HAR(1,5,22) — a regression on yesterday's, last week's and last month's realized volatility — fitted as an expanding walk-forward, with a GARCH(1,1) estimate computed independently as a cross-check.
  2. Stage 2. An LSTM correction stage. It is wired into the pipeline and tested, but it carries no weight in the shipped build. In practice the estimate you see is HAR-only, and we say so rather than implying a neural network is doing work it is not.

For intraday bars, the return across a US/Eastern session boundary is masked out of stage 1, because the overnight jump is not a return the model should learn from. For daily bars every bar is a session, so masking there would delete the sample; the rule reads the cadence from the data instead.

6. The backtest record

The shipped engine is measured, not asserted. Sample: SPY, 5-minute bars, 2021-10-05 → 2026-10-02, 105,085 bars from Alpaca's IEX feed. Method: the engine trains on the first 80% of a slice and tests on the held-out 20%, re-running at seven cutoffs from 40% to 100% of the sample so that one lucky window cannot flatter the result. Inside each fold the HAR fit is itself an expanding walk-forward, so every one-step estimate is genuinely out of sample.

The comparison is against a naive persistence baseline — "the next bar's volatility equals the last one's" — which is a hard baseline to beat and the one that matters. Across the folds tested, the estimate cut RMSE by 10–16% against persistence. The parity harness reproduces the reference Python model's HAR, RMSE, out-of-sample window and neutral band to machine precision; the GARCH field is compared with a documented tolerance because maximum-likelihood convergence cannot be ported exactly.

Scope of that claim. One ticker, one timeframe, one venue. It says nothing about other instruments, other intervals, or future market conditions, and RMSE is an error-size measure rather than a trading result. No profitability claim is made or implied, and the backtest excludes commissions, fees, spread, slippage and financing.

7. Market structure

The structure panel describes the character of recent movement rather than forecasting it.

Structure features require at least 77 completed bars, which is roughly 385 trading minutes at five minutes per bar and just under three full sessions at fifteen.

8. The shared market overview

The desk shows one machine-written overview of public headlines and scheduled events. A single summary is generated every twenty minutes and shared by every visitor, which keeps cost bounded and means two people looking at the same time see the same text.

It is unverified. It can be incomplete, out of date or wrong, and it makes no recommendation. The desk shows its source headlines alongside it so the summary can be checked against what was actually published. Treat it as a draft to verify, never as a statement of fact.

9. The economic calendar

Calendar entries — releases such as CPI and FOMC announcements — come from a third-party economic calendar feed, with times normalised and a rating shown where the feed provides one. Release times and timezones are the most common source of error in event studies, so check the time against the issuing agency before drawing a conclusion about a market move. A before-and-after price change around an event is a description of what happened; it is not evidence that the event caused it.

10. What has not been tested

Stated plainly, because a methodology page that lists only its strengths is marketing:

11. Reproducing any of this

The backtest and the parity harnesses ship with the code and are runnable. The backtest reuses cached bars and can fetch fresh ones with your own keys. The parity harness requires Python with pandas, scikit-learn, torch and arch; the stage-2 harness has no extra dependencies. Each guide page also shows its own arithmetic so you can recompute a result by hand.

12. Corrections

If a formula, a data source or a stated result on this page is wrong, write to tickspysupport@gmail.com naming the section. Corrections are made on the page and the review date above is updated. We would rather correct a claim than keep it.

See also: Risk Disclosure · Terms of Use · Privacy Policy · About TickSPY