Methodology

How the tool turns "full moons cause tops" from a vibe into a measured, falsifiable number โ€” and how it builds its forward predictions.

1. Price & moon data

2. Detecting true swing tops and bottoms

The naive approach โ€” "the highest price in the two weeks around each full moon" โ€” is circular: it guarantees a high near every moon whether or not one really belongs there. Instead the tool finds genuine swing pivots in the price series itself using peak detection (scipy.signal.find_peaks), governed by two controls:

ControlWhat it does
Minimum spacingHow far apart two pivots must be. Larger = fewer, more significant tops/bottoms.
Minimum prominenceHow far a swing must stand out from the surrounding price (as a % of price). Filters out insignificant wiggles.

On the default settings โ€” one pivot per lunar cycle, 15% prominence โ€” only the major turning points survive.

3. Matching moons to pivots

Each full moon is matched to the nearest swing high, and each new moon to the nearest swing low, provided one exists within a maximum lag (default 14 days โ‰ˆ half a lunar cycle). That cap stops a top being mis-assigned to a moon on the far side of the cycle.

The key quantity recorded is the signed offset:

offset = (pivot date โˆ’ moon date), in days
negative = the turning point came before the moon ยท positive = it came after

The sign is what makes the "tops come a few days after the full moon" claim testable โ€” an unsigned distance would throw that information away.

4. The statistics

Across all matched pairs the tool reports the mean, median and standard deviation of the offsets, plus a histogram of how they're distributed. Reading it:

5. Predicting future turning points

Prediction is deliberately simple, so it can't overfit:

predicted top = next full moon + average top-lag
predicted bottom = next new moon + average bottom-lag

Each prediction is drawn as a date plus a ยฑ1 standard-deviation window, so the uncertainty is always visible. The search also looks back one lunar cycle, so the phase you're currently in still appears and is flagged as an active window until it elapses.

What this method can and can't tell you. It can measure whether a timing relationship exists in the historical data and how strong it is. It cannot establish causation, and a pattern that held in the past can break at any time. Treat every prediction as a curiosity, not a signal.

Reproducibility

The analysis engine is open and deterministic: the same settings always produce the same result. Every matched pair and prediction can be exported as CSV from the live tool for independent checking.

Run the analysis yourself โ†’