Explaining a trading P&L: what finance knows about performance attribution, and what is open

Emmanuel Sérié · November 2026

present

Introduction

This page reviews methods from finance and statistics that attribute trading P&L to indicators and signals. It describes where methods disagree and which questions remain open, to help start research projects.

The page analyses no desk’s data. Every number comes from a published paper or a synthetic simulation; Code and data links its code or summary output. The intended readers work on or with an intraday trading desk: traders, quants and risk teams. The page assumes basic linear algebra and statistics.

You can interact with the figures. Margin notes identify what to examine in each paper. Optional blocks contain derivations. Section 3.5 contains the simulation code in a folded notebook. The route below links to each section. The citation graph at the end of the page shows the papers that we read and how they cite each other.

A desk wants to understand its P&L, including gains and losses. It tracks spread, volatility, order flow, inventory and its trading signals. A P&L decomposition assigns parts of the P&L to signals, positions and costs. The desk can use it to decide which signals to keep, how to size them and which costs to reduce.

The word explain has three meanings on this page. First, an explanation can identify an unusual market condition. Azencott and colleagues’ diagnostic below and the state indicators in section 5 serve this purpose.

Second, it can assign a share of the P&L to each indicator. The accounting and allocation methods in sections 1–5 serve this purpose.

Third, it can check whether a relationship holds on new data, with the statistical tests in section 6. Section 7 develops research projects from these questions.

The route of this page, from diagnosing orders to explaining a P&L

Each numbered station links to its section. The current section is highlighted.

The route connects order diagnostics in real-time transaction cost analysis to P&L attribution. Stations link to sections 1 to 7. Section 1 sets the reference P&L and residual. Section 2 covers Brinson 1985/86, Litterman 1996 and factor models. Section 3 covers stand-alone proxies, leave-one-out, Durin 2014, Grinold–Easton and Shapley 1953. Section 4 covers Shapley R², SHAP and SAGE. Section 5 covers spread and positioning after Menkveld. Section 6 covers search, collider and Sharpe ratio. Section 7 starts with the ledger and proposes a research log. P&L attribution needs contributions that reconcile and rules to share information. Its statistical tests must account for the search.

Questions from a trading desk

In their paper on real-time transaction cost analysis, Azencott et al. (2014) describe an online diagnostic for execution algorithms. The diagnostic evaluates active orders every five minutes. It labels orders as bad when their slippage falls among the worst 3% or 5% of active orders.

Descriptors are market variables used in the diagnostic. They include volume, volatility and spread measures, rarity scores and anomaly detectors. The diagnostic searches for threshold rules on individual variables and pairs of variables that separate bad orders from the rest.

Sensitivity is the hit rate on bad orders. Specificity is the true-negative rate on the other orders. A rule must reach a minimum for both rates. The paper sets this minimum at 85%. A group’s influence score is the best hit rate subject to this minimum. The score is zero if no rule qualifies.

Portfolio P&L attribution also requires rules to share contributions between correlated indicators. Statistical tests must account for the search that found a relationship in the data.

From orders to P&L. The diagnostic identifies orders in a poorly performing group at a particular time. A P&L attribution starts with a continuous amount accumulated over an interval. That amount can be positive or negative. The diagnostic shows where gains or losses occurred. It does not show how much each indicator contributed.

The contributions must reconcile. Several descriptors can each give a useful alarm. Their scores measure classification rates. These rates do not sum to a monetary P&L. Contributions that sum to the P&L require a specified total and compatible units. The attribution must also show a residual for the amount that remains unallocated.

Correlated indicators share information. In Azencott and colleagues’ example, volume, volatility and spread scores identify the same episode. If each indicator receives credit for the whole episode, we count it repeatedly. We need a rule to share that information. If we choose only the strongest score, the other contributions remain unresolved.

The search affects the statistical test. Azencott and colleagues search single variables and pairs for candidate explanations. They test 406 candidates in each of 79 five-minute slices, with thresholds selected in sample (Azencott et al., 2014, p. 26–27). They restrict model complexity but do not control false discoveries across that search. A threshold on a diagnostic score does not control errors across multiple tests. If we screen many indicators against past P&L, we also need to control errors across that search.

The page follows a roughly historical order. It starts with portfolio attribution against a benchmark in the 1980s, then examines factor returns and risk. Next come the signals that drive portfolio positions, correlated indicators and the market maker’s ledger. Statistical pitfalls and possible research projects follow. The problems determine the order more than the dates do. Some tools come from older work and appear where the problem requires them.

↑ Sections

1. What it means to attribute a P&L

Four choices define the attribution

The bars show how the reference P&L, components and residual sum to the realised P&L. The bar heights are schematic. Select a choice to see which terms it fixes.

Realised P&L minus reference P&L equals the sum of the components plus a residual. The waterfall keeps the residual visible. Four choices define the components: the reference, the accounting interval, the information and the kind of indicator. The reference can be a paper portfolio or positions valued at the midprice. The interval separates position P&L from trading P&L. The information uses exposures declared before the result or fitted after it. Signals drive trades; state indicators describe conditions. The sum alone does not show that the components explain the P&L.

To assign amounts to indicators, we first need a total and a reference for the comparison.

Attribution against an index explains the active return, RP−RBR_P-R_B. Here RPR_P is the portfolio return and RBR_B is the index return. Both cover the same interval.

For a trading portfolio, we might compare P&L with a paper portfolio. This portfolio contains the trades intended at decision time, valued without execution costs (section 5.1). We can also fix a valuation rule and explain the resulting P&L. For example, we can value every position at the midprice. State the reference. It determines what the contributions mean.

The accounting requirement is

Π−Πref=∑jCj+ε.\Pi-\Pi^{\mathrm{ref}}=\sum_j C_j+\varepsilon.

Here Π\Pi is the realised P&L. The reference P&L is Πref\Pi^{\mathrm{ref}}. The amount CjC_j is assigned to component jj. The residual ε\varepsilon is the amount the chosen model leaves unallocated. Keep this residual visible.

If the residual equals the unallocated difference, the amounts sum to the total. This equality does not establish that the other terms explain behaviour, predict returns or identify causes.

1.1 What daily snapshots miss

The accounting interval determines which positions the decomposition can observe.

In his book The Elements of Quantitative Investing, Paleologo (2025) divides a portfolio’s P&L into three parts (Paleologo, 2025, p. 335). Snapshots record positions at fixed times, for example at each close. Position P&L is what these positions earn if they remain unchanged until the next snapshot. A factor model divides this amount into factor P&L and specific P&L (section 2.4).

Trading P&L is actual P&L minus position P&L. It includes all gains and losses from trades between snapshots. If a portfolio is flat at every snapshot used by a daily attribution, its position P&L is zero. All realised P&L then belongs to trading P&L.

In this case, intraday alpha, spread earned and execution costs all stay in trading P&L. They stay there although the portfolio carried inventory and factor risk between snapshots. To explain them, we need the fills and the inventory path, or a model of how signals produced those trades.

1.2 Information and accounting interval

The snapshot problem concerns when positions are recorded. We also need to distinguish information known before returns from estimates fitted afterwards.

An exposure measures the portfolio’s sensitivity to a factor. Ex ante analysis uses exposures and a risk model recorded before returns occur. Ex post analysis combines them with realised returns.

In Active Portfolio Management, Grinold & Kahn (2000) ask that skill be judged on the bets the manager declared beforehand. If we fit new exposures after observing P&L, we test an explanation chosen after we saw the result. This test does not evaluate the declared bets.

Holdings-based attribution uses observed positions. Returns-based attribution estimates exposures through a regression of portfolio returns on index returns. Sharpe’s style analysis in section 2.3 is an example. These estimates may differ from the positions actually held.

Currency P&L adds across non-overlapping periods on a consistent accounting basis. Percentage returns compound. The period return is ∏t(1+Rt)−1\prod_t(1+R_t)-1, rather than ∑tRt\sum_t R_t. Daily percentage contributions therefore do not sum to the period return. A linking rule rescales them.

Sums of currency P&L need no linking rule. We still need reference prices and a rule to share interaction terms, such as the term in section 2.1.

1.3 Two kinds of indicator

With the reference and interval fixed, the next distinction concerns the role of each indicator in the trading process.

Signals used to take positions. A forecast enters the trading algorithm and may change its trades. If we can rerun the policy, we can remove signals, run them alone or combine subsets. State the market path and risk convention for these runs. Section 3 shares the resulting P&L between signals. Section 4 explains how this differs from the allocation of predictive information between indicators.

State indicators. Spread, volatility, order flow and inventory describe the conditions in which gains and losses occur. The trading algorithm need not use them as inputs. First divide the fills’ P&L into spread earned and gains or losses on inventory (section 5). Then explain how each component varies with the recorded states (section 4). Test whether the findings could arise by chance, with allowance for the indicators, horizons and thresholds tried (section 6). Section 7 uses that sequence to define a research project.

The same variable can serve both roles. If we remove a forecast and rerun the policy, the trades change. We can also compare average outcomes of fills between periods of high and low volatility. This statistical comparison alone does not establish a causal effect.

↑ Sections

2. The classical answers

Before attributing P&L to trading signals or state indicators, we can divide returns using the portfolio and its benchmark.

2.1 Allocation, selection, interaction

We compare a manager’s portfolio with a benchmark index. Both divide their money between segments. A segment is a group of assets, such as a country, sector or asset class. The paper below uses countries as segments.

The manager chooses how much to invest in each segment and which stocks to hold within it. The benchmark holds each segment’s stocks in index proportions. Within a segment, the portfolio’s stocks can earn more or less than the benchmark’s stocks.

The figure below uses a synthetic portfolio with two segments, A and B. Over the period, the benchmark stocks in A returned 600 basis points (bp). Those in B returned 200 bp. The portfolio invests 60% in A and 40% in B. The benchmark invests 40% in A and 60% in B.

Within A, the portfolio’s stocks returned 800 bp, above the benchmark’s 600 bp. Within B, they returned 100 bp, below the benchmark’s 200 bp. The total portfolio return is 520 bp. The total benchmark return is 360 bp. The active return is 160 bp. We want to separate the contributions from segment weights and stock choices.

In their paper on measuring non-US equity portfolio performance, Brinson & Fachler (1985) divide active return into allocation, selection and interaction. For each segment ii, write wiw_i for its weight in the portfolio and bib_i for its weight in the benchmark. Write rir_i for the portfolio return within that segment. Write riBr_i^B for the segment’s benchmark return. Both sets of weights sum to one. The total returns are

RP=∑iwiri,RB=∑ibiriB.R_P=\sum_i w_i r_i, \qquad R_B=\sum_i b_i r_i^B.

Each total weights the segment returns by the amounts invested there. In our example, the portfolio return is 0.6×800+0.4×100=5200.6\times800+0.4\times100=520 bp; the benchmark return is 0.4×600+0.6×200=3600.4\times600+0.6\times200=360 bp.

Start with their difference:

RP−RB=∑i(wiri−biriB).R_P-R_B=\sum_i(w_i r_i-b_i r_i^B).

This compares the actual portfolio with the benchmark. To separate weights from returns, add and subtract wiriBw_i r_i^B and birib_i r_i inside each segment’s contribution:

wiri−biriB=(wiriB−biriB)+(biri−biriB)+(wiri−wiriB−biri+biriB).\begin{aligned} w_i r_i-b_i r_i^B &=(w_i r_i^B-b_i r_i^B)\\ &\quad +(b_i r_i-b_i r_i^B)\\ &\quad +(w_i r_i-w_i r_i^B\\ &\qquad -b_i r_i+b_i r_i^B). \end{aligned}

The first line changes only the weights, using benchmark segment returns. The second changes only the segment returns, with benchmark weights. The last two lines account for simultaneous changes in weights and returns.

The weight differences sum to zero. We can therefore subtract the total benchmark return from each segment return in the first term. This leaves the sum unchanged:

∑i(wi−bi)RB=0.\sum_i(w_i-b_i)R_B=0.

An overweight in one segment must be offset by underweights elsewhere. This gives the allocation term of Brinson and Fachler (1985)

Ai=(wi−bi)(riB−RB).A_i=(w_i-b_i)(r_i^B-R_B).

Allocation measures the gain from an overweight in a segment that beats the overall benchmark, or an underweight in a segment that lags it. It uses the segment’s benchmark return. It does not yet credit the investments chosen within that segment.

Si=bi(ri−riB).S_i=b_i(r_i-r_i^B).

Selection measures the gain from beating the segment benchmark, applied to the benchmark’s weight in that segment.

Ii=(wi−bi)(ri−riB).I_i=(w_i-b_i)(r_i-r_i^B).

Interaction is the extra gain or loss from applying that same return difference to the overweight or underweight. Together the three terms give

RP−RB=∑i(Ai+Si+Ii).R_P-R_B=\sum_i(A_i+S_i+I_i).

Every part of the active return is included. For segment A, the calculations in basis points are

AA=(0.6−0.4)(600−360)=48,SA=0.4(800−600)=80,IA=(0.6−0.4)(800−600)=40.\begin{aligned} A_A&=(0.6-0.4)(600-360)=48,\\ S_A&=0.4(800-600)=80,\\ I_A&=(0.6-0.4)(800-600)=40. \end{aligned}

The portfolio overweights A. This segment’s benchmark return exceeds the overall benchmark return. The portfolio also beats the benchmark within A. All three effects are positive. For B, the calculations in basis points are

