Our mission
Quantitative research, training and analysis software. The method, stated and checkable on a case anyone can redo.
Four principles
How we work, and where we stop.
Method before result
Hypotheses are written first and never adjusted afterwards. A negative result is information, and we publish it.
Reproducible, or it is not research
Code, data and procedure ship with the result. No future data, no curve that changes shape after the fact.
What we publish
Methodological research with its code, training with twenty-nine open labs, software written to be inspected.
What we do not do
No investment advice, no recommendations, no profiling. We do not promote crypto-assets and we do not place products.
A verifiable example
A moving average is a filter: which frequencies it removes, and with how much delay, depends on N alone.
The formula is the Dirichlet kernel, the response of an N-sample window. The numbers in the table come from it, recomputed at every build.
| N (samples) | First zero (cycles/sample) | Side lobe (dB) | Delay (samples) |
|---|---|---|---|
| 1 | — | — | 0.0 |
| 4 | 0.2500 | −11.3 | 1.5 |
| 8 | 0.1250 | −12.8 | 3.5 |
| 16 | 0.0625 | −13.1 | 7.5 |
A causal average responds (N − 1)/2 samples after the fact. For N = 1 the filter is the identity: cells without a value carry a dash, never a zero.
How to reproduce
No market data: everything follows from the formula. First zero 1/N, delay (N − 1)/2, side lobe the maximum between the first and second zero. In the labs the same computation is redone in Python.
The lines that produced the table: the function that actually runs on this site.
export function ampiezza(n: number, f: number): number {
const denominatore = n * Math.sin(Math.PI * f)
if (Math.abs(denominatore) < 1e-12) return 1
return Math.abs(Math.sin(Math.PI * f * n) / denominatore)
}At zero frequency numerator and denominator vanish together and the limit is 1: the constant component crosses the filter untouched.