Ongoing experiment. Observations are recorded before events and results afterwards — including the failures. Nothing here is investment advice.

The Experiment

Each experiment is registered with its test criteria and invalidation criteria stated before the window opens. Results are appended afterwards and the original record is never rewritten.

Running now

September 2026: the pre-registered New-Moon low test

A prospective, pre-registered test of the New-Moon / local-low correspondence, registered before the window opened and judged by rules fixed in advance.

All experiments

Frozen research protocols

A protocol states, in advance, exactly how a test will be judged. Once frozen it is never edited — a genuine change is a new version.

Legacy website methodology (Full Moon / New Moon pivot matching)

The method the original site used to produce the published Full-Moon lag figures. Reproduced exactly by moon_engine.py and pinned by regression tests. Recorded here so any future change is a new protocol version rather than a silent edit.

Show the exact rules
{
  "price_source": "Yahoo Finance BTC-USD daily Close (auto-adjusted)",
  "phase_source": "PyEphem next_full_moon / next_new_moon, reduced to calendar dates",
  "pivot_detector": "scipy.signal.find_peaks",
  "min_pivot_spacing_days": 30,
  "prominence_pct_of_median_close": 15.0,
  "max_lag_days": 14,
  "signed_lag": "pivot_date - moon_date (positive = pivot AFTER the moon)",
  "full_moon_matches": "nearest significant swing HIGH within +/-14 days",
  "new_moon_matches": "nearest significant swing LOW within +/-14 days",
  "published_benchmarks": {
    "recent_two_year_full_moon": {
      "mean_days": 4.4,
      "median_days": 4,
      "sd_days": 4.2,
      "n": 5,
      "window_from": "2024-09-21"
    },
    "2017_2026_full_moon": {
      "pct_high_after_full_moon": 71.0,
      "mean_days": 3.2,
      "median_days": 6.0,
      "n": 31
    }
  },
  "caveats": [
    "Phase-shift and null controls weaken any claim that the astronomical Full Moon uniquely causes the high.",
    "The New-Moon / local-low correspondence is the stronger empirical lead.",
    "Nodal strength is not a reliable timing predictor."
  ]
}

Frozen protocol: September 2026 New-Moon low test

A prospective, pre-registered test of the New-Moon / local-low lead. Registered before the window opened and not modified in response to any outcome. v1.1 corrects a TRANSCRIPTION ERROR in this repository's copy of the rule - see 'correction' below. The rule itself is unchanged from the paper and no result was ever published under v1.0.

Show the exact rules
{
  "new_moon_utc": "2026-09-11T03:27:00",
  "full_moon_utc": "2026-09-26T16:49:00",
  "primary_test": "Does a strict local low form in the window T0:T+3 (11-14 September 2026 inclusive)?",
  "strict_local_low_definition": "A strict 7-day pivot on the daily LOW: a day t qualifies when LOW[t] < LOW[t-1], LOW[t-2], LOW[t-3] AND LOW[t] < LOW[t+1], LOW[t+2], LOW[t+3]. The test is on INTRADAY LOWS, not closing prices.",
  "price_basis": "Daily OHLC. The LOW column only. Closing prices are NOT used.",
  "equality_handling": "Strictly less-than on both sides, as written. A low that merely ties a neighbouring low does not qualify. Applied identically on both sides, so a flat double bottom yields no pivot rather than two.",
  "decidability": "A day cannot be judged until 3 subsequent daily bars exist. Until then the result is UNDETERMINED - never 'failed'.",
  "invalidation": "A qualifying pivot is NOT invalidated by a lower low occurring later, inside or outside the window. The test asks whether a strict local low FORMED in T0:T+3, not whether it was the cycle's lowest price. The deepest low of the cycle is a separate, separately reported measure.",
  "new_moon_strength_recorded_in_advance": 79,
  "strength_caveat": "The 79/100 figure was recorded in advance as context only. It is NOT evidence that a low must occur, and it does not enter the Pattern Fit Score. The strength formula implemented in btcmoon.lunar.phases scores this same New Moon 69.2/100; the two numbers are kept separate rather than reconciled, because tuning a formula to reproduce a historical figure would breach the research constitution.",
  "if_low_forms": "Measure maximum upside at exactly 7, 14 and 21 days from the pivot date.",
  "secondary_tests": [
    "Waxing return from the New-Moon low to the Full Moon (26 Sep).",
    "Cycle-high alignment relative to the Full Moon.",
    "Relationship to a website-defined major high (see website-methodology-v1)."
  ],
  "distinct_concepts": {
    "qualifying_strict_local_low": "The formal pre-registered test. LOW-based 7-day pivot in T0:T+3.",
    "lowest_price_in_a_wider_window": "Descriptive only. Not the test.",
    "absolute_cycle_low": "The deepest low between consecutive New Moons. Reported separately.",
    "informal_nm_plus_0_4": "A private, never-pre-registered intraday timing idea. Requires hourly data. Must never stand in for, or be conflated with, the formal test.",
    "legacy_website_new_moon_pivot": "CLOSE-based scipy.signal.find_peaks major pivot, spacing 30, prominence 15% of median close, matched within +/-14 days. A different measure entirely - see website-methodology-v1."
  },
  "final_review": "After 30 September 2026.",
  "amendment_policy": "None. Lag windows, pivot definitions, scoring weights and the strength formula are fixed for the duration of this test."
}