43 monitored filing sources (AMF, SEC, BaFin, SIX SER, RNS, SEDI, Consob, CNMV, AFM, FSMA, Oslo, Helsinki, Stockholm, Copenhagen, ASX, FMA, Dublin and more), one schema. Available filings are FX-normalised and enriched when the required identifiers exist. Eligible purchases are scored and ranked within their own market. No market currently meets the historical allocation criteria, so signals remain watch-only. No expected return is promised.
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.6M+ 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 across APAC (live). 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 markets (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 markets (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.6M+ 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. This is the per-filing signal score (0-100); the monthly Top 10 selection is made by the separate 6-signal equal-weight composite ranking (see the Strategy chapter).
Recommendation score formula (0-100): Score = w_signal * Signal_PIT + w_winRate * Bayes(winRate_60d_shrunk) + w_return * ExpReturn_T+30 + w_recency * exp(-dt / tau). Weights frozen by grid search; DSR penalty disclosed. Distinct from the 6-signal composite ranking that selects the monthly picks.
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. The score rates each filing; the composite ranking selects the monthly picks.
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) of this v1.0 in-sample cohort is negative. Read any quoted performance as an upper bound, out-of-sample expected to be lower. The point-in-time strict replay of the published ranking construction reports a deflated Sharpe of +0.46 at N=24 trials over 51 months. It is not a return earned since launch and is published with its window-by-window limits on /performance.
(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. Audit 101 found a negative result for the legacy pooled setup on US Nasdaq (XNAS, n>250k). The current model does not extrapolate that pooled result to every US name. It ranks purchases within each market. No market currently meets the historical allocation criteria, so signals remain watch-only.
| 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) Historical ranking evidence. The score's size / sector / market-neutral residual (top decile) was positive 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 markets (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 ≥ 30 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.
Recommendations span multiple markets. Each purchase competes with purchases from the same market, so one venue's scale or reporting pattern cannot dominate the ranking.
The labels describe research evidence, not an expected return or investment advice.
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. This is the per-filing signal score; the monthly Top 10 picks come from a separate ranking of 6 equal-weighted signals.
Out-of-sample validated
Contrast: the raw unfiltered universe (n = 391,106 trades) sits at a 46.3% win rate and -0.4% at T+90. Selection does the work.