Skip to content
Reading · 5 min · 5 chapters

Data, aggregation & signals

We collect the filings insiders must publish in 37 markets (AMF, SEC, BaFin, SIX SER, RNS, SEDI, Consob, CNMV, AFM, FSMA, Oslo, Helsinki, Stockholm, Copenhagen, ASX, FMA, Dublin and more) and put them in one format. Amounts are converted to euros, and filings are enriched when the company can be identified. Each eligible purchase is scored and compared only with purchases in its own market. No market passes our test on its own data yet. Only the venues of the backtested strategy universe get a suggested size, taken from the portfolio backtest. We give the ranking's measured return below, next to the index on the same dates.

How to read our numbers

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. One company often files several times, so these 10 signals cover 5.0 distinct companies on average. Result is net of 0.6% round-trip fees.

What this figure is not:

  • It is not the performance of every stock on the site: only the 10 highest-scored signals each month.
  • It is not buy-and-hold: every position is sold about 90 days after purchase.
  • It is not a promise: it is a simulation on past data, published with its limits (wide confidence interval, negative deflated Sharpe for this archived V14e strategy; the active composite selection publishes its own proof block on /performance).

The returns, explained simply →

Multi-market filings
1,679,812
since 2015
Companies tracked
41,636
with insider filings
With fundamentals
29,272
70% coverage
Analyst consensus
12,125
price target, rating
Backtested transactions
915,407
T+30 · T+90 · T+365
01/07  Data
Chapter 01 · Sources
01Sources

Where the data

