Data Vault
SPY indicator data & analysis scripts for independent verification
Data Files
Pre-computed indicator values for SPY across multiple timeframes. All files are gzip-compressed CSVs. Each row contains OHLCV data plus all Saty indicator values (Pivot Ribbon EMAs, ATR Levels, Phase Oscillator).
Scripts
Python scripts used to ingest raw data, compute indicators, and run backtests. Requires Python 3.10+ with pandas and sqlite3.
Methodology
Data Pipeline
- Source: 1-minute SPY OHLCV bars, Jan 2000 – Oct 2025 (4.5M bars)
- Aggregation: 1m → 3m, 10m, 1h, 4h candles (all hours, excluding 20:00 bar to match TradingView session). Daily/weekly candles use RTH only (9:30–16:00) with 2% wick clipping for bad ticks.
- ATR: Wilder's RMA (alpha=1/14), matching TradingView's
ta.atr(14)
- ATR Levels: Intraday tables use daily ATR reference (matching TradingView's
request.security(ticker, 'D', ta.atr(14)))
- EMAs: Standard EWM (span=N, adjust=False), matching TradingView's
ta.ema()
- Phase Oscillator:
EMA(((close - EMA21) / (3 * ATR14)) * 100, 3)
Validation
- Pivot Ribbon EMAs: 0.000% match vs TradingView export (10m bars)
- ATR Levels (daily ref): 0.00–0.07% match
- Phase Oscillator (10m): 0.5–3.5% after convergence
- Phase Oscillator (60m): 0.00% match with full history warmup
Golden Gate Definition
The Golden Gate is the zone between the 38.2% and 61.8% ATR levels. “Entry” = price reaches 38.2%. “Completion” = price reaches 61.8% within the same session.
The Bilbo Golden Gate Thesis
Core Finding
The 60-minute Phase Oscillator at the moment of Golden Gate entry (38.2% hit) is a strong predictor of whether the Golden Gate will complete through 61.8%. When the 1-hour PO is aligned with the trade direction, completion rates jump significantly and time-to-completion is cut roughly in half.
The Bilbo Conditions
- Bullish Bilbo: 60m Phase Oscillator is above +61.8 (High zone) and rising at the moment the +38.2% ATR level is hit. Completion rate: 77.7% vs 63.0% baseline. Mean time: 34.8 min vs 65.4 min baseline.
- Bearish Bilbo: 60m Phase Oscillator is below -61.8 (Low zone) and falling at the moment the -38.2% ATR level is hit. Completion rate: 90.2% vs 65.0% baseline. Mean time: 24.3 min vs 54.4 min baseline.
Why 60 Minutes?
The 10-minute Phase Oscillator was also tested but provides 5–12x less predictive edge. The 10m PO captures short-term noise — bar-by-bar swings don't reflect sustained momentum. The 60m PO filters for genuine directional conviction built over multiple hours, which is what drives Golden Gate completions.
Key Data Columns for Replication
- Use
ind_10m for Golden Gate entry/completion detection (filter to RTH: 09:30–15:59)
- Use
ind_1h for the 60-minute Phase Oscillator snapshot at trigger time
- Join with
pd.merge_asof(df10, df60, on='timestamp', direction='backward')
- Golden Gate entry:
atr_upper_0382 / atr_lower_0382
- Golden Gate completion:
atr_upper_0618 / atr_lower_0618
- PO zone classification: High (>61.8), Mid (-61.8 to 61.8), Low (<-61.8)
- PO slope: compare
phase_oscillator to its previous bar value
Read the full Bilbo Golden Gate study →