# Research Plan — AstroTradeLab: Do Planets Time Indian Blue Chips?

**Author:** Quantooo Lab
**Plan dated:** 26 October 2026. **Approved by the owner 26 Oct 2026 and frozen (tag `prereg-v1`).** This file is the
pre-registration: it is frozen (git commit + OpenTimestamps) before any astrological signal is joined to returns.
**Site:** astrotradelab.com

---

## 1. Research question

Indian financial astrology says slow planets (Saturn, Jupiter, Rahu/Ketu) shape long, steady trends, while fast
planets (Moon, Mercury, Mars) drive short, sharp moves. If that were true, it would leave a footprint in prices:

> **Do slow-planet events move steady blue chips, and do fast-planet events move volatile stocks, beyond what
> chance produces? Can a portfolio of Sensex stocks timed by these rules beat holding the same stocks?**

We test claims; we do not give advice. The likely outcome is "no effect". A clean null result is still the contribution:
no published study tests this planet-speed ↔ stock-volatility matching on Indian stocks with a sealed holdout.

---

## 2. Framework: ideas are plug-ins

The study is a general engine, not one fixed rule. Every astrological claim is written down as an **idea** with four
parts, and the same code tests all of them:

| Part | What it is | Examples |
|---|---|---|
| **Stock group** | which stocks, rebuilt monthly from data up to the previous close | steady / volatile (by 252-day vol), sector (banks, IT, metals), the whole Sensex 30, one stock |
| **Astro event** | a window from the event calendar (§3) | Saturn retrograde, Mercury retrograde, Amavasya, Moon in a nakshatra, planet in a sign |
| **Effect** | what should happen inside the window, with direction | lower return, higher volatility, higher return |
| **Window** | how the event is turned into days | while active; ±N trading days around a point event |