AB=(0.4−0.6)(200−360)=32,SB=0.6(100−200)=−60,IB=(0.4−0.6)(100−200)=20.\begin{aligned} A_B&=(0.4-0.6)(200-360)=32,\\ S_B&=0.6(100-200)=-60,\\ I_B&=(0.4-0.6)(100-200)=20. \end{aligned}

The underweight in the segment with the lower return helps allocation. Selection is negative because the investments in B lag its benchmark. Interaction is positive because the underweight reduces that loss. Across both segments, allocation contributes 80 bp, selection 20 bp and interaction 60 bp. Their sum is 160 bp.

In their study Determinants of Portfolio Performance, Brinson et al. (1986) use the segment benchmark return directly for allocation:

Ai1986=(wi−bi)riB.A_i^{\mathrm{1986}}=(w_i-b_i)r_i^B.

Compared with the 1985 term, this adds (wi−bi)RB(w_i-b_i)R_B to each segment’s allocation. Those additions sum to zero, so total allocation stays the same even though its segment entries change.

A separate choice is to measure selection at portfolio weights:

Siportfolio=wi(ri−riB)=Si+Ii.S_i^{\mathrm{portfolio}}=w_i(r_i-r_i^B)=S_i+I_i.

This includes interaction in selection. Do not report interaction again as an additional contribution. Both conventions account for the full active return. Both sums equal the active return, so the sum cannot show which convention to use. We must choose the comparison that each label describes.

Change a weight or return in the figure. Then switch conventions with those inputs fixed. The area view draws one segment’s terms as weight times return. The bars show both segments and their totals in basis points. (Brinson & Fachler, 1985) (Brinson et al., 1986)

One active return, several attribution conventions

Synthetic two-segment portfolio. Returns and effects use basis points (100 bp = 1 percentage point). Both portfolios remain fully invested.

What to notice

Switch between 1985 and 1986 and compare the segment bars with the total allocation bar. Then include interaction in selection. This also changes the total selection bar. Both switches leave active return unchanged.

2.2 Explained variance is not a share of money

The preceding identity divides active return into amounts. A regression of returns answers a different question: how much of their variation it fits.

An explanation of return variation does not give the share of money earned through investment policy. Brinson, Hood and Beebower studied pension plans. Their sample covered 91 plans over 40 quarters, from 1974 to 1983.

For each plan, they built a policy portfolio. This portfolio invests the plan’s long-run mix of stocks, bonds and cash in passive indices. They estimated the mix from the plan’s 10-year average positions. The policy return is the return of this portfolio. The plan’s active return is its actual return minus the policy return.

For each plan, they regressed quarterly returns on policy returns. The average R2R^2 across plans was 93.6% (Brinson et al., 1986, p. 43, Table VII). A plan’s returns move with its policy returns. This does not tell us what share of earnings comes from policy. Nor does it explain why one plan earns more than another.

Across plans, the standard deviation of policy returns was 0.22 percentage points a year. For active returns, it was 1.45 percentage points a year (Brinson et al., 1986, p. 43, Table VI). A constant loss added to quarterly returns lowers the plan’s mean return. It leaves R2R^2 unchanged because the regression intercept absorbs the constant. (Brinson et al., 1986)

Increase the differences between plans’ average active returns. Their mean returns move further apart. Their time-series fits stay unchanged because a constant added to returns does not change R2R^2. (Brinson et al., 1986)

A high R² does not explain differences in return levels

Synthetic additive panel with a fixed seed: 91 plans over 40 quarters. The dispersion of mean active returns changes. Common policy shocks and quarterly active noise stay fixed.

What to notice

Tables VI and VII of Brinson, Hood and Beebower (Brinson et al., 1986, p. 43) distinguish two quantities. These are differences in mean return across plans and the fit over time. The simulation uses an additive design with synthetic arithmetic returns. It does not reproduce their tables of compound returns.

The default population dispersion of mean policy returns is 0.22 percentage points per year. For mean active returns, it is 1.45 percentage points per year. The quarterly noise is calibrated to a population R2R^2 of 93.6%. The paper reports a realised dispersion across plans of 1.45 pp. The simulation uses this value as a population parameter. The simulated panel’s measured R2R^2 and dispersions differ from population values because the sample is finite.

2.3 A fitted exposure need not be a holding

The policy portfolio above uses average positions. A returns-based approach estimates a comparison portfolio directly from the fund’s returns.

In a paper on asset allocation and performance measurement, Sharpe (1992) fits a style to a fund’s returns. A style is a set of non-negative asset-class weights that sum to one. Sharpe minimises the variance of the difference between the style return and the fund’s return. The mean difference is unconstrained. The fitted weights describe a long-only mix. The fund need not have held that mix.

Sharpe estimates the style from earlier observations to assess selection later. He uses separate data to estimate the benchmark and evaluate performance.

2.4 Factor return and factor risk

Sharpe infers a portfolio mix from returns. With recorded positions and specified factor exposures, we can instead divide position P&L into factor and specific terms.

A linear factor model writes the vector of asset returns at time tt as

rt=Btft+ut.r_t=B_t f_t+u_t.

Here BtB_t contains asset exposures to the factors. The vector ftf_t contains factor returns. The vector utu_t contains asset returns that the factors leave unexplained. Dollar positions hth_t give the amount held in each asset over the return interval. Position P&L is

ht⊤rt=(Bt⊤ht)⊤ft+ht⊤ut.h_t^\top r_t=(B_t^\top h_t)^\top f_t+h_t^\top u_t.

The vector Bt⊤htB_t^\top h_t gives the portfolio’s factor exposures. Factor exposure times factor return gives each factor’s contribution; the remaining term is specific P&L.

These terms add up even when factors are correlated. Correlation affects risk and the interpretation of factors. It adds no interaction term to this linear return identity. A rotation of the factor basis replaces the factors with linear combinations of them. This can change individual contributions while the total stays the same. (Grinold & Kahn, 2000; Paleologo, 2025)

The return identity divides realised gains and losses into factor and specific P&L. The location of volatility depends on factor exposure. A factor-hedged portfolio has specific risk; a portfolio with large exposure can have mostly factor risk. The mean of each component is uncertain over a short history (see §2.5).

Factor and specific P&L

Synthetic daily P&L for 100 assets. Adjust the factor exposure, signal strength and history length. IC measures the correlation between the signal and the specific asset return.

What to notice

At zero factor exposure, specific P&L equals total P&L. Increase exposure to 4: factor shocks now cause most of the variance. The model’s expected gain still comes from the specific signal. Select a short history, then press “New history” to see how realised mean shares change. Sample covariance can be nonzero even though the model covariance is zero.

To attribute risk, take a fixed covariance matrix Σ\Sigma and position vector xx. Portfolio volatility is

σ(x)=x⊤Σx.\sigma(x)=\sqrt{x^\top\Sigma x}.

This combines the positions with their variances and covariances. Volatility scales with the portfolio. If every position is multiplied by c>0c>0, then σ\sigma is multiplied by cc. For positive portfolio volatility, the derivative with respect to a position is (Σx)i/σ(x)(\Sigma x)_i/\sigma(x). Euler’s theorem then gives

σ(x)=∑ixi∂σ∂xi,RCi=xi(Σx)iσ(x).\sigma(x)=\sum_i x_i\frac{\partial\sigma}{\partial x_i}, \qquad \mathrm{RC}_i=\frac{x_i(\Sigma x)_i}{\sigma(x)}.

In Hot Spots and Hedges, Litterman (1996) uses this property to write risk as a sum of position times marginal risk. Here RCi\mathrm{RC}_i is position ii‘s contribution to volatility. Each position’s contribution depends on its covariance with the whole portfolio, as well as its size and stand-alone volatility. A hedge can contribute negatively, and the largest position need not contribute the most risk.

Change the size, volatility and correlation of two positions in the next figure. Observe their risk contributions. A larger position can contribute less risk than a smaller one. The decomposition allocates volatility; it does not allocate the realised P&L on a particular day. (Litterman, 1996)

Positions and their contributions to risk

Synthetic two-position portfolio. You can adjust position sizes, annual return volatilities and return correlation. All risk values use the same capital units.

What to notice

The default synthetic portfolio has a larger position in A and a larger risk contribution from B. A negative contribution means that increasing that position slightly reduces risk. The derivative describes a small change in the position. It does not measure the risk change if we remove the position. At zero portfolio volatility, the derivative is undefined.

2.5 Estimated components have uncertainty

In this model, factor returns are estimated each period by a cross-sectional regression of asset returns on the exposures BtB_t. Paleologo treats these estimates as noisy and calculates the resulting uncertainty in factor P&L. Specific P&L is position P&L minus factor P&L. An error in factor P&L therefore appears with the opposite sign in specific P&L. The errors cancel in the total.

The report can sum exactly to the total despite uncertainty about each component. His standard-error calculation assumes a fixed model and normal returns. It also assumes that cross-sectional weighted least squares estimates the factor returns. An extension to exposures that change intraday requires further work. (Paleologo, 2025)

↑ Sections

3. Attributing a P&L to signals

Factor attribution divides the P&L of positions already held. Signal attribution also needs to account for the algorithm that produced those positions.

A portfolio receives several forecasts, but it trades one position. The construction algorithm combines the forecasts with risk, transaction costs and position limits. A signal that asks for a purchase may reinforce another signal, offset it, or leave the portfolio unchanged. To attribute the resulting P&L, we need to know how the signals become trades.

If we can rerun the algorithm, we can compare its outputs with different signals as inputs. If we also know its optimality equations, we can split the joint solution directly. Coalition methods need more reruns, but do not need those equations. Each method uses different information and gives a different meaning to a signal’s contribution.

What each method needs: reruns or optimality equations

The optimiser converts signals into positions and P&L under risk, costs and constraints. Above, stand-alone proxies, leave-one-out and Shapley rerun the construction with subsets of signals. They need a policy we can rerun. Below, Durin 2014 and Grinold–Easton use the optimality equations and multipliers at the joint optimum. They need a known optimiser.

3.1 Stand-alone portfolios as proxies

A stand-alone proxy method used in practice reruns the same construction algorithm with one signal active at a time. Each run keeps the construction rules, including costs and constraints. Each signal receives its own risk target. A risk target is a chosen level of predicted portfolio volatility. In the simulation below, the optimiser adjusts risk aversion each period to reach that target when the constraints permit it.

The resulting P&L series includes the trades generated by the signal. A fast signal’s proxy includes its turnover. A slow signal’s proxy includes the positions it carries. We fit these P&Ls. We do not fit the raw forecasts.

Write the total P&L in period tt as yty_t. Write the proxy for signal kk, at risk target σk\sigma_k, as pk,t(σk)p_{k,t}(\sigma_k). Fit non-negative least squares without an intercept:

β^=arg⁡min⁡βk≥0∑t(yt−∑k=1Kβkpk,t(σk))2.\widehat\beta =\arg\min_{\beta_k\geq0} \sum_t\left(y_t-\sum_{k=1}^{K}\beta_k p_{k,t}(\sigma_k)\right)^2.

Here pk,tp_{k,t} abbreviates pk,t(σk)p_{k,t}(\sigma_k). The contribution assigned to signal kk is β^kpk,t(σk)\widehat\beta_k p_{k,t}(\sigma_k). Keep the residual as a separate term:

et=yt−∑kβ^kpk,t.e_t=y_t-\sum_k\widehat\beta_k p_{k,t}.

There is no constant term to absorb an average gain or loss. The non-negative coefficients prevent the fit from reversing a proxy’s sign. They can still assign a negative contribution to a proxy that loses money.

The method then updates each risk target by

σk←β^kσk.\sigma_k\leftarrow\widehat\beta_k\sigma_k.

This update is undamped: the full coefficient is applied at each step. It multiplies each target by the fitted coefficient, regenerates the proxies and fits again. A coefficient below one lowers the proxy’s risk target. A coefficient above one raises it. At a fixed point, each surviving proxy enters the fit unscaled. A coefficient of zero drops the proxy.

A scaled proxy can differ from the proxy of a new run at the new risk target, because the construction is nonlinear. We therefore repeat the regression.

The coefficients tell us how to weight these proxies. We cannot read them as independent risk budgets in the combined portfolio, because signals can be correlated. Trades can also offset each other and constraints can bind.

In his paper on signal-wise attribution for constrained optimisation, Durin (2014) describes regressions on stand-alone portfolio P&Ls as existing practice. He rejects them as a general solution because binding constraints can leave a large residual (Durin, 2014, p. 3). His attribution uses the optimiser’s internal equations to address this limitation.

The residual shows how much of the joint strategy these separate runs fail to reproduce. The construction algorithm can produce joint trades whose P&L no fixed non-negative mixture of stand-alone P&Ls reproduces. Assigning the residual to the signals would make the contributions add up without explaining any more of the joint P&L.

Even a small residual only tells us that the proxy P&Ls fit the observed total in this sample. Similar proxies can still have non-unique coefficients. A good fit neither establishes causality nor tells us what would happen if we removed a signal.

3.2 Removing one signal from the full portfolio

A proxy fit leaves the effect of removing a signal unresolved. Leave-one-out attribution measures that effect by rerunning the combined portfolio.

Leave-one-out attribution runs the construction with all signals and then with each signal omitted. In his book Quantitative Portfolio Management, Isichenko (2021) describes this method for forecast attribution. The deterioration of the historical simulation measures the forecast’s marginal contribution. The combination is nonlinear, so these contributions need not sum to the total (Isichenko, 2021, p. 134).