37 markets, official sources (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.

37×
Official regulators
37 markets worldwide. Same schema. FX-normalised.

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.

  • Europe (14) · FRDECHGBITESNLBENOFISEDKATIE
  • Americas (3) · USCABR
  • APAC (6) · AUJPKRHKSGIN
  • Format: official PDF, SEC EDGAR XML, RNS feeds
  • Sync: several times/day · legal deadline T+2 to T+10 by jurisdiction
Filing
Buy
+5 M€
PDG · LVMH
YF
Enrichment
Yahoo Finance

Prices, fundamentals, analyst consensus. Three dedicated endpoints.

  • v8/chart · historical price 20y
  • fundamentals-timeseries
  • quoteSummary · 30+ fields
02Pipeline

From PDF to signal

Each insider filing, from 37 markets (SEC (Form 4), AMF, BaFin, SIX SER, RNS (LSE), SEDI, Consob, CNMV, AFM, FSMA, Oslo Børs, Finansinspektionen, Nasdaq Helsinki, Finanstilsynet DK, ASX, FMA (OeKB OAM), Euronext Dublin and more), goes through 6 deterministic steps before appearing on the site.

01

Collection

Polling 37 markets (SEC (Form 4), AMF, BaFin, SIX SER, RNS (LSE), SEDI, Consob, CNMV, AFM, FSMA, Oslo Børs, Finansinspektionen, Nasdaq Helsinki, Finanstilsynet DK, ASX, FMA (OeKB OAM), Euronext Dublin and more) several times a day. 1.6M+ filings aggregated in total. Each notice gets a unique ID and its document is downloaded.

37 marketsunique IDdeduplication
02

PDF Parsing

Text extraction + regex: date, nature, volume, price, ISIN, executive name and role.

pdftotextregexdate validation
03

Normalisation

Role normalised against FR/EN table: CEO/MD, CFO, Board, Director…

role-utilsnormalizeRole
04

Enrichment

Ticker resolution (ISIN → search), then 30+ Yahoo fields: cap, price, fundamentals, analysts.

yahoo-finance2quoteSummary
05

Scoring

Compute pctOfMarketCap, isCluster (30-day window), then composite signalScore [0;100].

signalScoreisClusterrecoScore
06

Backtest

Fetch historical prices T+30, T+90 and T+365 from pubDate+1. Returns stored without look-ahead bias.

T+30T+90T+365
03Signal score

The 100 points dissected

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.

Directional cluster
0 to 18
Role (weighted by seniority)
2 to 22
% market cap
0 to 16
Insider track record
−2 to 14
Composite signals
0 to 10
% insider flow
0 to 8
DCA / accumulation
0 to 6
Analyst-contrarian
0 to 6
Basic fundamentals
−2 to 4
Total capped at 100. The raw sum can exceed 100, the final score is truncated. A negative score is impossible. Composite signals and fundamentals use a live market snapshot, so they only count when the trade is at most 90 days old at scoring time; older filings are scored without them.
04Composite signals

Seven Yahoo signals that combine

Total capped at +10 pts (public info, already priced in). The near-52w-low and oversold flags are GATED: they only activate on a cluster or a CEO/CFO trade.

Near 52-week low (gated)

+2 pts

Buy near the 52-week low, classic contrarian setup. Only activates on a cluster or a CEO/CFO trade.

pos ≤ 20% of 52w range · gatedNear 52w low

Long-term momentum

+1 pt

Price above its 200-day MA: underlying uptrend reinforced by the insider buy.

price ≥ MA200 × 1.05Momentum

Oversold (gated)

+1 pt

Price at least 15% below MA200. Only activates on a cluster or a CEO/CFO trade.

price ≤ MA200 × 0.85 · gatedOversold

Upside ≥ 25%

+2 pts

Average analyst target at least 25% above the current price (+1 pt from 15%), with 3+ analysts.

(target − price) / price ≥ 25%Upside ≥25%

Value combo

+1 pt

P/E < 15, P/B < 2, positive free cash flow.

P/E<15 & P/B<2 & FCF>0Value

Quality combo

+2 pts

ROE ≥ 15%, net margin ≥ 10%, D/E < 80 (+1 pt without the debt test).

ROE≥15% & margin≥10% & D/E<80Quality

Potential short squeeze

+1 pt

High short ratio + insider buy = contrarian setup with possible short-covering catalyst.

shortRatio ≥ 5Short squeeze
05Recommendation score

From observation to action

recoScore = signalScore + historical performance of similar profiles in our backtest. The score rates each filing; the composite ranking selects the monthly picks.

Signal score (raw)30

Raw signal intensity: signalScore / 100 × 30.

Historical win rate (shrinkage)35

Share of winning trades for the bucket (role + size), blended across T+30 / T+90 / T+365. Bayesian shrinkage with a size-adaptive prior.

Estimated T+90 return (shrinkage)25

Z-score of the shrunk bucket T+90 mean against the side average: 12.5 pts at the average, 6.25 pts per standard deviation, clamped to 0 to 25.

Recency (half-life 21d)10

Exponential decay since filing, half-life 21 days, minus a staleness penalty as the filing ages.

No minimum expected return filters the list. A bucket whose history contradicts the trade direction loses points. The lead pick requires an estimated T+90 return of at least 0%. Buckets with little history stay listed with a neutral win-rate slice and no return slice.
Scoring engine · Live playground

Adjust weights to see how rankings shift in real time.

Composite score (BNP sample)
30%
35%
25%
10%
Total weights100%
Component contribution
Insider signal strength24.0 pts
Historical win rate28.0 pts
Expected 90-day return21.3 pts
Filing recency8.0 pts
Live ranking (top 10) under your weights vs. production
No data available
06Current method

The method served today

What the site ranks, how, and the rule its backtest measures (audit 260, measured on October 13, 2026).

  1. Universe

    Insider purchases from 37 markets are ranked. A position size is suggested only on the 8 European venues of the backtest: Paris, Amsterdam, Vienna, Brussels, Helsinki, Oslo, Stockholm, Frankfurt.

  2. Size screen

    Companies below €300M of market cap are left out, and so are purchases worth 1% of the market cap or more.

  3. Composite ranking

    Each purchase is compared with the purchases published in the same month. Its rank is the equal-weight mean of its ranks on criteria known on the filing day: the executive's role, the number of executives buying, the amount, the insider's track record (lagged by 91 days) and the distance to earnings.

  4. Measured rule

    In the backtest each position is bought the day after publication and sold 91 days later, with 0.6% of costs per round trip, and the capital is split across the baskets still open.

Earlier versions of the method, Sigma v1.0 included, are dated in the version history.

07Backtest

How we measure returns

Two conventions: insider view (transactionDate) and retail view (pubDate+1). Only the retail view is shown publicly.

Former figures retracted (audit 231)

Our earlier backtest figures (annual return, capital growth curve, per-year table) came from 91-day baskets bought every month and compounded as if each one held the whole capital for a month. Three baskets are open at any time, so the result was heavily overstated. They also used the month-end ranking, which is unknown on the filing day. We have retracted them. The corrected backtest below splits capital across the open baskets and sets the index next to it.

Read audit 231
Corrected backtest · audit 260 · measured on October 13, 2026

What the ranking returned, next to the index

Insiders Trades ranking
12.5%/yr
Sharpe 1.17 (CI95 0.28 to 2.33)
STOXX Europe 600, same dates
9.3%/yr
Sharpe 0.64

Average gap with the index: +2.7 points a year, 95% confidence interval -3.0 to +8.5 points. Without the ranking, all eligible insider purchases returned 0.1%/yr.

Simulation over 2022-2026Q1, each purchase made the day after the filing and sold 90 days later (the simulation ties up the capital for 91 days), dividends included for the ranking and the index alike, 0.6% round-trip cost, capital split across overlapping baskets. A monthly basket holds 5.0 distinct companies on average.

T+30
1 month
T+90
~1 quarter
T+365
1 year
Live record

The ranking served on the site has been frozen every night since May 27, 2026 and measured afterwards against the index of each company's region, at 30 and 90 days, on /performance. Results are updated every day, month by month.

08Known biases

What the backtest overstates

Three limits recorded by audit 231. All three push the published figures in the favourable direction.

Interpolated price paths
Between two known prices the path is interpolated. Published Sharpe ratios are therefore upper bounds, and maximum drawdowns are lower bounds in size.
Delisted companies missing
Only rows with a price enter the calculation. Delisted companies drop out, which pushes the published returns up.
Few companies per basket
A monthly basket holds 5.0 distinct companies on average. The effective sample is smaller than the number of positions, so the confidence intervals are too narrow.

Read audit 231

PIT integrity audit
Filings in the backtest pool
24,701· 1 look-ahead found and correctedCorrectedAudit 231
09Limits & transparency

What the system cannot do

Date handling
transactionDate
Actual date of the market transaction. Reference for cluster, flow calculations and historical backtest prices.
pubDate
Regulatory filing date (AMF, SEC, BaFin, SIX, RNS, SEDI, Consob, CNMV, AFM, FSMA, Oslo, Helsinki, Stockholm, Copenhagen, ASX, FMA or Dublin depending on market; can be 1 to 3 days after the transaction). Used as fallback when transactionDate is missing.
scoredAt
Timestamp of the last signalScore calculation. Re-scoring only triggered when the company's fundamentals have been refreshed.
financialsAt
Date the Yahoo income statement (annual) was fetched. No more than once per week per company.
priceAt
Date technicals were fetched (current price, MAs, 52w high/low). Refreshed daily.
analystAt
Date analyst consensus was fetched (rating, target). Refreshed daily alongside technicals.
Look-ahead bias. The backtest uses only prices available at the transaction date. No future information can influence a trade’s historical score.
  • Past performance ≠ future performance. A historically winning signal can stop working when market conditions change.
  • Market noise. Prices from T+30, T+90 and T+365 reflect everything, not just the signal's effect. The backtest measures a correlation, not a causation.
  • Fundamental coverage. For recently listed companies or very small caps, Yahoo data is sometimes incomplete. Unavailable composite signals do not penalise the score (abstention rule).
  • Transactions outside regulatory scope. Purchases made via derivatives (options, CFDs), undisclosed third-party vehicles, or on markets outside our perimeter (AMF, SEC, BaFin, SIX SER, RNS, SEDI, Consob, CNMV, AFM, FSMA, Oslo, Helsinki, Stockholm, Copenhagen, ASX, FMA, Dublin and more) are not captured.
  • Non-public information. Capital restructurings, stock-option plans, and other corporate events can explain a buy, the raw signal won't always know that.
Honesty · Out-of-sample tracker

Since May 27, 2026, the BUY ranking served on the site is frozen every night with the last known price. Each company counts once per holding window and is compared with the index of its region over the same dates. Positions measured at 30 and 90 days, with their coverage and confidence intervals, are published on /performance , no revision, no cherry-picking.

Transparency · Yahoo Finance Data

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.

FieldUse in scorePIT StatusRisk
marketCapF1 pctMcap (16 pts)Current snapshotHIGH
analystScoreF2 fundamentals + F7 contrarianCurrent snapshotHIGH
targetMean / targetHighComposite upside bonusCurrent snapshotHIGH
currentPrice / 52w MAnear-52w-low, oversoldCurrent snapshotMEDIUM
trailingPE / D/E / ROEComposite value/qualityCurrent snapshotMEDIUM
analystRecoDisplay onlySnapshot, SAFESAFE
See the strategy in action

Live signals, versioned backtests.

This information is provided for educational purposes and does not constitute investment advice. Investing involves a risk of capital loss.

All insider purchases (not the strategy)
48.8%
BUY win rate at T+90
n = 59,727 · every insider buy, no selection, recent window
+3.6%
Average T+90 return
winsorized mean, cohort recomputed weekly, last computed on October 12, 2026
Transparency

How each market enters the ranking

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.

  • A position size is suggested only on the venues of the backtested strategy universe; elsewhere, signals stay on watch. The evidence label shows which markets need more validation.
  • Markets with insufficient evidence still appear as watch items, including US names when they rank well locally. Watch items receive no allocation until the evidence threshold is met.

The labels describe research evidence, not an expected return or investment advice.

Read the full backtest →See the live proof →

From the buy to the score

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.

  • Directional cluster
    +15 / 18
    3 insiders, same directionSeveral insiders buying the same name, same way, within 30 days.
  • Insider seniority
    +22 / 22
    CEO / Managing DirectorWho is buying. A CEO or CFO carries more signal than a board member.
  • Size vs market cap
    +10 / 16
    0.42% of market capHow big the buy is relative to the whole company (log-scaled).
  • Insider track record
    +11 / 14
    +6% avg 90d (n=4)How this insider's past buys actually performed (shrunk, look-ahead free).
  • Share of insider flow
    +6 / 8
    60% of own flowHow concentrated this trade is within the insider's own activity on the name.
  • Market context
    +6 / 10
    4 signalsMomentum, valuation, quality and analyst upside around the trade.
  • Repeat accumulation
    +4 / 6
    2 prior buys (12m)The same insider has added to the position over the last 12 months.
  • Analyst-contrarian
    +6 / 6
    consensus 3.6 / 5Insider buys while sell-side consensus is lukewarm have run hotter.
80Signal score

Backtest of the served method, audit 260

-0.02
Sharpe 2022
+1.00
Sharpe 2023-2024
+2.84
Sharpe 2025-2026Q1
+1.17
Sharpe 2022-2026Q1

Version history

Earlier versions of the method

Figures we published before and have since replaced. They stay here, dated and tied to their audit, so anyone can check what changed. None of them describes the method served today.

  1. ArchivedAudit 169 is internal and not published

    Point-in-time correction of the former top 10 (audit 169)

    The former monthly top 10, sold after 90 days, measured again without two pieces of future information: the cluster window limited to the 30 days before publication, and the insider's track record lagged by 91 days.

    • 2022: annualized Sharpe +0.05 (95% CI -2.94 to 1.76), deflated Sharpe -2.05.
    • 2023-2024: annualized Sharpe -1.99 (95% CI -3.29 to -0.76), deflated Sharpe -3.47.
    • 2025-2026Q1: annualized Sharpe +0.53 (95% CI -1.28 to 2.46), deflated Sharpe -1.34.
    • Rows left out for lack of prices: 456 never priced and 1,349 published after the last known price. Effect on the top 10: 0 picks.
    • These figures compounded 90-day baskets every month, an accounting retired by audit 231.

    Replaced by the portfolio-accounting backtest shown in the Backtest chapter, on a total-return basis since audit 251. Replaced by audit 231 of September 30, 2026

  2. ArchivedAudit 168 is internal and not published

    Ranking power of the score (audit 168)

    Return of the top decile of the score once size, sector and market are neutralized, on two out-of-sample windows.

    • Windows 2023-2024 / 2025-2026Q1: t = 5.70 then 2.84, information ratio 4.0 then 2.5.
    • The edge, spread over about 636 names, was smaller than transaction costs.

    Replaced by the comparison of the ranking with every eligible insider purchase, in the same accounting (Backtest chapter). Replaced by audit 231 of September 30, 2026

  3. ArchivedRead audit 158

    Sigma v1.0 strategy and its in-sample cohort (audit 158)

    Former rule: open-market purchases only, at least 2 buying executives, board members excluded, filed within 7 days, market cap from €200M to €1bn, v3 score of at least 40, sold after 90 days, rebalanced every 3 months.

    • Cohort 2022-2025: 3,864 signals, win rate 51.5% (Wilson 95% CI 49.9% to 53.1%), mean return +2.6% per position at 90 days, not annualized.
    • Cross-sectional Sharpe 0.10: a per-position statistic, not a portfolio Sharpe. 583,200 filter combinations were tested and the deflated Sharpe is negative.
    • Every insider purchase, no selection: 391,106 trades, win rate 46.3%, winsorized mean -0.41% at 90 days.
    • Calendar years against the CAC 40, monthly compounding since retired: ahead in 2 years out of 4.
    Sigma v1.0 by calendar year, retired accounting
    YearSigma v1.0CAC 40
    2022+23.6%-9.5%
    2023-26.5%+16.5%
    2024-17.0%-2.2%
    2025+26.1%+10.4%
    Every insider purchase by venue, per-position statistics
    VenueTradesMean at 90 daysWin rateCross-sectional Sharpe
    XNAS252,376-1.73%44.2%-0.075
    XPAR16,208-0.83%44.2%-0.043
    XAMS4,118+2.05%53.8%+0.125
    XSTO4,209+2.20%48.6%+0.087
    XHEL4,304+0.76%48.4%+0.050
    XMAD4,639+3.95%61.5%+0.330

    Replaced by the composite ranking described in the Served method chapter. Its figures were retired by audit 231. Replaced by audit 231 of September 30, 2026