- **Astrological stock picking.** A stock group can itself be chosen by astrology: every stock gets a birth chart
  from its **NSE listing date** (official, in NSE's `EQUITY_L.csv`; listing at 09:15 IST, Mumbai) and, as a
  secondary check, its incorporation date (MCA). Example: each month, hold the stocks whose birth Moon sign is
  favoured by the current Jupiter and Saturn transits (Gochar). This turns astrology into a full portfolio:
  astrology picks the stocks and the planetary windows set the timing.
- Each idea is one file in `ideas/` (id, date registered, the four parts, the source of the astrological reading).
- **An idea counts only from the day it is registered.** The file is committed and OpenTimestamped before it is
  run, so nobody can say it was picked after looking at results.
- Ideas can be combined into a **portfolio rule** (be in a group outside its bad windows, cash inside them).

**Universe (owner decision 26 Oct 2026): every NSE main-board stock** (series EQ, BE, BZ; 2,629 on 26 Oct 2026,
from NSE `EQUITY_L.csv` with listing dates). SME-platform stocks (583) are left out (thin trading).
- **Study universe** = all of them, for the window tests and ML.
- **Portfolio universe** = those with median daily traded value ≥ ₹1 crore over the previous 63 days (checked
  monthly, no look-ahead), so paper trades could really be filled.
- The Sensex 30 (`universe/sensex30.csv`) is kept as a named subset and reported separately. Equal weight within every group.
Benchmark = equal-weight Sensex 30 buy-and-hold; also the Sensex index itself. A stock joins any group only after it
has 252 days of history (Eternal listed Jul 2021).

**Known bias:** today's constituents carry survivorship bias (winners stay in the index). It inflates the returns of
every portfolio equally, so it does not favour the astrological rules over the benchmark. It is stated in the paper.

---

## 3. Astrology inputs

- **Ephemeris:** Skyfield + NASA JPL DE421 (public domain), computed by us. Sidereal zodiac with **Lahiri ayanamsa**
  (Indian standard); Rahu = mean lunar node, Ketu = Rahu + 180°.
- **Clock:** all events in IST. An event at or after the NSE close (15:30 IST) belongs to the next trading day.
- **Event calendar** (built once for 1997–2035, saved with source and code version). It holds general facts per day,
  so new ideas need no new astronomy code:
  - every planet (Sun … Saturn, Rahu, Ketu): sidereal sign, nakshatra, retrograde yes/no, sign-ingress days
  - conjunctions (same sign) for every planet pair
  - Moon: tithi, Amavasya, Purnima; solar and lunar eclipses
- Planets are tagged **slow** (Saturn, Jupiter, Rahu/Ketu) or **fast** (Moon, Mercury, Venus, Mars, Sun), so ideas
  can refer to a whole speed class.

Directions follow the traditional readings (retrograde and malefic conjunctions = bad; Amavasya = bad) and are fixed
in each idea file before it is run.

---

## 4. First batch of ideas (registered with this plan)

Default windows: days when the event is active (retrograde periods), or ±5 trading days around a point event
(ingress, conjunction start) and ±2 around Amavasya, Purnima and eclipses. Later ideas may set their own window.

Groups: **Steady** = least volatile third of the portfolio universe by 252-day volatility, **Volatile** = most
volatile third; rebuilt on the first trading day of each month from data up to the previous close. Equal weight.

| # | Signal | Basket | Claim tested |
|---|---|---|---|
| H1 | Saturn retrograde | Steady | lower daily return inside window |
| H2 | Jupiter retrograde | Steady | lower daily return inside window |
| H3 | Saturn / Jupiter / Rahu sign ingress | Steady | higher volatility inside window |
| H4 | Saturn conjunct Rahu or Ketu | Steady | lower return inside window |
| H5 | Mercury retrograde | Volatile | lower return and higher volatility |
| H6 | Mars retrograde | Volatile | lower return |
| H7 | Amavasya vs Purnima | Volatile | lower return around Amavasya |
| H8 | Eclipses | Volatile | higher volatility inside window |
| **H9 (matching)** | slow vs fast signals | both | slow-planet effects are larger in Steady than in Volatile, and fast-planet effects larger in Volatile than in Steady (interaction) |
| **H10 (portfolio)** | all of the above | both | "Astro portfolio" beats buy-and-hold after costs |
| **H11 (astro picking)** | Gochar from listing-date Moon sign | portfolio universe | stocks with Jupiter in a favourable house (2, 5, 7, 9, 11 from natal Moon) and not in Sade Sati (Saturn in 12, 1, 2) beat the rest next month |
| **H12 (ML ablation)** | all astro features | study universe | adding astro features to a standard ML model improves out-of-sample forecasts of 5-day return and volatility |

**H12 in detail (same method as "Where Machine Learning Helps").** Baseline features: momentum (20/60/250 d),
trailing volatility, market return, India VIX. Astro features: every planet's sign, retrograde flag and speed class,
Moon nakshatra and tithi, eclipse window, and each stock's Gochar houses from its listing-date chart. Models: ridge
and LightGBM with fixed grids. Purged, embargoed walk-forward (train 504 d, test 126 d, embargo 10 d). Metrics: rank
IC for returns, QLIKE for volatility; Diebold-Mariano test of baseline vs baseline + astro. **Control:** the same
model with *placebo* astro features (calendar shifted by a random offset) must do worse than the real ones; SHAP
importance of astro features is compared with that of placebo features.

**Exact statistics.** Returns: mean daily group return inside the window minus outside (H7: Amavasya window minus
Purnima window). Volatility: same difference on log(r² + 10⁻⁸). H5 is two tests (return, volatility). **H9:** for each
signal, effect size z = (in − out) / sd(daily return) in each group; M = mean over slow signals (H1, H2, H4) of
(z_steady − z_volatile) minus mean over fast signals (H5 return, H6, H7) of (z_steady − z_volatile); the claim is
M < 0. All windows are shifted together in the placebo.

**Astro portfolio (H10):** hold the Steady basket except inside slow-planet bad windows (H1, H2, H4) and the
Volatile basket except inside fast-planet bad windows (H5, H6, H7); money out of a basket sits in cash (RBI
91-day T-bill rate). Costs 0.10% per side plus 0.10% STT on sells. Compared with buy-and-hold on Sharpe, CAGR and
maximum drawdown.

---

## 5. Statistics

- **Main test: placebo calendars.** Shift the whole astro calendar by a random offset (≥ 60 days, circular) 2,000
  times and recompute each statistic. p-value = share of placebo calendars that do at least as well as the real one.
  This keeps the length and clustering of real windows, so long retrogrades cannot fake significance.
- Secondary: difference in means with Newey-West standard errors; volatility via log of squared returns.
- **Multiple testing:** Holm correction across **every idea ever registered**, not just this batch, so adding many
  ideas cannot manufacture a winner. Pass = Holm-adjusted p < 0.05 in the right direction.
- H10 also reports Deflated Sharpe Ratio (Bailey & López de Prado 2014).
- Every configuration ever run is logged in `results/trials.csv`.

---

## 6. Periods

| Period | Dates | Use |
|---|---|---|
| Development | 4 Jan 2016 – 29 Dec 2023 | build calendar, code, run all tests |
| **Holdout** | 1 Jan 2024 – 30 Sep 2026 | **opened once**, after the code is frozen |
| Long history (robustness) | Sensex index, Jul 1997 – Dec 2023 | index-level H1, H2, H5–H8 only |

**Later ideas:** the holdout is opened once, for the first batch. Ideas registered after that are tested on
development data and then **forward-tested live** from their registration date (new data no one has seen), like the
Quantooo track record. The site shows each idea's live score next to its development score.

Slow-planet events are rare (Saturn changes sign about every 2.5 years), so H3 and H4 have little data. The paper
says so, and treats them as low-power tests.

**Data:** NSE daily prices from the market-signals-site collector (Yahoo, adjusted closes, 2016→), Sensex index from
Yahoo (^BSESN). Raw prices are not published on the site, only returns aggregated over baskets and windows.

---

## 7a. Live paper portfolios (same design as the Quantooo books)

Rules published before the first trade; paper only, "hypothetical results, not real money".

| Book | Rule |
|---|---|
| `astro_timed` | H10: Steady basket out in slow-planet bad windows, Volatile basket out in fast-planet bad windows |
| `astro_picks` | H11: monthly, equal weight in the Gochar-favoured stocks |
| `astro_ml` | H12: weekly, top 10 by the astro-augmented model (only if H12 is built and frozen) |
| `random_timing` | benchmark: same share of days in cash as `astro_timed`, windows placed at random |
| `random_picks` | benchmark: same number of stocks as `astro_picks`, chosen at random |
| `equal_weight` | benchmark: all 30, equal weight |
| `sensex` | benchmark: index bought once |

- Fills at the next open after the signal; 10 bp per side plus STT on sells; start ₹10,00,000.
- **Astro windows are known years ahead**, so each book's full future schedule (in/out days, rebalance days) is
  published and OpenTimestamped on day one. Anyone can check later that no window was moved.
- Daily ledger `track_record/` with SHA-256 per file, nightly on the Oracle server, like Quantooo.
- Simulated history runs on the development period only (2016–2023), clearly labelled; the 2024–26 holdout stays
  sealed until opened once.

---

## 7. Phase 2 (later, separate approval)

A live tracker on astrotradelab.com: published astrologers' Nifty/Sensex calls collected with timestamps, scored
against outcomes with a fixed rubric, SHA-256 + OpenTimestamps like the Quantooo ledger. Results reported in aggregate,
not by named astrologer.

---

## 7b. Phase 3 (later, separate approval): personal chart ↔ stock chart matching

- A matching rule (from a published astrological source, fixed in an idea file) scores how compatible a person's
  chart is with each stock's listing-date chart. It uses only **Moon sign (12) × nakshatra (27) = 324 profiles**.
- **All 324 profile portfolios are computed and tracked publicly**, logged before outcomes like the Quantooo ledger.
  This is itself a test: if matching worked, matched portfolios would beat the other profiles and the index.
- A visitor enters birth date, time and place; the chart is computed **in the browser and never sent or stored**.
  They see their profile's matched stocks and how that match has performed against all other profiles and the index.
- Wording: a test result ("how stocks matched to your chart have done"), never "buy these". Educational framing,
  "hypothetical, not a claim of returns".
- **Gate:** SEBI lawyer check before it goes public (personalised output may count as investment advice);
  privacy notice under the DPDP Act 2023 even though no birth data is stored.

---

## 8. Deliverables

1. `src/ephemeris.py` — event calendar (tested against published panchang dates for 2024–25).
2. `src/baskets.py`, `src/tests.py`, `src/portfolio.py` — baskets, placebo tests, astro portfolio.
3. Notebooks 01–05 (calendar → baskets → development tests → holdout → long history).
4. `paper_draft.md` → PDF, numbers only from code.
5. **Website astrotradelab.com** on the existing Oracle server (see README): static pages with the calendar, results
   and method. Educational framing, no buy/sell calls, "hypothetical, not a claim of returns".