Let NN be the full set of signals. Let v(S)v(S) be the P&L from a run with only the signals in a subset SS, under a specified risk convention. The leave-one-out contribution is

Lk=v(N)−v(N∖{k}).L_k=v(N)-v(N\setminus\{k\}).

A stand-alone run measures what a signal does by itself; leave-one-out measures what disappears when we remove it from the existing combination. A signal that is redundant with another can have a substantial stand-alone P&L and a small leave-one-out contribution. A signal that helps the combined forecast clear a trading threshold can have the reverse pattern.

Neither method guarantees that contributions sum to the total. Several signals may jointly enable a trade. Removing any of them may remove the same gain. The sum of the removal effects can therefore count that gain more than once. For both methods, replay the same market path with the same cost model and treatment of initial positions. State which signals and risk allocations change between runs.

3.3 Using the optimiser’s internal equations

The separate reruns above need not reconcile. Durin instead divides the joint solution using the optimiser’s equations.

In his paper on signal-wise attribution, Durin (2014) divides the optimiser’s positions among the signals. Durin’s method needs a portfolio built by a known convex optimiser. It uses the optimal positions, active constraints and Lagrange multipliers. A Lagrange multiplier measures how the optimum changes when a bound is relaxed. At the joint optimum, with the active constraints fixed, the optimality conditions are linear in the forecasts.

Which attribution method fits which trading policy

Read the two questions from the top. Hover over or focus a policy type to highlight its path and its methods. Each method links to its subsection.

The map asks two questions. Question 1 asks if the policy is a known convex optimiser whose equations we can read. For a static optimiser, Durin 2014 and Grinold–Easton need no rerun, and their contributions sum exactly. For a dynamic optimiser in the Gârleanu–Pedersen model, Durin uses modified forecasts and matrices. With constraints, this treatment is an approximation. Rules, black boxes, learned policies and optimisers with round lots or a minimum trade size go to question 2. Question 2 asks if we can rerun the policy with signals removed. If yes, stand-alone proxies need K runs per iteration and keep a residual. Leave-one-out needs K + 1 runs, and its contributions need not sum to the total. Coalition Shapley needs 2^K coalition values or a sampled budget. If no, the statistical attribution of section 4 shares information, not currency. Its tests must account for the search, as section 6 explains.

Let xt−1x_{t-1} be the previous position and Δxt\Delta x_t the trade. Let gtkg_t^k be the expected return supplied by signal kk for the next period. The combined forecast is Gt=∑kgtkG_t=\sum_k g_t^k. After the trade the position is xt=xt−1+Δxtx_t=x_{t-1}+\Delta x_t. In the static model, the optimiser chooses the trade that maximises the following objective. It subtracts a risk penalty and a quadratic trading cost from the new position’s expected return:

xt⊤Gt−γ2 xt⊤Σxt−12 Δxt⊤ΛΔxt.x_t^\top G_t-\tfrac{\gamma}{2}\,x_t^\top\Sigma x_t-\tfrac12\,\Delta x_t^\top\Lambda\Delta x_t .

Here Σ\Sigma is the covariance of returns, γ\gamma the risk aversion and Λ\Lambda the matrix of quadratic trading costs. Replace xtx_t by xt−1+Δxtx_{t-1}+\Delta x_t and drop the terms that do not depend on the trade. What remains is

Δxt⊤Gt−12 Δxt⊤QΔxt−Δxt⊤Pxt−1,Q=Λ+γΣ,P=γΣ.\begin{gathered} \Delta x_t^\top G_t-\tfrac12\,\Delta x_t^\top Q\Delta x_t-\Delta x_t^\top Px_{t-1},\\ Q=\Lambda+\gamma\Sigma,\quad P=\gamma\Sigma . \end{gathered}

QQ combines the cost of trading and the risk the trade adds. PP measures how the trade interacts with the risk of the previous position. Durin uses this form in his Eq. 5 (Durin, 2014, p. 4), with the static matrices in Eq. 7 (Durin, 2014, p. 5). His paper builds on the dynamic trading model of Gârleanu and Pedersen (2013). He uses this form because that model gives the same expression, with other matrices QQ and PP. It also adjusts the forecasts for each signal’s decay rate.

Setting the derivative with respect to Δxt\Delta x_t to zero gives the optimality equation (Durin, 2014, p. 6, Eq. 8)

QΔxt+Pxt−1=∑kgtk.Q\Delta x_t+Px_{t-1}=\sum_k g_t^k.

The equation is linear in the forecasts. Start from x0k=0x_0^k=0 for every signal. Compute its trade, then update its position (Durin, 2014, p. 6, Eqs. 11–12):

Δxtk=Q−1(gtk−Pxt−1k).\Delta x_t^k=Q^{-1}(g_t^k-Px_{t-1}^k).

The trade responds to this signal’s forecast and the position it already holds.

xtk=xt−1k+Δxtk,xt=∑kxtk.x_t^k=x_{t-1}^k+\Delta x_t^k, \qquad x_t=\sum_k x_t^k.

The component positions sum to the actual position (Durin, 2014, p. 6, Eq. 9). A nonzero initial position must also be divided consistently. Here and below, the inverses require nonsingular matrices. Zero-bound cases use the limits described in the optional derivation.

Let rt+1r_{t+1} be the vector of realised returns over the next holding period. The gross P&L assigned to signal kk is

PnLt+1k=(xtk)⊤rt+1.\mathrm{PnL}_{t+1}^k=(x_t^k)^\top r_{t+1}.

Multiplying every component by the same returns gives an exact gross P&L split (the construction following Eq. 12) (Durin, 2014, p. 6). For risk, write RR for portfolio variance and RkR_k for the share assigned to signal kk (Durin, 2014, p. 6, Eq. 13):

R=xt⊤Σxt=∑k(xtk)⊤Σxt=∑kRk.R=x_t^\top\Sigma x_t =\sum_k (x_t^k)^\top\Sigma x_t =\sum_k R_k.

Each share measures the component’s covariance with the full portfolio, including its interaction with the other signals. For quadratic cost CC, the analogous allocation is (Durin, 2014, p. 7, Eq. 14)

C=12Δxt⊤ΛΔxt=∑kCk,Ck=12(Δxtk)⊤ΛΔxt.\begin{aligned} C&=\tfrac12\Delta x_t^\top\Lambda\Delta x_t=\sum_k C_k,\\ C_k&=\tfrac12(\Delta x_t^k)^\top\Lambda\Delta x_t. \end{aligned}

A component receives its share of the cost of the joint trade, including the savings when component trades offset each other.

Two ways to handle constraints. Grinold and Easton’s attribution keeps each constraint as a separate source. In Durin’s notation, the optimality equation becomes (Durin, 2014, p. 7, Eq. 17)

QΔxt+Pxt−1=Gt+∑cλtc.Q\Delta x_t+Px_{t-1}=G_t+\sum_c\lambda_t^c.

Here cc indexes constraints. The vector λtc\lambda_t^c is the signed contribution of a constraint’s multiplier to the equation, including its exposure direction. The same recursion builds a constraint portfolio from each source, alongside the signal portfolios. This gives the P&L associated with each constraint. It does not specify which signals should bear the constraint’s effect (Durin, 2014, p. 7–8).

An active position constraint contributes extra quadratic risk at the optimum; a trade constraint contributes extra quadratic cost. Write Qˉt\bar Q_t and Pˉt\bar P_t for the resulting matrices. The signal-wise recursion is then (Durin, 2014, p. 10, Eq. 24), with (Durin, 2014, p. 6, Eqs. 10–12)

Δxtk=Qˉt−1(gtk−Pˉtxt−1k),xtk=xt−1k+Δxtk.\begin{aligned} \Delta x_t^k&=\bar Q_t^{-1}(g_t^k-\bar P_t x_{t-1}^k),\\ x_t^k&=x_{t-1}^k+\Delta x_t^k. \end{aligned}

Every signal uses the same effective risk and cost, so its trades include the effect of the binding constraints. A binding trade limit slows trading in the constrained direction. A position limit reduces the aim in that direction, but can make adjustment towards that smaller aim faster. In Durin’s value/momentum example, the no-short constraint affects even the signal that points away from the forbidden short position. The adjustment depends on each signal’s position from previous trades (Durin, 2014, p. 13, Eq. 34).

We evaluate the matrices at the full portfolio’s optimum, so the component positions are shares of that joint solution. Running each signal alone and recomputing its multipliers can give different positions. Removing a signal can change the matrices and every remaining signal’s contribution.

Optional From active bounds to effective matrices: Squared constraints, solver multipliers and zero bounds

Let vcv_c be the vector defining an exposure and McM_c its active bound. For a sector exposure, this vector has an entry of one for each stock in that sector. Its other entries are zero.

At an active upper position bound, vc⊤xt=Mcv_c^\top x_t=M_c. Durin uses the squared constraint (vc⊤xt)2≤Mc2(v_c^\top x_t)^2\leq M_c^2 and a multiplier ηc\eta_c for it (Durin, 2014, p. 11, Eqs. 26–29). For a lower bound, use the bound that is active at the optimum.

The squared constraint matches the optimality equation at the active bound. The square of an arbitrary one-sided bound need not preserve its whole feasible set. The nonnegative-penalty interpretation applies to bounds that reduce the trade or position, in particular when the admissible set contains zero (Durin, 2014, p. 14).

Remove the terms that are constant in the trade. For one position constraint, the augmented objective is (Durin, 2014, p. 11, Eq. 29)

F=−12Δxt⊤QΔxt−Δxt⊤Pxt−1+Δxt⊤Gt−ηcxt⊤(vc⊗vc)xt.\begin{aligned} F={}&-\tfrac12\Delta x_t^\top Q\Delta x_t -\Delta x_t^\top Px_{t-1}\\ &+\Delta x_t^\top G_t -\eta_c x_t^\top(v_c\otimes v_c)x_t. \end{aligned}

The last term penalises squared exposure. The matrix vc⊗vc=vcvc⊤v_c\otimes v_c=v_cv_c^\top is an outer product. With Ac=2vc⊗vcA_c=2v_c\otimes v_c, differentiation gives (Durin, 2014, p. 11–12, Eqs. 29–31)

(Q+ηcAc)Δxt=Gt−(P+ηcAc)xt−1.\begin{gathered} (Q+\eta_c A_c)\Delta x_t\\ =G_t-(P+\eta_c A_c)x_{t-1}. \end{gathered}

One position constraint adds ηcAc\eta_c A_c to both matrices. In the static model, it adds ηcAc/γ\eta_c A_c/\gamma to the covariance matrix. A squared trade constraint adds the term −μcΔxt⊤(vc⊗vc)Δxt-\mu_c\Delta x_t^\top(v_c\otimes v_c)\Delta x_t to the objective. Here μc\mu_c is its multiplier. This constraint changes only QQ (Durin, 2014, p. 12).

For several constraints, let T\mathcal T index trade constraints and P\mathcal P position constraints. Including the time dependence of the multipliers, Eq. 31 (Durin, 2014, p. 12) gives

Qˉt=Q+∑c∈Tμt,cAc+∑c∈Pηt,cAc,Pˉt=P+∑c∈Pηt,cAc.\begin{aligned} \bar Q_t&=Q+\sum_{c\in\mathcal T}\mu_{t,c}A_c\\ &\quad+\sum_{c\in\mathcal P}\eta_{t,c}A_c,\\ \bar P_t&=P+\sum_{c\in\mathcal P}\eta_{t,c}A_c. \end{aligned}

Only position constraints change the term involving the previous position. Inactive constraints have zero multipliers. For individual stock bounds, these additions are diagonal, as in Durin’s long-only example (Durin, 2014, p. 12, Eq. 32).

The solver supplies multipliers for the original linear bounds. Denote one such scalar by λc\lambda^c. The vector λtc\lambda_t^c in Eq. 17 above includes the exposure vector. This scalar does not. Let ϵ\epsilon equal +1+1 for an upper bound and −1-1 for a lower bound in the maximisation convention. The attribution multiplier is (Durin, 2014, p. 14, Eqs. 35–37)

ηc=ϵλc2Mc.\eta_c=\frac{\epsilon\lambda^c}{2M_c}.

This converts sensitivity to the original bound into sensitivity to its square. The same conversion gives μc\mu_c for a trade bound.

At a zero bound this division cannot be used directly. For one trade constraint, define htk=gtk−Pxt−1kh_t^k=g_t^k-Px_{t-1}^k and let vv be its exposure vector. Apply Durin’s rank-one inverse to each signal to obtain (Durin, 2014, p. 15, Eqs. 39–41)

Δxtk=[Q−1−αQ−1vv⊤Q−1v⊤Q−1v]htk,α=2μv⊤Q−1v1+2μv⊤Q−1v.\begin{aligned} \Delta x_t^k &=\left[Q^{-1} -\alpha\frac{Q^{-1}vv^\top Q^{-1}}{v^\top Q^{-1}v}\right]h_t^k,\\ \alpha&=\frac{2\mu v^\top Q^{-1}v} {1+2\mu v^\top Q^{-1}v}. \end{aligned}

As the active bound tends to zero and μ\mu tends to infinity, α\alpha tends to one. This projects the trade onto v⊤Δxtk=0v^\top\Delta x_t^k=0, along Q−1vQ^{-1}v (Durin, 2014, p. 15–16, Eq. 42). For a position bound, use its multiplier η\eta in α\alpha; the trade expression has the additional term (Durin, 2014, p. 16, Eqs. 43–44)

