43 regulators (AMF, SEC, BaFin, SIX SER, RNS, SEDI, Consob, CNMV, AFM, FSMA, Oslo, Helsinki, Stockholm, Copenhagen, ASX, FMA, Dublin and more), one schema. Every filing is FX-normalised (historical rate), enriched (ISIN/CIK bridge, market cap, sector), and scored through an open composite formula (size, conviction, role, cap, sector momentum). In-sample and out-of-sample backtests (windows documented on /performance), with documented selection bias. All formulas are open and reproducible through the API or MCP server.
Each month, the simulated portfolio buys the 10 highest-scored insider BUY signals (EU markets) in equal weights, then sells each position 90 days later. Result is net of 0.6% round-trip fees.
What this figure is not:
43 official regulators (FRAMF, USSEC, DEBaFin, CHSIX SER, GBRNS, CASEDI, ITConsob, ESCNMV, NLAFM, BEFSMA, NOOslo, FIHelsinki, SEStockholm, DKCopenhagen, AUASX, ATFMA, IEDublin, among others) plus Yahoo Finance for prices. No fabricated data, no aggressive scraping. Everything is timestamped and traceable. 1.5M+ filings aggregated.
Every mandatory insider filing in scope: SEC Section 16 / Form 4 in the US (dominant by volume), MAR 596/2014 Art. 19 across Europe, ASX Listing Rule 3.19A and FSA EDINET in the APAC pipeline. Each filing is FX-normalised to EUR (historical rate on transaction date) and exposed through the same schema.
Prices, fundamentals, analyst consensus. Three dedicated endpoints.
v8/chart · historical price 20yfundamentals-timeseriesquoteSummary · 30+ fieldsEach insider filing, from 43 regulators (SEC (Form 4), AMF, BaFin, SIX SER, RNS (LSE), SEDI, Consob, CNMV, AFM, FSMA, Oslo Børs, FIN-FSA, Finanstilsynet DK, ASX, FMA (OeKB OAM), Euronext Dublin, EDINET (Japan FSA) and more), goes through 6 deterministic steps before appearing on the site.
Polling 43 regulators (SEC (Form 4), AMF, BaFin, SIX SER, RNS (LSE), SEDI, Consob, CNMV, AFM, FSMA, Oslo Børs, FIN-FSA, Finanstilsynet DK, ASX, FMA (OeKB OAM), Euronext Dublin, EDINET (Japan FSA) and more) several times a day. 1.5M+ filings aggregated in total. Each notice gets a unique ID and its document is downloaded.
Text extraction + regex: date, nature, volume, price, ISIN, executive name and role.
Role normalised against FR/EN table: CEO/MD, CFO, Board, Director…
Ticker resolution (ISIN → search), then 30+ Yahoo fields: cap, price, fundamentals, analysts.
Compute pctOfMarketCap, isCluster (30-day window), then composite signalScore [0;100].
Fetch historical prices T+30, T+90 and T+365 from pubDate+1. Returns stored without look-ahead bias.
signalScore computed by signals.ts from the transaction + Yahoo fundamentals. Recalculated on every data update.
Composite score formula: Score = w_signal * Signal_PIT + w_winRate * Bayes(winRate_60d_shrunk) + w_return * ExpReturn_T+30 + w_recency * exp(-dt / tau). Subject to: DSR-adjusted, walk-forward, no PIT leak.
v3: total cap reduced to +10 pts (public info, already priced in). near-52w-low flag is GATED, only activates if cluster ≥2 OR CEO/CFO.
Buy near 52-week low, classic contrarian setup. v3: only activates if cluster ≥ 2 OR CEO/CFO.
Price above its 200-day MA: underlying uptrend reinforced by the insider buy.
Price ≥ 15% below MA200. Only activates if cluster OR CEO/CFO.
Average analyst target more than 25% above current price. Quantified bullish consensus.
P/E < 15, P/B < 2, positive free cash flow.
ROE ≥ 15%, net margin ≥ 10%, D/E < 80.
Executives already own a significant share. Buy reinforces an existing alignment.
High short ratio + insider buy = contrarian setup with possible short-covering catalyst.
recoScore = signalScore + historical performance of similar profiles in our backtest.
Raw signal intensity: signalScore / 100 × 30.
v3 · % winning T+90 trades for the bucket (role + size). Bayesian shrinkage with size-adaptive prior (k=30 if n<20, k=15 if 20≤n<200, k=5 if n≥200).
v3 · Bucket average T+90 return. Cap +13% → 20pts.
v3 · Exponential decay since filing. Half-life 45 days.
Cluster bonus (5), % mcap ≥ 0.5% (3), amount ≥ €500k (2).
Adjust weights to see how rankings shift in real time.
Two conventions: insider view (transactionDate) and retail view (pubDate+1). Only the retail view is shown publicly.
(a) Sample size. Track record over n = 3864 qualified signals, 4 years (2022-2025). Win rate 51.5%, Wilson 95% CI [49.9%, 53.1%]. Mean return +2.6% per trade (T+90, not annualized). Annualized CAGR: see the out-of-sample block (c) below.
(b) Data-snooping bias. 583,200 filter combinations evaluated. The cross-sectional Sharpe (0.10) is NOT the portfolio Sharpe; the annualized Sharpe (T=4 years, rf=3%) is ≈ -0.05, bootstrap 95% CI [-4.71, 16.98], and the deflated Sharpe (Bailey-Lopez de Prado) is negative. Read any quoted performance as an upper bound, out-of-sample expected to be lower.
(c) Point-in-time corrected backtest (audit 169). Two lookaheads were identified in the pipeline (symmetric ±30d cluster window seeing 30 days of future filings; insider track-record overlapping the future T+90 return). Corrected to strict point-in-time, the SAME portfolio (EU_strict: Paris, Amsterdam, Vienna, Brussels, Helsinki, Oslo, Stockholm, Frankfurt; top-10/mo, T+90, net of fees) yields per window: annualized Sharpe +0.05 (2022), -1.99 (2023-2024, CI95 [-3.29, -0.76] entirely negative), +0.53 (2025-2026Q1, net CAGR +17.1%, DSR -0.01). Point-in-time backtest: negative in 2023-2024, positive in 2025-2026. The result is regime-dependent; no standalone alpha is demonstrated. On the 2025-26 window, a screened pool with NO score at all beats the scored top-10: the market regime and universe hygiene do the work. Quantified survivorship: 456 never-priced rows and 1,349 post-delisting rows are excluded from published aggregates (impact on the top-10 backtest: 0 picks). The system’s validated value is the selection skill, block (e) below.
(c.1) Per-market breakdown. Cross-sectional statistics (mean and standard deviation of individual T+90 trades, winsorized 0.5/99.5), re-baked and re-keyed by MIC code (audit 158). These are per-trade dispersion stats, NOT a portfolio Sharpe or a CAGR. The largest venue, US Nasdaq (XNAS, n>250k), is cross-sectionally negative (mean return -1.7%, Sharpe -0.08): picker signals invert on the US tape (audit 101). That is exactly why the production picker is restricted to the EU_strict universe (Paris, Amsterdam, Vienna, Brussels, Helsinki, Oslo, Stockholm, Frankfurt).
| Venue | N | Sharpe x-sect. | Mean T+90 | Win% |
|---|---|---|---|---|
| Nasdaq US · XNAS | 252,376 | -0.07 | -1.7% | 44.2 |
| Paris · XPAR | 16,208 | -0.04 | -0.8% | 44.2 |
| Amsterdam · XAMS | 4,118 | 0.13 | +2.0% | 53.8 |
| Stockholm · XSTO | 4,209 | 0.09 | +2.2% | 48.6 |
| Helsinki · XHEL | 4,304 | 0.05 | +0.8% | 48.4 |
| Madrid · XMAD | 4,639 | 0.33 | +4.0% | 61.5 |
Source: src/lib/winning-strategy.ts STRATEGY_PROOF.srMarkets (re-baked audit 158, MIC-keyed). Cross-sectional per-trade, not a portfolio Sharpe. XNAS excluded from the production picker.
(d) Walk-forward. Every Sigma signal since January 2026 is tracked in strict walk-forward. Results published quarterly. Configuration frozen, no re-optimisation.
(e) Selection skill (validated screen). The score’s size / sector / market-neutral residual (top decile) carries statistically-validated selection on two independent out-of-sample windows (2023-2024 / 2025-2026Q1): t=5.70 then t=2.84, information ratio 4.0 / 2.5 (audit 168). In other words, the score ranks insider-buy quality better than chance. It is NOT a tradeable alpha: the per-name edge (spread across ~636 names) is below transaction costs, so it nets negative, and the absolute long-only return reflects European midcap beta. Read it as a transparent selection screen, not a market-beating machine.
The headline figures (51.5% win rate, +2.6% T+90, 0.10 Sharpe) are measured on a filtered subset (n=3864) that represents 1.0% of the full universe (391,106 insider buys, 2015-2026). What follows explains why we publish these figures anyway, and with which caveats.
| Metric | Filtered subset | Full universe | Δ |
|---|---|---|---|
| n | 3864 | 391,106 | ×101 |
| Win rate | 51.5 % | 46.3 % | +5.3 pts |
| Avg return T+90 | +2.6 % | -0.41 % | +3.0 pts |
| Sharpe | 0.10* / -0.05 / n/a | n/a | n/a |
Full statement: internal reference docs/method-review/29-disclosure-statement.md. Past performance does not predict future returns.
After 583,200 backtests (2021-2026), one combination emerges from the grid search. Under strict point-in-time correction it does not survive as a standalone strategy (audit 169): its validated value is selection (t=5.70 then t=2.84 on 2 out-of-sample windows, audit 168), not returns.
transactionNature = Acquisition. Excludes option exercises, in-kind contributions, conversions, subscriptions.Position management
Insider signals carry a strong but time-limited informational edge. Respecting that window maximises returns and limits exogenous risk.
Practical rule
Target an exit between T+60 and T+90 days after the filing publication date. If a new active signal on the same stock appears before T+90, reassess before selling.
The 4 key reasons
When an insider buys, they act on a private edge (earnings, contract, acquisition…). That information gets published within 30-90 days, the edge disappears after that.
Beyond T+365, macro, sector, and global market factors progressively overwhelm the insider signal. Measured alpha drops sharply after 180 days.
Staying invested too long ties up capital that stops working. Every week on hold is a week you can't deploy on the next strong signal.
Public filings from our 43 regulators (AMF, SEC, BaFin, SIX, RNS, ASX, EDINET, SEBI, CVM and more) show insiders are often tactical traders, short entry window, selling 6 to 18 months later for tax or personal reasons.
Until the live OOS sample reaches n ≥ 100 realized trades, all metrics shown elsewhere are in-sample. Every day at 3 a.m. UTC the system freezes the top 10 BUY and top 10 SELL and tags the market regime (CAC 40: bull / bear / range). Realized T+90 performance accumulates publicly on /performance , no revision, no cherry-picking.
Some Yahoo Finance fields (marketCap, analystScore, analyst targets, PE, D/E) are current snapshots, not historical values. On backtests covering 2022–2025, these fields may introduce look-ahead bias.
| Field | Use in score | PIT Status | Risk |
|---|---|---|---|
| marketCap | F1 pctMcap (16 pts) | Current snapshot | HIGH |
| analystScore | F2 fundamentals + F7 contrarian | Current snapshot | HIGH |
| targetMean / targetHigh | Composite upside bonus | Current snapshot | HIGH |
| currentPrice / 52w MA | near-52w-low, oversold | Current snapshot | MEDIUM |
| trailingPE / D/E / ROE | Composite value/quality | Current snapshot | MEDIUM |
| analystReco | Display only | Snapshot, SAFE | SAFE |
This information is provided for educational purposes and does not constitute investment advice. Investing involves a risk of capital loss.
One buy, scored factor by factor
Example: a 1.6 M EUR buy by the CEO of a 380 M EUR mid-cap, inside a 3-insider cluster. Each factor adds its points to the score, capped at 100.
Out-of-sample validated