−αQ−1vv⊤v⊤Q−1v xt−1k.-\alpha\frac{Q^{-1}vv^\top}{v^\top Q^{-1}v}\,x_{t-1}^k.

It removes the previous position’s exposure too, so the limiting component position satisfies v⊤xtk=0v^\top x_t^k=0. The infinite multiplier therefore has a finite, well-defined effect on the attributed trades and positions.

Spread costs and the no-trade band. Take a single asset in the static model. Its return variance is σ2\sigma^2. Here Λ\Lambda denotes its scalar quadratic cost coefficient. Durin calls this coefficient λ\lambda in Eqs. 49–60. Charge a positive spread λ0\lambda_0 per unit traded, adding −λ0∣Δxt∣-\lambda_0|\Delta x_t| to the objective. For a nonzero joint trade, the effective quadratic-cost multiplier is (Durin, 2014, p. 16–17, Eqs. 47–48)

ηt=λ02∣Δxt∣.\eta_t=\frac{\lambda_0}{2|\Delta x_t|}.

Smaller joint trades therefore face a larger effective quadratic cost. The optimality equation becomes (Durin, 2014, p. 17, Eq. 52)

(γσ2+Λ+2ηt)Δxt=Gt−γσ2xt−1.(\gamma\sigma^2+\Lambda+2\eta_t)\Delta x_t =G_t-\gamma\sigma^2x_{t-1}.

Spread costs enter the trade coefficient, leaving the previous-position coefficient unchanged. Each signal uses the same ηt\eta_t, with gtkg_t^k and xt−1kx_{t-1}^k on the right. A nonzero trade exists only when (Durin, 2014, p. 17, Eqs. 50–54)

∣Gt−γσ2xt−1∣>λ0.|G_t-\gamma\sigma^2x_{t-1}|>\lambda_0.

Inside this band, including its boundary, the combined forecast does not justify paying the spread. The limiting effective cost is infinite, and every signal’s attributed trade is zero. Durin interprets these terms as voting systems (Durin, 2014, p. 18). No signal trades unless the combined forecast leaves the no-trade band. Two signals can cancel inside it, or together clear it.

Stand-alone portfolios face their own thresholds and histories. A regression coefficient therefore cannot generally align their trading dates with the joint portfolio’s dates.

For several assets, spread cost is assigned using the direction of each joint trade. With ii indexing assets, its allocation to signal kk is (written as a positive cost to subtract) (Durin, 2014, p. 9, Eq. 22)

Cspread,tk=λ0∑iΔxt,ik sgn⁡(Δxt,i).C_{\mathrm{spread},t}^k =\lambda_0\sum_i\Delta x_{t,i}^k\, \operatorname{sgn}(\Delta x_{t,i}).

Here sgn⁡\operatorname{sgn} is the sign function, with value zero at zero. A component trading against the full trade can receive a negative cost allocation because it reduces the net trade to execute. Subtracting these spread allocations and the quadratic costs from each component’s gross P&L gives an exact net split. The effective costs determine the component trades. They are not additional cash costs to subtract.

The same construction handles a turnover constraint, with its multiplier in place of the spread coefficient. Financing costs and leverage constraints penalise absolute positions instead of absolute trades. They become effective risk terms and can force every component’s position to zero (Durin, 2014, p. 8–9, §2.3); (Durin, 2014, p. 18, §3.4, Eqs. 55–60).

Move the signals and the spread in the next figure. Observe when the combined forecast produces a trade.

Spread costs create a no-trade band

Move the two forecasts. The combined forecast must overcome both the spread and the risk of the existing position before any signal trades.

What to notice

Inside the band, both attributed trades are zero, even when one signal alone would trade. Outside it, Durin applies the same effective quadratic cost to both signals. Their attributed trades add up to the actual trade, even if one goes in the opposite direction. Here we set the previous component positions equal. Along a full path, we use the previous attribution step to obtain them. The figure uses the static model of Durin (2014) (Durin, 2014, p. 17–18, Eqs. 49–54).

3.4 Sharing value across coalitions

Coalition reruns offer an allocation without Durin’s internal equations, using every subset rather than only single signals or single removals. Shapley’s rule from cooperative game theory shares the value of these coalitions.

For a coalition game, rerun the algorithm with different subsets of signals. Define v(S)v(S) as the P&L of the construction algorithm with only signals in SS, with v(∅)=0v(\emptyset)=0. A stand-alone proxy is its singleton value v({k})v(\{k\}), provided the risk convention matches. If we update each proxy’s risk target, we need to check this correspondence again: changing the risk convention changes the game.

The Shapley value credits a signal with its marginal contribution averaged over all orders in which the signals could enter. Here KK is the number of signals in NN. Write the marginal contribution as

Δkv(S)=v(S∪{k})−v(S).\Delta_k v(S)=v(S\cup\{k\})-v(S).

This is the extra P&L when signal kk joins the signals already in SS. The allocation is

ϕk=∑S⊆N∖{k}∣S∣! (K−∣S∣−1)!K!Δkv(S).\phi_k=\sum_{S\subseteq N\setminus\{k\}} \frac{|S|!\,(K-|S|-1)!}{K!} \Delta_k v(S).

The weight of SS is a probability over uniformly random orders of the KK signals. It is the probability that exactly the signals in the subset precede kk. For a subset SS, the signals can enter in ∣S∣!|S|! orders before kk. The other signals can enter in (K−∣S∣−1)!(K-|S|-1)! orders after it. Their product counts the relevant orders out of K!K!.

The singleton is the contribution when kk enters first; leave-one-out is its contribution when it enters last. Shapley includes the intermediate coalitions. For each order, the successive increments sum to the full P&L, so their average satisfies ∑kϕk=v(N)\sum_k\phi_k=v(N).

In an additive game the singleton values already sum and Shapley returns them. Otherwise ϕk−v({k})\phi_k-v(\{k\}) records the interaction allocated to signal kk relative to its stand-alone value. This allocation uses the whole coalition game, whereas proxy regression only fits combinations of singleton series. Exact enumeration requires 2K2^K coalition values, so the extra information has a computational cost.

Here each nonempty coalition requires a full backtest of the optimiser: 2K2^K values mean 2K−12^K-1 backtests, since the empty coalition is zero. In their paper on calculating Shapley values by sampling, Castro et al. (2009) average marginal contributions over random signal orders. Each order still sums to the full P&L. In their study of permutation sampling, Mitchell et al. (2022) pair each order with its reverse to reduce sampling error.

In their paper on interpreting predictions, Lundberg & Lee (2017) introduce KernelSHAP. It fits the allocation by weighted regression on sampled coalition values. In their study of KernelSHAP, Covert & Lee (2021) pair coalitions with their complements to improve that estimator.

Families of signals can also reduce the computation. In his paper on games with predefined groups, Owen (1977) averages only over orders that keep each family together. This defines a different allocation convention. Durin’s internal allocation needs no rerun.

The study module defines the eight-signal configuration and the sampling protocol.

On our synthetic histories with 4, 6 and 8 signals, exact enumeration needed 16, 64 and 256 values. Neither reverse-order pairs nor paired KernelSHAP reached the declared precision before reaching that cost. We measured precision against the spread of exact shares across histories. This spread was 0.033–0.059 in half-L1 distance. We required the worst history’s 95th-percentile sampling error to be below a third of that spread.

For the same signal counts, Owen needed 12, 28 and 60 values. Its median distances to Shapley were 0.013–0.031 across the tested sizes and risk conventions. These distances measure the effect of the groups.

The approximation that removes interactions above order two performed poorly on these constrained examples. It is exact with fixed γ\gamma, no position bound and no spread. These results favour enumeration for up to about ten signals. This extrapolates beyond the eight signals tested here. With more signals, sample and compare sampling error with history uncertainty.

The “Approximate Shapley” part of the notebook in section 3.5 contains the code.

Optional Sampling error and history spread

The distance is half the sum of absolute differences between shares, using the full portfolio’s P&L as the common denominator. History spread is the median pairwise distance between exact share vectors from five synthetic histories. It is a descriptive measure. It is not a confidence interval.

Sampling error is measured over repeated draws on each fixed history. In their paper on bounding Shapley estimation error, Maleki et al. (2013) derive bounds for sampling estimates. Those bounds concern sampling error. They do not measure uncertainty about the trading history.

Follow a signal from its singleton value through its marginal contributions to different coalitions in the next figure.

Stand-alone, leave-one-out and Shapley

Edit an illustrative three-signal game. Select a signal to inspect each marginal contribution and its Shapley weight.

What to notice

Stand-alone measures what a signal earns by itself. Leave-one-out measures what the full portfolio loses when we remove it. Shapley averages the signal’s marginal contribution over all orders in which signals could join. With three signals, each end coalition gets weight 1/31/3 and each intermediate coalition gets weight 1/61/6. The shares sum to the full value.

The total interaction is the gap between the full value and the sum of singleton values. It is not a regression residual.

You can edit the integer values in this teaching example. To apply this to trading, first decide how to rebuild each coalition’s portfolio, including its risk convention. The weights follow Shapley’s allocation formula (Shapley, 1953). These P&L values describe this teaching example only.

The synthetic comparison uses two games. In the first, every coalition gets the same risk target. In the second, every coalition uses the risk aversion γt\gamma_t that the full portfolio used at each date. This sequence is the full portfolio’s risk-aversion path, labelled “fixed γ” in the figure. With fixed risk aversion, no position bound and no spread, positions are additive. Gross P&L is linear and quadratic costs create pairwise cross terms; Shapley and Durin then coincide, including the allocation of quadratic costs.

3.5 What the synthetic comparison finds

All methods receive the same synthetic signals and returns. Durin gives an exact internal allocation for this optimiser, so we use it as a reference. Agreement with Durin does not make a contribution uniquely true.

The synthetic desk. A and B label different scores. They do not denote asset classes. The planted coefficients describe how the scores predict returns. They do not represent P&L shares after trading costs and constraints.

Base setupValue
Assets; periods50; 1,000
Asset covarianceDiagonal; volatility 1 per period
Portfolio risk target1 per period
ScoresAR(1), unit marginal variance
Innovation correlation0.3 between signals
Quadratic costΛ=γrefΣ\Lambda=\gamma_{\rm ref}\Sigma
Spread per unit traded0.5 std(G)0.5\,\mathrm{std}(G)
Absolute position bound1.5/501.5/\sqrt{50} per asset
Study seeds20 per configuration
SignalPersistencePlanted coefficient
Fast A0.50.06
Slow A0.950.05
Fast B0.50.04
Slow B0.950.03
Mid A (six signals only)0.80.05
Mid B (six signals only)0.80.04

Returns are the sum of the planted signal components plus independent unit-volatility noise. Here GG is the combined forecast and γref=50 std(G)\gamma_{\rm ref}=\sqrt{50}\,\mathrm{std}(G) is the no-cost, no-bound risk aversion at the unit risk target. The quadratic cash cost is 12Δx⊤ΛΔx\tfrac12\Delta x^\top\Lambda\Delta x. The two-signal configuration keeps fast A and slow A. The six-signal configuration adds the two mid signals. Each configuration below changes only the named parameter from the base.

The tables and the bar figure average 20 seeds per configuration. The P&L paths use one seed, 20261029. They use the same model and configurations, with different random realisations.

Iterated proxies compared with Durin. Distance is half the sum of the absolute differences between the methods’ cumulative net P&L shares. We compute it within each seed, then average it. Zero means the same split. The residual stays separate. “Residual variance” is its variance divided by the portfolio’s P&L variance.

ConfigurationDistanceResidual variance
Base0.185141.60%
Zero spread0.02888.44%
Spread ×10.434487.52%
Spread ×20.492198.63%
Two signals0.058718.87%
Six signals0.317673.62%
Correlation 0.90.392960.81%
ConfigurationZero coefficientsConverged
Base0.10 / 4100%
Zero spread0.00 / 4100%
Spread ×11.20 / 435%
Spread ×23.00 / 40%
Two signals0.00 / 2100%
Six signals1.50 / 665%
Correlation 0.92.95 / 4100%

Spread ×1 and ×2 mean one and two times std(G)\mathrm{std}(G). Zero coefficients are the average number of dropped or zero-P&L proxies, out of the number of signals. Convergence requires every live proxy’s coefficient to be within 10−310^{-3} of one within 50 iterations. A run with no live proxy does not count as converged.

The iterated fit approaches Durin when spread is small and there are few signals. Even at zero spread, the risk target rescales the portfolio each period: removing a signal changes the risk aversion applied to the others. The stand-alone runs therefore need not sum to the joint run.

Large spreads leave most of the portfolio’s variation in the residual. Strong correlation creates a different problem: every run converges, but usually with only one proxy left. Convergence does not recover the dropped signals’ contributions. Identical proxy columns can also give non-unique NNLS solutions, so the fit need not split identical signals equally.

The one-step regression’s residual tends to move with the coalition interaction in section 3.4, ϕk−v({k})\phi_k-v(\{k\}), but need not equal it. Regression absorbs part of the interaction into its coefficients, and the non-negativity constraint also affects the residual. The residual measures what the proxies leave unexplained. The distance measures how the signal allocations differ.

Choose a scenario, then switch allocation methods to follow each signal’s cumulative net P&L. Compare the endpoints below the paths: the portfolio is the same for every method within a scenario.

Synthetic P&L paths under each allocation

These synthetic paths use seed 20261029 across four configurations. The tables and bar figure average 20 seeds per configuration. The thick line is the total portfolio. Dashed lines show residuals or the separate spread and position-limit portfolios.

Both proxy fits use NNLS without an intercept. The iterated fit updates risk targets without damping. Leave-one-out removes each signal and reruns the remaining portfolio at the same risk target. Shapley averages marginal contributions over all coalitions, either at that target or at the full portfolio’s risk aversion at each date.

The Grinold–Easton spread and position-limit lines are attributed portfolios. Each is net of its allocated costs. The spread line does not represent the cash spread bill. All values are synthetic simulation units, with asset volatility and the portfolio risk target set to one per period.

What to notice

With the large spread, slow A, fast B and slow B never trade alone. Their forecasts stay inside the no-trade band. Fast A trades alone on just four dates and ends with a small loss. Its P&L moves slightly against the portfolio. A positive weight would worsen the NNLS fit. Both proxy methods therefore assign zero to every signal and leave the entire portfolio in the residual.

Signals that cannot trade alone can help overcome the spread together. This illustrates Durin’s interpretation of these terms as voting systems (section 3.3), seen from the stand-alone runs. Durin allocates the resulting joint P&L to all four signals on this path.

With the tight position limit, Grinold–Easton’s negative spread and position-limit portfolios offset large positive signal portfolios. Their sum follows the same portfolio as Durin, whose four signal paths include these effects.

At high innovation correlation, the iterated fit keeps only fast A and leaves a positive residual. Its convergence on that surviving proxy does not recover the other signals’ contributions. These examples use a single path. The following figure compares results across seeds.

Select a parameter to vary. The bars show each method’s share of cumulative net P&L for the signals of the selected configuration. The residual has its own row.

The same synthetic P&L, several signal allocations

Select one swept parameter and one of its calculated values. Compare the undamped stand-alone proxy method, one-step regression, Durin, and two Shapley games.

What to notice

The proxy methods use non-negative least squares without an intercept. The iterative method updates risk targets without damping. A small cumulative residual does not imply a small residual variance. The iteration can converge on the remaining proxies without recovering every signal.

“Shapley target” reruns every subset at the same risk target; “fixed γ” uses the full portfolio’s risk aversion at each date (section 3.4). Whiskers show dispersion across synthetic seeds. They do not estimate uncertainty for a real desk. Each share averages per-seed ratios over 20 seeds per configuration. The residual remains separate.

Costs vary little over time in this experiment. At the base configuration, the standard deviation of costs is 2.49% of that of gross P&L. Costs still vary, and their relative size on a real desk can differ.

In a variant, we fit gross P&L and then attach each proxy’s scaled costs. The distance changes from 0.185 to 0.181. The residual variance ratio changes from 41.6% to 42.4%. Separating costs does not remove the construction interactions.

The fixed-risk-aversion equality in section 3.4 does not extend automatically to the nonlinear portfolio. At the base configuration, we measure each net-game Shapley allocation’s distance from Durin. It is 0.045 with a risk target per coalition and 0.037 with the full portfolio’s risk-aversion path. Both come close to Durin, but neither matches it exactly. Shapley’s contributions sum to the full-coalition value of its own game. To reconcile the original ledger, the numerical rerun of that coalition must also reproduce the original portfolio.

These methods need reruns with specified changes to the inputs. Section 7 keeps this comparison separate from later work on causal adjustment and learned policies.

Code: reproduce the synthetic comparison

Download the executed notebook. You can also run it in your browser, without installation. The first load downloads about 25 MB; all cells run in about 45 s. It runs with NumPy, SciPy and cvxpy (Clarabel). The code covers the optimiser, Durin’s allocation and the other methods in section 3, then checks the figure’s baseline and large-spread paths and runs a dense-covariance example.

Open the fold to load the notebook.

↑ Sections

4. Correlated indicators: which value?

Section 3 shared a P&L between signals by rerunning the trading algorithm, or by reading the equations of its optimiser. This section deals with the other case of §1.3. The indicators are state variables: spread, volatility, order flow and inventory. The algorithm may not read them, or we may not be able to rerun the policy. Attribution is then statistical. A fitted model links the indicators to an outcome. Attribution shares the information that the correlated indicators give about that outcome.

The sections below use the following terms.

Shares measure shared information, not a regression coefficient (§4.1). Each game answers a different question, so the choice of game sets the units, the baseline and the meaning of the shares (§4.2). A fitted model always returns shares, so they need a comparison with a null (§4.3).

Correlated indicators share information about the outcome; the chosen game sets what their shares mean.

Venn diagram of an outcome and two overlapping indicators. The part of their overlap that is also about the outcome is hatched as shared information. Beside it, four games value subsets of indicators: refitted regression R², conditional variance, local conditional SHAP and SAGE. Each game states what its value measures. Shapley averages each indicator’s gain over all orders of entry. The game sets the units, baseline and meaning of the shares, which sum to v(N) − v(∅).

4.1 Shared information is not a regression coefficient

An indicator can explain a P&L without having generated it. A variable that tracks another signal may predict the same gains or losses even if the trading rule never reads it.

When indicators move together, a regression can predict their combined effect accurately while estimating their separate coefficients poorly. Small changes in the sample can move a large coefficient from one indicator to another, or reverse its sign. The coefficient describes a change with the other inputs fixed. Such a change may be rare in the observed data. Its size also depends on the input’s units.

In their game-theoretic analysis of regression, Lipovetsky & Conklin (2001) divide the regression’s explained variance. We fit a separate regression to each subset of predictors. The value of a subset is the R2R^2 of its regression.

In the average over all orders of entry, a redundant indicator receives credit when it arrives before its substitute. It receives this credit even if it adds little when it arrives last.

Change the correlation between the paired indicators. We fit the same synthetic model across independent seeds. The figure displays only the first pair of indicators. Both have a true coefficient of 1. The other predictors stay in each regression.

Coefficients and predictive shares under collinearity

Synthetic correlated-indicator study. The coefficient scatter shows individual seeded fits. The other panels show means ±1 sample SD. These are not confidence intervals.

When the inputs are nearly duplicates, the OLS coefficients vary more across samples. The Shapley shares of refitted R2R^2 vary less, because each averages marginal predictive gains over all predictor subsets. These are different estimands and their axes have different units. Stability does not establish causality or significance. (Lipovetsky & Conklin, 2001)

4.2 Choose the value before choosing the allocation

The regression game above values each subset by its fit. Other games retain Shapley’s rule but change what the subset is worth.

Let dd be the number of indicators. The allocation rule is

ϕj(v)=∑S⊆N∖{j}w(S) Δj(S),w(S)=∣S∣! (d−∣S∣−1)!d!,Δj(S)=v(S∪{j})−v(S).\begin{aligned} \phi_j(v)&=\sum_{S\subseteq N\setminus\{j\}}w(S)\,\Delta_j(S),\\ w(S)&=\frac{|S|!\,(d-|S|-1)!}{d!},\\ \Delta_j(S)&=v(S\cup\{j\})-v(S). \end{aligned}

The weights average marginal contributions over orders of arrival. The units, baseline and meaning of the shares depend on the game.

Refitted regression R2R^2 answers one question: how much of the day-to-day variation of the P&L can a regression on these indicators fit? Every subset gets a newly estimated model, and its value is the R2R^2 of that model. Training R2R^2 cannot fall when an ordinary least-squares model with an intercept gains a predictor. Its Shapley shares are therefore nonnegative, including when some predictors contain only noise.

Conditional variance answers one question: keep the fitted model; if we know only these indicators, how much does its predicted P&L vary? The fitted model stays fixed. The value is the variance of the conditional mean prediction given the subset. It measures how much of the output variability those inputs can recover.

In his paper on Sobol’ indices and Shapley values, A. B. Owen (2014) derives the Shapley share of variance for independent inputs. His exact formula uses the model’s variance decomposition (ANOVA). The share lies between two Sobol’ indices. These measure the variance an input explains alone and the variance it adds when it comes last. With correlated indicators, conditional variance is still a possible game, but this formula and these bounds no longer hold as such.

Local conditional SHAP answers one question: on one day, how far does each indicator move the predicted P&L from its average? In their paper on interpreting model predictions, Lundberg & Lee (2017) introduce SHAP. The subset’s value is the conditional expected prediction at the particular observation being explained. The contributions are signed and measured in the prediction’s units. They add to that prediction minus its baseline. Their total is not a fraction of variance. An indicator can push one prediction down and another up.

SAGE answers one question: how much smaller is the model’s prediction error when it can use these indicators? In their paper on global feature contributions, Covert et al. (2020) introduce SAGE. Its value is the reduction in expected prediction loss relative to using no features. A restricted model averages over missing inputs conditional on the retained ones. The answer therefore depends on both the fitted model and the loss. Information useful for squared-error prediction need not have the same value for another objective.

In the synthetic linear experiment, the linear model is the true conditional mean. The loss is squared error. The predictors are jointly Gaussian, so the conditional mean given any subset is also linear. Under these conditions, refitted explained variance, conditional variance and SAGE give the same population shares once their normalisations match. Estimated global shares can differ because of training versus evaluation samples, estimation error or misspecification. This example does not establish distinct population rankings for those games.

What to notice

Even a stable share need not measure a causal effect, be statistically significant or represent a share of realised trading profit. State the target, the subset operation and the baseline beside the ranking.

4.3 Importance needs a comparison under the null

A choice of game defines the shares, but does not establish whether they exceed what chance can produce.

Simpler importance measures make different comparisons. A single-indicator fit can give high scores to several substitutes. Dropping an indicator and refitting may barely hurt because another replaces it. Permuting a column without refitting can create combinations absent from the joint distribution. In the synthetic linear example, near-duplicates have small drop-column importance, but permutation importance does not vanish for both copies. These quantities need not add to a common total.

A shuffled indicator loses its correlations with the other indicators. This makes it an unfair null competitor.

In their paper on false discovery control, Barber & Candès (2015) construct a knockoff of each indicator without using the outcome. A knockoff is an artificial variable with the same correlations with the other indicators as the original. They then compare each original with its knockoff.

Knockoff+ controls the false discovery rate for tests of each indicator’s coefficient under their assumptions. They assume a Gaussian linear model and treat the indicators as fixed (fixed design). The method selects variables. It does not allocate profit.

That guarantee does not automatically cover serially dependent intraday errors. The synthetic knockoff comparison deliberately uses a separate design with independent errors. The comparator shuffles rows and lacks the correlation structure knockoffs require. It gives no FDR guarantee.

A model fitted to unrelated inputs and outcomes still produces shares, and one of them is the largest. Attribution therefore needs a null comparison even without variable selection. In The Dead Salmons of AI Interpretability, Méloux et al. (2025) motivate explicit null comparisons for interpretability. Their experiments concern neural-network probing. They neither validate nor refute this Shapley estimator.

The synthetic attribution experiment uses a response generated independently of the indicators, so no indicator truly predicts it. It compares its shares with those from shuffled versions of that response, one observation at a time or in blocks. Blocks preserve some temporal dependence but cut it at their boundaries. Calibration is therefore approximate.

Suppose that the finding is that one indicator has the largest share. Compare this share with the largest share in each shuffled run. A band for one indicator chosen in advance does not account for choosing the top of the ranking. A shuffle of the whole response tests whether any indicator predicts the outcome. It does not test whether one adds information when others truly predict it.

↑ Sections

5. The market maker’s ledger

The predictive allocations above need an outcome to explain. For a market maker, the fill ledger supplies spread and inventory P&L components.

A passive fill earns a spread against the current midprice. It also changes inventory, which remains exposed to price moves. Net spread is the fill’s gain against the midprice, after exchange and clearing fees, including any rebates. Positioning is the gain or loss on inventory as the midprice moves.

Consider a hypothetical purchase of one share. The midprice before the fill is €100.00, and the market maker buys at €99.98. The fill earns €0.02 against that midprice. Suppose exchange and clearing fees total €0.01 for this trade, with no rebate. The net spread is then €0.01.

The midprice falls to €99.95 while the market maker holds the share. The position loses €0.05 relative to the initial midprice. The marked P&L after fees is €0.01 − €0.05 = −€0.04. This example excludes hedges and liquidation costs.

The counterpart can trade just before an adverse price move. In that case, the fill earns the spread and the inventory loses money. The ledger must record both amounts.

One hypothetical fill: net spread plus positioning gives the marked P&L after fees. No rebate, hedge or liquidation cost is included.

Hypothetical purchase of one share. Prices share one linear vertical scale against time: midprice before 100.00 euros, fill price 99.98, later midprice 99.95. The first bracket is the spread before fees, 0.02; the second is positioning, −0.05. The formulas subtract the 0.01 fee to give net spread +0.01, positioning −0.05 and P&L after fees −0.04. Hover or focus a bracket or formula to highlight its segment.

In his study of high-frequency market makers, Menkveld (2013) examined one unnamed high-frequency trader on NYSE Euronext and Chi-X. The analysis covered 14 Dutch AEX stocks over 200 trading days. The period ran from 4 September 2007 to 17 June 2008 (Menkveld, 2013, pp. 11, 28). The trader made 1,397 trades per stock per day on average, with index weights across stocks (Menkveld, 2013, p. 32, Table 1).

Table 2 reports average amounts per trade for this sample, with index weights across stocks (Menkveld, 2013, pp. 11, 33). The net spread was €1.55 per trade, and the positioning loss was €0.68 per trade. The table reports gross profit of €0.88 per trade. The net spread minus the positioning loss gives €0.87. The difference of one cent comes from rounding in the table. Gross profit here excludes fixed costs (Menkveld, 2013, p. 12, footnote 9).

A frequency decomposition divides inventory into components that vary over different horizons. In the all-stocks column, the component at horizons up to five seconds earns positive positioning profit; every longer horizon band loses (Menkveld, 2013, p. 34, Table 3). Menkveld labels these bands position durations (Menkveld, 2013, p. 34, Table 3). We read them as periods of inventory cycles (Menkveld, 2013, p. 29), not holding times of individual positions. These results apply to this trader and sample only.

5.1 Markouts and the reference price

Menkveld’s decomposition uses the midprice at each fill. A different reference changes the division between spread and positioning while preserving the total.

Assume that the market maker starts with zero inventory. Let did_i be the signed quantity of fill ii, positive for a purchase. Let pip_i be its price, and mTm_T the final midprice. Marked at mTm_T, fill ii adds di(mT−pi)d_i(m_T-p_i) to the P&L before fees. Choose a reference price rir_i for each fill.

In the example, the reference is the midprice before the fill, €100.00. The final midprice is €99.95. The identity separates the spread before fees from positioning:

di(mT−pi)=di(ri−pi)+di(mT−ri).d_i(m_T-p_i)=d_i(r_i-p_i)+d_i(m_T-r_i).

The first term is the spread before fees: €0.02 in the example. The second term is positioning: −€0.05. Deducting the €0.01 fee gives the same −€0.04 total. Summing over fills,

S(r)=∑idi(ri−pi),I(r)=∑idi(mT−ri),\begin{aligned} S(r)&=\sum_i d_i(r_i-p_i),\\ I(r)&=\sum_i d_i(m_T-r_i), \end{aligned}

and the ledger is

PnL=S(r)+I(r)+H−fees+rebates.\mathrm{PnL}=S(r)+I(r)+H-\mathrm{fees}+\mathrm{rebates}.

Here HH is the gross marked P&L of a separately booked hedge instrument. Fees and rebates are separate cash lines covering both quoting and hedging. The fill set below excludes those hedge trades. If one fill ledger includes all instruments, it already includes the hedge P&L. Do not add HH again.

To match Menkveld’s components, choose the midprice at each fill as rir_i. Then S(r)S(r) minus the fills’ fees plus their rebates gives net spread. The term I(r)I(r) gives positioning profit for those fills. Keep the separate hedge and its fees outside these two components.

The terminal inventory is marked at mTm_T. This amount excludes liquidation costs. Changing rir_i cannot change the total. Moving the reference to a later midprice adds di(rilater−ripre)d_i(r_i^{\text{later}}-r_i^{\text{pre}}) to spread and subtracts the same amount from positioning.

In their paper on inventory risk, Guéant et al. (2013) model quotes that respond to inventory risk. They extend the model to adverse price jumps at fills. This model lets us introduce a known adverse-selection effect and locate it in the accounts. With the midprice before the jump as reference, the jump enters positioning. With a later reference, part of the loss enters measured spread.

A later reference also includes unrelated price moves and subsequent trades. The transfer between components does not give a causal estimate of the current fill’s adverse selection.

For a fill at time tit_i, let m(ti+h)m(t_i+h) be the midprice at horizon hh after the fill. Its signed execution-to-midprice markout is

di[m(ti+h)−pi].d_i[m(t_i+h)-p_i].

This amount measures the price change from execution to the later midprice, multiplied by the signed fill quantity. Some reports measure a markout from the midprice at execution. Here the markout starts from the execution price.

Take the midprice hh seconds after each fill as the reference: ri=m(ti+h)r_i=m(t_i+h). Write r(h)r(h) for these references. The average execution-to-midprice amount over nn fills is S(r(h))/nS(r(h))/n at horizon hh. Plot this average against hh to obtain the markout curve. I(r(h))/nI(r(h))/n is the corresponding positioning line.

For unequal sizes, also report the amount per unit traded, dividing by ∑i∣di∣\sum_i |d_i|. Always retain the fill count and traded quantity.

Compare the execution markouts at all four reference horizons. The second curve shows the change from the reference before the fill. Compare that change with the adverse jump planted at the current fill.

Markouts and the market maker’s ledger

Synthetic market making uses 32 fixed-seed paths of 600 seconds and unit-size fills. Quotes follow the approximate formulas of Guéant, Lehalle and Fernandez-Tapia (GLFT). Values are ticks per fill, averaged over all fills of all paths. Positive horizons stop at the terminal time; 0 s uses the midprice before the fill. Jump sizes range from 0 to 2 ticks per fill in steps of 0.5.

What to notice

Changing the reference transfers P&L between execution markout and positioning. Their sum remains terminal marked wealth. Later references contain the current jump, later fills’ jumps and Brownian moves. Positive positioning at a later reference does not establish that inventory management is profitable. The dashed line shows the planted jump cost at the current fill. It does not predict the full change in the later markout.

When you change the jump, the simulation recomputes quotes and fills. Total P&L can therefore change. Inventory starts at zero and is marked at the terminal midprice. The model excludes hedge P&L, fees, rebates and liquidation costs. This accounting illustration is not a calibrated trading result.

In his paper on implementation shortfall, Perold (1988) fixes a paper portfolio at the decision time. He compares it with the portfolio actually implemented. The implementation shortfall is this difference. It includes execution costs and the opportunity cost of intended trades that were never made.

A market maker revises its quotes continuously. It does not execute a fixed list of intended trades. The definition of its paper portfolio is therefore a research problem. The ledger above accounts for fills; it does not value missed opportunities.

5.2 From state indicators to a component explanation

Fix the ledger first. Then relate each fill’s markout or positioning component to state indicators available at the chosen decision time. These indicators include spread, volatility, flow and inventory. Use the conditional predictive allocations of section 4, with the null comparisons and search corrections of section 6. A state observed after the fill may be an outcome of the trade. Justify its role before you use it as a control.

The Azencott diagnostic described in the introduction scores threshold rules for bad-order classification. These scores measure classification performance. They give no significance level or contribution in currency. Their sum cannot reconcile with daily P&L. (Azencott et al., 2014)

In the synthetic experiment, the rarity rule adds a loss to orders whose volume rarity score exceeds 0.97, in six slices of the day. The score is the fraction of historical volume observations below the current volume. The detection rate counts how often volume alone passes the sensitivity and specificity floor in those planted slices. On matched days without the added loss, we count each variable-or-pair × slice cell that still passes. These cells are the null alarms.

Select −2 spreads and the rarity rule below. For this planted loss of two spreads, a floor of 0.85 detects volume in 2.8% of planted slices. Lowering the floor to 0.65 raises detection to 81.9%, but retains about 669 null cells per day. At 0.85, the simulated null retains none.

Lower the floor on sensitivity and specificity to retain more rules. This change makes the planted volume effect easier to detect. It also produces more alarms on days without any planted effect.

Detection and false alarms

This synthetic sensitivity sweep uses 24 matched day seeds per configuration. Detection is the fraction of six planted slices that retain the volume-only rule. Null alarms count all retained variable-or-pair × slice cells over a 79-slice day. Error bars show ±1 across-day standard deviation. They are not confidence intervals.

What to notice

The figure opens at −2 spreads with the rarity rule. The marked 85% floor is the setting used by Azencott and coauthors. The original synthetic setting (star) uses the −8-spread effect and the rarity-above-0.97 intervention. Azencott and coauthors did not estimate these parameters. “Rarity rule” selects a varying number of orders; it does not mean zero affected orders. The other settings select an exact number of orders by their volume score, without using slippage.

Each retained variable-or-pair × slice cell counts as an alarm. Such a cell is neither an independent discovery nor an order-level error. The dotted curve shows how often the volume-only rule is retained under the null. Detection here measures an in-sample association. It does not establish causal recovery or forecast performance.

Lowering the floor adds no false-discovery control. Zero alarms in these simulated days do not establish a zero population rate. The lower two floors fall below the range explored by Azencott and coauthors.

Test the component explanation on later slices. Keep those results separate from the fit to the orders used to select it. The null comparison and search correction in the next section account for that selection.

↑ Sections

6. Statistical pitfalls

The component models above require choices of indicators, horizons and thresholds. Testing their selected results requires accounting for those choices.

Two ways a statistical explanation can mislead: selecting the best of a search, and controlling for a collider.

Left: many candidate indicators, horizons, thresholds and trading rules pass through a funnel to one in-sample winner. Tests must account for the search: FWER (Bonferroni, Holm), FDR (Benjamini–Hochberg), Reality Check and StepM, or the deflated Sharpe ratio. These methods need a record of the candidates tried. Right: a causal graph where signal X affects markout Y with coefficient 2. Both affect Z, a score used after the fact to select trades, with coefficients 2 and γ. With Z as a control the coefficient of X becomes (2 − 2γ)/(1 + γ²).

6.1 Testing the best of many candidates

A research process can select indicators, horizons, thresholds and trading rules on the same history. Even if every candidate has zero expected excess performance, the winner tends to look profitable. Testing that winner as if we had chosen it before seeing the data ignores the other candidates we tried. The test needs to account for that search.

The familywise error rate, or FWER, is the probability of making any false rejection within a specified family. Bonferroni divides the allowed error probability by the number of tests. Holm uses a sequential correction that can reject more hypotheses while retaining FWER control. Both require valid individual p-values. Neither repairs a p-value computed under an incorrect model of temporal dependence.

The false discovery rate (FDR) is the expected fraction of false rejections among all rejections. We define that fraction as zero when nothing is selected. In their paper introducing FDR control, Benjamini & Hochberg (1995) give the Benjamini–Hochberg rule for independent tests. In their study of multiple testing under dependency, Benjamini & Yekutieli (2001) establish control under certain positive-dependence conditions. They also supply the more conservative Benjamini–Yekutieli correction for arbitrary dependence. Correlated indicators do not by themselves establish the positive-dependence condition required by BH.

FWER limits the chance of any false discovery in the family. FDR allows some false discoveries while controlling their expected share. Neither says that every selected indicator has a particular probability of being false. When every tested null hypothesis is true, every discovery is false, so FDR and FWER coincide.

In their study of the cross-section of expected returns, Harvey et al. (2016) apply these corrections to the growing set of tested return predictors. The t-statistic needed to claim significance depends on the search, so the same threshold need not suit every project.

Increase the number of indicators while keeping the same seeded sequence of null tests. The largest absolute statistic cannot decrease in this nested experiment. Every rejection here is a false discovery.

Searching more indicators raises the hurdle

Synthetic independent two-sided standard Normal tests at 5%. The z-statistics illustrate the large-sample t-statistic setting. We assume no finite-sample t distribution.

Bonferroni uses one cutoff for the whole family. Holm tests in order and stops at the first failure. Benjamini–Hochberg uses the last qualifying rank, controlling the expected false-discovery proportion under independence. The coloured comparison curves depend on rank; they cannot be used interchangeably as single cutoffs. (Benjamini & Hochberg, 1995) (Harvey et al., 2016)

This experiment uses independent Normal test statistics. It does not reproduce the bootstrap of White’s Reality Check or Romano and Wolf’s StepM (section 6.2). That bootstrap needs the joint performance series of the strategies.

6.2 Test the strategy family

The corrections above require valid tests and assumptions about dependence. Joint resampling offers a way to account for dependence across candidate strategies.

Trading strategies often share dates, positions and shocks. White’s Reality Check tests the joint null that no candidate beats a specified benchmark in expected performance. It compares the best observed performance with a bootstrap distribution of the maximum under the null. The resampling keeps the strategies together and, with an appropriate time-series bootstrap, retains temporal dependence.

Rejecting that joint null says that some candidate improves on the benchmark. In their paper on stepwise multiple testing, Romano & Wolf (2005) introduce StepM. It tests which candidates outperform the benchmark, with asymptotic FWER control. It tests the strongest remaining statistics against a joint critical value, removes rejected nulls, and repeats on the remaining family. Studentization divides each candidate’s performance by its standard error. It can help when candidates have different estimation uncertainties.

The synthetic comparison uses common bootstrap indices across strategies. Its finite-sample rejection frequencies illustrate the procedure; they do not prove that the asymptotic guarantee is exact in that sample. We also need a record of the candidates tried. Neither procedure corrects for searches over datasets or specifications left out of that record.

6.3 More controls can damage the explanation

Search corrections account for the candidates tested. They do not establish whether the controls in a model support its causal interpretation.

In their paper on specification errors in factor investing, Lopez de Prado & Zoonekynd (2024) examine how controls can bias an estimate. A control variable can remove confounding. A control can also be a collider. A collider is a variable affected by both the proposed cause and the outcome.

For example, XX could be a signal and YY a markout. A score ZZ could depend on both and select trades after the fact. Holding that score fixed restricts which signal and markout pairs we compare. In the model below, conditioning on ZZ lowers the estimated effect of XX on YY. It can reverse the sign even though the trading process has not changed. Choosing controls only because they improve predictions cannot tell these roles apart.

An execution outcome or a selected-trade flag may result from the process we want to explain. Check when and how it was generated before using it to explain P&L. Including it may improve the fit to observed P&L while making an earlier indicator’s coefficient misleading.

The synthetic model starts with independent unit-variance Normal variables X,u,vX,u,v. The outcome is

Y=2X+u.Y=2X+u.

Here XX affects YY, with noise uu. The control variable is

Z=γY+2X+v.Z=\gamma Y+2X+v.

Here γ\gamma controls how strongly YY affects ZZ. The variable vv is separate noise. This continuous synthetic model illustrates selection. It is not a model fitted to binary fills. The variable ZZ is a consequence of both XX and YY: the graph contains X→Z←YX\to Z\leftarrow Y.

Conditioning on a collider

Exact population equations, with and without Z. Change γ while the causal coefficient of X stays fixed.

Without ZZ, the coefficient of XX is 22 and the explained variance is

R2=4/5.R^2=4/5.

With ZZ included, the coefficient of XX becomes

(2−2γ)/(1+γ2).(2-2\gamma)/(1+\gamma^2).

This is the fitted coefficient after controlling for ZZ. The causal effect of XX on YY has not changed. The explained variance becomes

R2=1−1/[5(1+γ2)].R^2=1-1/[5(1+\gamma^2)].

This measures the fit using both XX and ZZ. Fit improves while the coefficient crosses zero. These equations hold in the population, so adding observations cannot remove the bias from controlling for the collider. (Lopez de Prado & Zoonekynd, 2024)

The parameter labels follow López de Prado’s equation (10): γ\gamma multiplies YY. The text describing Exhibit 6 (Lopez de Prado & Zoonekynd, 2024, p. 14) swaps the two coefficients.

6.4 A Sharpe ratio is estimated, then often selected

Control variables affect the interpretation of an explanation. Sampling and selection also affect the performance measures used to judge a strategy.

A Sharpe ratio estimates a mean relative to volatility. Both quantities are uncertain, and the observation interval matters. In his paper on the statistics of Sharpe ratios, Lo (2002) shows that serial correlation changes Sharpe inference and time aggregation. Scaling a Sharpe ratio by the square root of the number of periods is not generally valid for dependent returns. More intraday observations do not provide the same information as equally many independent returns.

In their paper on the deflated Sharpe ratio, Bailey & López de Prado (2014) compare the selected estimate with a selection benchmark. The benchmark uses the expected maximum of zero-skill trials. The calculation incorporates sample length, skewness and kurtosis as well as the dispersion and effective number of trials. This model-based correction cannot recover trials that were never recorded. Correlated variants cannot be counted as independent attempts.

In their paper on the probability of backtest overfitting, Bailey et al. (2016) define PBO using the matrix of candidate returns. Combinatorially symmetric cross-validation repeatedly assigns blocks to an in-sample set and its complementary out-of-sample set. It selects the in-sample winner, then records its relative out-of-sample rank. PBO measures how often that winner falls below the out-of-sample median of the candidates.

Falling in rank does not necessarily mean losing money, so PBO is not a probability of future loss. The splits overlap: they are neither independent replications nor an untouched future period. The synthetic search varies monthly calendar rules: entry day, holding period, stop and side. It compares selection on noise with selection when a recurring effect is present. Its deflated-Sharpe illustration uses a separate hypothetical independent-trial model.

Choose an observed annual Sharpe ratio and increase the number of independent trials that preceded it. Even under zero skill, the expected maximum rises. The deflated Sharpe ratio compares the reported result with that selection benchmark. (Bailey & López de Prado, 2014)

Trial count changes the evidence

Hypothetical independent-trial example. The default annual Sharpe is 2.5 and the annualised trial-Sharpe variance is 0.5. The sample has 1,250 daily observations, with 250 days per year. Skewness is −3 and non-excess kurtosis is 10.

The expected maximum uses the Bailey–López de Prado approximation. It is not exact in a finite sample. The deflated Sharpe ratio (DSR) uses per-period Sharpe units internally. The figure displays the maximum in annual units. The model assumes independent trials. Counting correlated parameter combinations does not give that number.

The separate PBO panel uses the synthetic seasonal-rule experiment. Combinatorially symmetric cross-validation (CSCV) selects the best rule on half the blocks. It ranks that rule on the complementary blocks and repeats this over every symmetric split. PBO measures how often its rank falls below the median. It neither estimates the independent trial count for DSR nor gives a probability of future losses. (Bailey et al., 2016)

6.5 Losses do not identify their own cause

A poor result after selection can reflect favourable noise in the original estimate. A subsequent loss also needs comparison with ordinary variation under the model.

Long drawdowns can occur under an unchanged positive expected return. In their paper on when to worry about a drawdown, Rej et al. (2017) derive drawdown distributions for Brownian log-P&L with constant drift and volatility. They measure duration from the sample’s global maximum to its endpoint. This differs from the longest completed drawdown. An unusually long episode can reflect bad luck, an overestimated Sharpe ratio, or a poor model of the return process.

Performance can also deteriorate out of sample while the underlying effects stay unchanged. In the synthetic selection experiment, each candidate’s true mean stays fixed. Choosing the best historical estimate selects some favourable noise along with any real effect; that noise need not recur after selection. Performance can therefore appear to decay without the signal weakening or the market responding to its publication.

In his study Does Empirical Finance Replicate?, Muravyev (2026) reports deterioration beyond the original sample and examines its timing. Its empirical evidence concerns a selected, replicable subset of the literature. The synthetic experiment isolates one possible mechanism for a drop. It does not identify the cause of the drop in those empirical results.

What to notice

Specify what an indicator ranking measures. Compare it with a null and account for the search that produced it. If losses follow, check whether sampling variation or changes in the model’s relationships could explain them. Dividing the loss into additive contributions cannot answer these statistical questions on its own.

↑ Sections

7. Research directions

The preceding limits define checks for the proposed research: reconciliation, explicit allocation conventions and statistical tests that account for the search.

Reconcile the ledger and compute markout curves from fills and midprices. Then use state indicators recorded at decision time to explain the components conditionally. To allocate P&L to signals, we also need a policy we can rerun. The no-trade band in section 3 explains why separate signal backtests cannot simply be added. Each proposal specifies a first deliverable, success criteria and possible negative results. These proposals make no claims about a particular trading operation.

The projects of this section in order, with their prerequisites and the sections they build on.

Map of the research projects. Start with a research log, a ledger with explicit accounting conventions from section 5, and a policy we can rerun. Next are markout components and state indicators with search control (7.1, sections 4 and 6). Proxy, coalition and exact signal allocations (7.2, section 3) and statistics of a recorded research process (7.4, section 6) also follow. Predictive games, causal structure and policies come later (7.3, sections 4 and 6.3). Error control for the diagnostic of the introduction also comes later (7.4).

7.1 Ledger, benchmark and state indicators

Open problem. A fill ledger can reconcile without uniquely identifying spread capture, adverse selection and inventory risk. Menkveld’s accounting and Perold’s decision-time paper portfolio use different references. Neither tells us which paper portfolio to use when quotes are continuously revised. (Menkveld, 2013; Perold, 1988)

First increment: a ledger with explicit accounting conventions. Use simulated market making with a known adverse-selection mechanism. Reconcile identical fills against the own-venue midprice, a consolidated midprice and future marks. Keep total wealth, hedge P&L, fees and rebates fixed. Report markout and positioning per fill and per unit traded. Measure how the components move when the reference changes. Before estimating a planted parameter from a component, state the estimator and the assumptions that make it identifiable.

Deliver the reconciled ledger and a table showing how each reference changes each component. Report the estimator’s uncertainty across repeated simulations. Success requires two results. The ledger reconciles at every reference. The declared estimator recovers the planted parameter within a tolerance set before the simulations. Check coverage against the declared confidence level.

A negative result occurs if no tested reference identifies the parameter. It also occurs if apparently stable component labels change under plausible reference choices. Report this result even if the ledger reconciles. Reconciliation alone cannot identify a cause.

Second increment: explain markout components by state indicators with search control. Fix the ledger convention, the markout horizons and the decision-time information set. Fit conditional models of each component using spread, volatility, flow and inventory. Assess predictive value on later days. Compare indicator allocations with null distributions that preserve the relevant temporal and cross-indicator dependence. Record every indicator, threshold and horizon tried. Control the declared error rate over that family, including candidates absent from the final ranking.

Success requires recovery of planted conditional relationships in controlled simulations, with calibrated uncertainty and error control. Report which relationships improve held-out component predictions. A negative result occurs if no relationship passes the null comparison and search correction. It also occurs if apparent gains disappear on new data. These negative results provide no evidence that the indicators improve component predictions under this design.

For signal comparisons, see the signal data requirements; for statistical research, see the research data requirements.

Data and dependency. The data must include each fill’s time, side, price, size and execution status. They must include own and market quotes, midprices, inventory and hedge paths, and fee and rebate records. Indicators must reflect the information available at each decision. The conditional step depends on the first ledger and on a research log started before model selection. Test instrument-level results as well as pooled results.

Later increments. In their paper on incorporating signals into optimal trading, Lehalle & Neuman (2019) divide the optimal execution schedule into liquidation and signal parts. Its impact cost contains a cross term between the two. Compare attribution with liquidation first, then signal, and the reverse order. Share the cross term by a stated coalition rule.

The paper supplies the execution model. The paper does not allocate the cross term. Its allocation is a proposed experiment.

Menkveld divides midprice changes into a permanent part (adverse selection) and a transitory part (price pressure). A separate experiment can test this division in a simulation where both parts are known. Neither extension is needed to deliver the first ledger.

7.2 Proxy, coalition and exact signal allocations, with uncertainty

The ledger project fixes the amounts to explain. Allocating those amounts to trading signals also requires a convention for how the policy changes between runs.

Open problem. Stand-alone proxies, coalition reruns and an internal exact split can answer different counterfactual questions, even with identical inputs and trading algorithms. Removing a signal can change risk scaling, trading dates and active constraints. Before applying Shapley’s rule, we need to choose which game to allocate. (Shapley, 1953)

First increment. Use a controlled simulator with correlated signals. Compare the undamped NNLS proxy method with coalition Shapley under each stated risk convention. Include Durin’s internal allocation where its equations apply.

State the coalition baseline. A policy with all signals off may still hedge or unwind initial inventory. Allocate the increment above that baseline. Do not assume the baseline is zero.

Compare residuals, reconciliation, distances between shares and sensitivity to correlation and binding constraints. (Durin, 2014)

In this first comparison, separate the numerical error of coalition sampling from uncertainty due to the observed trading history. Calibrate block resampling, placebo indicators and null comparisons on repeated simulated histories with serial dependence and seasonality. Then apply them to a single history. Even a stable-looking attribution needs a null comparison. (Méloux et al., 2025)

For a real desk with many signals, compare sampling error with history uncertainty to choose the estimator and backtest budget. In their paper on accurate Shapley estimation, Musco & Witter (2025) give an accuracy guarantee for the regression estimator through leverage-score sampling.

A model that learns coalition values or shares across solved cases could reduce repeated computation. In their paper on FastSHAP, Jethani et al. (2022) introduce a model that learns to predict the shares. This provides one direction to test. In their work on non-atomic games, Aumann & Shapley (1974) develop path values. These offer another direction for differentiable policies. They use a different game that scales signals continuously.

Acceptance and negative result. Reproduce the equality for fixed risk aversion, without constraints or spread. Reconcile every method to its stated target, including residuals. Report uncertainty calibration against known simulated allocations. Outside that equality case, Durin provides a reference convention. It does not provide ground truth for every method.

Success means finding the conditions under which proxy error stays within a predeclared tolerance and uncertainty estimates are calibrated. A negative result is finding no such conditions under realistic constraints, or finding unstable proxy shares despite a small residual.

Data and scope. The comparison needs decision-time signals, positions, costs, risk settings, initial inventory and a policy that can be rerun. The exact comparison also needs the optimiser and its multipliers. Aggregate P&L alone cannot recover the coalition experiment. Predictive games, causal adjustment and learned surrogates are later increments. The first comparison does not require them.

7.3 Later extensions: predictive games, causal structure and policies

Once the ledger targets and rerun conventions are established, compare regression-R2R^2 sharing and SAGE on the same component histories. Distinguish reductions in prediction loss from allocations in currency. Success would be explaining ranking differences by the target or estimation error; a negative result would be rankings too uncertain to distinguish. This requires held-out component outcomes and fitted predictive models. (Covert et al., 2020)

Causal adjustment needs a separate experiment with simulated event sequences whose causal structure is known. Compare a fit-selected control set with an adjustment set justified by that structure. Inventory and fills may be consequences of a signal; timestamps alone do not identify the graph. Success means recovering the planted causal effect under the declared identification assumptions. A negative result is that the available states cannot identify it, even with good predictive fit. This requires decision, fill and inventory timestamps in addition to the first project’s data. (Lopez de Prado & Zoonekynd, 2024)

Learned policies and surrogates are another later experiment. Practitioner “black-box” trading includes rule-based automation; it need not mean a learned position-taking policy. Guéant reviews reinforcement learning (RL) for trading in Machine Learning and Data Sciences for Financial Markets, edited by Machine Learning and Data Sciences for Financial Markets: A Guide to Contemporary Practices (2023). He characterises published work as proof of concept (“Machine Learning and Data Sciences for Financial Markets: A Guide to Contemporary Practices,” 2023, p. 200, ch. 11). The sources provide no adoption share.

In his book Algorithmic Trading Methods, Kissell (2021) describes a network that gives an optimiser a starting point. The optimiser still runs to find the solution.

A surrogate is a model that predicts the optimiser’s positions from its inputs. With rerun access, train it on solved cases. Measure its position and P&L error before comparing proxy and coalition allocations. SHAP of its position predictions has a different target. Success requires accurate policy predictions on held-out cases and attribution discrepancies within predeclared tolerances. If the surrogate fails to reproduce the policy, report this before interpreting its attributions.

The sources’ reports about practice limit the conclusions (Isichenko, 2021; Paleologo, 2025). The target of the explanation also limits them (Lundberg & Lee, 2017). The practitioner overview of graph neural networks by Antulov-Fantulin & Kolm (2026) discusses interpretability concerns. The book Trades, Quotes and Prices by Bouchaud et al. (2018) discusses market impact, which historical replay omits.

7.4 Statistics of a recorded research process

The proposed comparisons introduce more models and variants to test. Their statistical assessment depends on a record of the full search.

Prerequisite. Start recording every tried variant, rejected specification, parameter choice, evaluation date and P&L history before the research begins. Keep this log as the research proceeds: no correction can recover experiments that were never recorded. The log is also a prerequisite for the state-indicator search in project 7.1.

Open problem. Assessing a selected indicator requires accounting for all the variants tried. Correlated variants make an effective trial count hard to estimate, while backtest-overfitting diagnostics depend on the candidate set supplied. White and Romano–Wolf resample the family together. We still need to test whether that resampling is calibrated for intraday dependence and seasonality. (Bailey et al., 2016; Bailey & López de Prado, 2014; Romano & Wolf, 2005; White, 2000)

First increment. Generate families of strategies and component models with known nulls, planted effects, redundant candidates, seasonality and inventory-driven autocorrelation. Freeze the search and evaluation protocol. Measure rejection rates, missed effects and interval coverage across independent simulated days or histories. Compare effective-count corrections with family-level resampling. Separate a test that any strategy beats a benchmark from an indicator’s conditional contribution test.

Acceptance and negative result. Report measured error rates and power for each declared family and dependence design in a table. Include Monte Carlo uncertainty. Success requires the stated error criterion to be met within that uncertainty, while retaining useful power at effect sizes chosen in advance. A negative result is excess false discoveries, unreliable coverage, or negligible power at those effects. Missing research history prevents a claim about the unrecorded search; it must remain an explicit limitation.

Later checks. Assess Sharpe aggregation and uncertainty against repeated simulated days rather than treating intraday observations as independent (Lo, 2002). Freeze models at research-window ends and measure changes in later windows. Placebo boundaries are dates where no model changed. Repeat the measurement at these boundaries to distinguish selection effects from ordinary variation.

Muravyev’s findings motivate checking whether performance holds up on later data; they supply no intraday decay rate (Muravyev, 2026). In Breadth, Skill, and Time, Grinold & Kahn (2011) analyse signal horizons. Follow this analysis to compare forecast decay with realised information coefficients. Make this comparison before interpreting short-lived shares as failed research.

Test error control for the introductory diagnostic across order descriptors and time slices. Separate continuous slippage prediction from binary bad-order detection (Azencott et al., 2014).

Data. The prospective research log, aligned indicator and return histories, recorded model introduction dates and untouched later evaluation windows. The diagnostic extension additionally needs order-level outcomes and market states; it depends on the ledger and state-indicator work in project 7.1.

↑ Sections

Code and data

The files below reproduce the synthetic examples on this page. Download the source bundle and follow its instructions to install dependencies and run the studies. The notebook also runs in your browser, without installation: open the browser lab. Its first load downloads about 25 MB.

FileReproducesRequirementsRun time
NotebookMethods and examples in §3.5; includes CVXPY and closed-form comparisonsPython, Jupyter, NumPy, SciPy, CVXPY; or a browser (lab)about 30 s locally; about 45 s in the browser lab
Signal study and approximate Shapley study§3.5 tables; approximate Shapley in §§3.4 and 7.2Python 3.13; NumPy, SciPy, Polars, Matplotlib, CVXPYFull signal sweep: 6.060 summed unit wall-hours under concurrent load; elapsed time depends on hardware
Attribution tests and approximation testsClosed-form and CVXPY agreement; allocation and sampling checksStudy dependencies, pytest44 tests in 33.93 s in one local run

Run times above are elapsed times from one local run. They depend on hardware.

From the extracted bundle, run uv sync --group dev to install the Python dependencies. These commands rerun the §3.5 study and print its tables:

uv run python -m sim.signal_attribution.run_local full results --workers 8
uv run python -m sim.signal_attribution.summarise results

Run its tests with uv run pytest sim/signal_attribution/tests.

References

The graph shows the papers that we read for this page and the citations between them. Each arrow goes from a paper to a paper of the same set that it cites. The horizontal position is the year of publication. Each band holds one main theme. A filled circle marks a paper that this page cites. Select a paper to see its summary and the sections that cite it. Five cited books and articles outside the read corpus are not drawn.

Who cites whom in the papers read for this page

Citation graph of the papers read for this page, placed by publication year in four topic bands; each paper opens a card with its one-sentence summary, the papers it cites and that cite it, and the sections of this page where it appears.

The list below gives every reference that this page cites.

  1. 1953 L. S. Shapley. A value for n-person games. Princeton University Press. The bargaining-procedure locator refers to RAND RM-670 (1951), pp. 12–13, rather than the 1953 chapter pagination. 3, 7
  2. 1974 Robert J. Aumann; Lloyd S. Shapley. Values of Non-Atomic Games. Princeton University Press. 7
  3. 1977 Guillermo Owen. Values of Games with a Priori Unions. Mathematical Economics and Game Theory (Springer). 3
  4. 1985 Gary P. Brinson; Nimrod Fachler. Measuring non-U.S. equity portfolio performance. The Journal of Portfolio Management. 2
  5. 1986 Gary P. Brinson; L. Randolph Hood; Gilbert L. Beebower. Determinants of Portfolio Performance. Financial Analysts Journal. 2
  6. 1988 André F. Perold. The implementation shortfall: Paper versus reality. The Journal of Portfolio Management. 5, 7
  7. 1992 William F. Sharpe. Asset allocation: Management style and performance measurement. The Journal of Portfolio Management. 2
  8. 1995 Yoav Benjamini; Yosef Hochberg. Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing. Journal of the Royal Statistical Society Series B: Statistical Methodology. 6
  9. 1996 Robert Litterman. Hot Spots and Hedges. The Journal of Portfolio Management. 2
  10. 2000 Halbert White. A Reality Check for Data Snooping. Econometrica. 6, 7
  11. 2000 Richard C. Grinold; Ronald N. Kahn. Active Portfolio Management: A Quantitative Approach for Producing Superior Returns and Controlling Risk. McGraw-Hill. 1, 2
  12. 2001 Stan Lipovetsky; Michael Conklin. Analysis of regression in game theory approach. Applied Stochastic Models in Business and Industry. 4
  13. 2001 Yoav Benjamini; Daniel Yekutieli. The control of the false discovery rate in multiple testing under dependency. The Annals of Statistics. 6
  14. 2002 Andrew W. Lo. The Statistics of Sharpe Ratios. Financial Analysts Journal. 6, 7
  15. 2005 Joseph P. Romano; Michael Wolf. Stepwise Multiple Testing as Formalized Data Snooping. Econometrica. 6, 7
  16. 2009 Javier Castro; Daniel Gómez; Juan Tejada. Polynomial calculation of the Shapley value based on sampling. Computers & Operations Research. 3
  17. 2011 Richard C. Grinold; Ronald N. Kahn. Breadth, Skill, and Time. The Journal of Portfolio Management. 7
  18. 2013 Albert J. Menkveld. High frequency trading and the new market makers. Journal of Financial Markets. Page locators refer to the 2011 Tinbergen discussion paper TI 11-076/2/DSF 21, rather than the journal pagination. 5, 7
  19. 2013 Olivier Guéant; Charles-Albert Lehalle; Joaquin Fernandez-Tapia. Dealing with the inventory risk: a solution to the market making problem. Mathematics and Financial Economics. 5
  20. 2013 Sasan Maleki; Long Tran-Thanh; Greg Hines; Talal Rahwan; Alex Rogers. Bounding the Estimation Error of Sampling-based Shapley Value Approximation. arXiv. 3
  21. 2014 Art B. Owen. Sobol' Indices and Shapley Value. SIAM/ASA Journal on Uncertainty Quantification. 4
  22. 2014 Bruno Durin. Signal-wise performance attribution for constrained portfolio optimisation. arXiv. 3, 7
  23. 2014 David H. Bailey; Marcos López de Prado. The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting, and Non-Normality. The Journal of Portfolio Management. 6, 7
  24. 2014 R. Azencott; A. Beri; Y. Gadhyan; N. Joseph; C.-A. Lehalle; M. Rowley. Real-time market microstructure analysis: online transaction cost analysis. Quantitative Finance. Page locators refer to arXiv:1302.6363v2, rather than the journal pagination. introduction, 5, 7
  25. 2015 Rina Foygel Barber; Emmanuel J. Candès. Controlling the false discovery rate via knockoffs. The Annals of Statistics. 4
  26. 2016 Campbell R. Harvey; Yan Liu; Heqing Zhu. ... and the Cross-Section of Expected Returns. The Review of Financial Studies. 6
  27. 2016 David H. Bailey; Jonathan M. Borwein; Marcos López de Prado; Qiji Jim Zhu. The Probability of Backtest Overfitting. Journal of Computational Finance. 6, 7
  28. 2017 Adam Rej; Philip Seager; Jean-Philippe Bouchaud. You are in a drawdown. When should you start worrying?. arXiv. 6
  29. 2017 Scott Lundberg; Su-In Lee. A Unified Approach to Interpreting Model Predictions. arXiv. 3, 4, 7
  30. 2018 Jean-Philippe Bouchaud; Julius Bonart; Jonathan Donier; Martin Gould. Trades, quotes and prices: financial markets under the microscope. Cambridge University Press. 7
  31. 2019 Charles-Albert Lehalle; Eyal Neuman. Incorporating signals into optimal trading. Finance and Stochastics. 7
  32. 2020 Ian Covert; Scott Lundberg; Su-In Lee. Understanding Global Feature Contributions With Additive Importance Measures. arXiv. 4, 7
  33. 2021 Ian Covert; Su-In Lee. Improving KernelSHAP: Practical Shapley Value Estimation Using Linear Regression. AISTATS (PMLR 130). 3
  34. 2021 Michael Isichenko. Quantitative portfolio management: The art and science of statistical arbitrage. John Wiley & Sons. 3, 7
  35. 2021 Robert Kissell. Algorithmic Trading Methods: Applications Using Advanced Statistics, Optimization, and Machine Learning Techniques. Academic Press. 7
  36. 2022 Neil Jethani; Mukund Sudarshan; Ian Covert; Su-In Lee; Rajesh Ranganath. FastSHAP: Real-Time Shapley Value Estimation. ICLR. 7
  37. 2022 Rory Mitchell; Joshua Cooper; Eibe Frank; Geoffrey Holmes. Sampling Permutations for Shapley Value Estimation. Journal of Machine Learning Research. 3
  38. 2023 Agostino Capponi; Charles-Albert Lehalle (editors). Machine Learning and Data Sciences for Financial Markets: A Guide to Contemporary Practices. Cambridge University Press. 7
  39. 2024 Marcos Lopez de Prado; Vincent Zoonekynd. Why Has Factor Investing Failed?: The Role of Specification Errors. SSRN Working Paper 4697929 (ADIA Lab Research Paper Series No. 7). Exhibit and page locators refer to SSRN version 8.2, 14 July 2025. 6, 7
  40. 2025 Christopher Musco; R. Teal Witter. Provably Accurate Shapley Value Estimation via Leverage Score Sampling. ICLR. 7
  41. 2025 Giuseppe A. Paleologo. The Elements of Quantitative Investing. John Wiley & Sons. 1, 2, 7
  42. 2025 Maxime Méloux; Giada Dirupo; François Portet; Maxime Peyrard. The Dead Salmons of AI Interpretability. arXiv. 4, 7
  43. 2026 Dmitriy Muravyev. Does Empirical Finance Replicate?. SSRN Working Paper. 6, 7
  44. 2026 Nino Antulov-Fantulin; Petter N. Kolm. Graph Neural Networks in Asset and Investment Management: An Overview for Practitioners. The Journal of Portfolio Management. 7

Reuse

The source repository holds everything on this page. The text, figures, infographics and presentation are under CC BY 4.0; the code (simulation package, figure exporters, notebook, page scripts, embeds and presentation view) is under MIT. All figures and diagrams are drawn for this page; numbers taken from published papers are cited in their captions. Quoted passages, cited results and bibliographic metadata belong to their authors and publishers. Adapted and third-party components keep their own licences, listed in NOTICE.md.

The page adapts Thibaud Frere's research article template and David Louapre's NLP before LLMs course page, both under CC BY 4.0.

Citation

For attribution in academic contexts, please cite this work as

Sérié, E. (2026). Explaining a trading P&L: what finance knows about performance attribution, and what is open. https://attribution.serie-research.dev/attribution/

BibTeX citation

@misc{serie2026attribution,
  author = {S{\'e}ri{\'e}, Emmanuel},
  title = {Explaining a trading {P\&L}: what finance knows about performance attribution, and what is open},
  year = {2026},
  month = nov,
  url = {https://attribution.serie-research.dev/attribution/},
  note = {Code: https://github.com/serie-research/pnl-attribution}
}