Synthetic multi-asset equity data must reproduce each asset's return distribution and its relationship with the market. Reusing a generator fitted to full asset returns creates a problem: adding its draws to a market factor counts market variance twice. We derived a correction that centers and rescales each draw over a fixed horizon before adding the market factor, allowing reuse without fitting a second generator to regression residuals. We tested the correction on 423 non-market assets in a 424-asset United States equity and exchange-traded-fund universe, using hidden Markov generators with heavy-tailed emissions. The corrected paths retained heavy tails and recovered the calibrated market loadings with low error. On 416 complete asset histories held out from 2025, the correction improved the mean Kolmogorov-Smirnov pass rate over naive composition and brought the median ratio of synthetic to observed variance close to one. Its one-day left-tail 99% Value-at-Risk exceedance rate, using thresholds pooled across separate simulated paths, was 1.12%, compared with 1.16% for the residual-fit hidden Markov comparator and a nominal rate of 1%. We also tested a jump-duration mechanism that extended visits to extreme-return states and improved volatility clustering for the broad-market exchange-traded fund with ticker SPY. The multi-asset correction remained effective with jumps enabled, but transferring the SPY jump settings improved temporal fit in training and worsened it in the 2025 holdout. The method provides a way to reuse fitted asset generators for daily-fit comparisons. Its zero-sum residual constraint removes terminal residual uncertainty, and unmodeled dependence among asset-specific residuals can lead to overstated rebalancing returns. Code, cached inputs, result summaries, and instructions for fitting the per-asset models accompany the paper.
Figures & tables
Symbol
Description
SPY value
Explored range
State partition and emission
N
Laplace-quantile states
100
{30,…,200} , Online Appendix S6
ν
Student- t emission degrees of freedom
5
{3,…,30,∞}
Jump-duration override
ϵ
jump probability per step
10−4
[10−4,2.5×10−2] , Eq. ( 3 )
λ
mean jump-episode duration (steps)
90
[10,160] , Eq. ( 3 )
Table 1: Hidden Markov model with jumps (HMM-WJ) and single-index model (SIM) composition hyperparameters. Values used for the main SPY analysis, explored ranges, and locations of sensitivity checks. For the primary six-method SIM comparison, we set ϵ=0 instead of the SPY value. The separate jump-enabled comparison transferred the listed SPY settings to enabled models. The cross-asset validation used per-ticker (ϵ∗,λ∗) values for NVDA, JNJ, and JPM (Online Appendix S7 ).
Table 2: In-sample and out-of-sample model comparison for SPY. Results summarize 1,000 simulated paths. Values in parentheses are Monte Carlo standard errors conditional on the fitted model and observed history, and bold entries are best among the fitted generative models within each panel; the empirical bootstrap is excluded from this highlighting. Metric definitions and standard-error calculations are given in Online Appendix S3 .
Method
∣α^−α∣
∣β^−β∣
∣R^2−Rreal2∣
KS pass (%)
AD pass (%)
W1
κ
Hill
Naive
0.002
0.022
0.087
7.1
3.5
0.700
7.767
0.369
Gaussian SIM
0.048
0.017
0.008
0.6
0.5
0.682
1.427
0.217
Hybrid
0.002
0.018
0.021
73.6
64.6
0.249
7.165
0.365
JumpHMM-on-residuals
0.049
0.018
0.015
75.8
70.7
0.232
7.262
0.365
Block bootstrap
0.042
0.017
0.020
73.3
66.8
0.232
6.675
0.330
GARCH(1,1)- t
0.047
0.017
0.036
67.4
61.4
0.267
6.069
0.317
Table 3: Aggregate training scorecard with 100 replications per ticker. Errors, distances, and tail metrics are medians per method. Kolmogorov–Smirnov (KS) and Anderson–Darling (AD) pass fractions are pooled across replications. ∣α^−α∣ , ∣β^−β∣ , and ∣R^2−Rreal2∣ : absolute deviation between ordinary least-squares (OLS) recovery and calibration (intercept error has units of yr−1 ). KS pass and AD pass: fraction of replications whose two-sample test against the real marginal exceeds p=0.05 . W1 : Wasserstein-1 distance to the real marginal. κ : sample excess kurtosis. Hill: tail-index estimate on the upper 5% of ∣g∣ . SIM denotes the single-index model, and GARCH denotes generalized autoregressive conditional heteroskedasticity. The GARCH method covered 393 non-market tickers; the other five methods covered 423 .
KS pass (%)
AD pass (%)
Method
matched IS
2025
matched IS
2025
W1 (2025)
variance ratio
Naive
69.4
83.5
54.8
71.6
0.877
1.29
Gaussian SIM
57.4
73.9
44.9
64.6
0.866
0.97
Hybrid
78.8
87.0
66.2
79.7
0.716
0.97
JumpHMM-on-residuals
77.9
86.2
65.6
80.1
0.708
0.98
Block bootstrap
76.3
84.0
64.0
76.5
0.715
0.90
Table 4: Frozen-parameter multi-asset evaluation on the 2025 holdout. Results cover 416 non-market tickers and 100 replications per ticker; generalized autoregressive conditional heteroskedasticity (GARCH) covers 386 tickers. Pass rates are first averaged within ticker and then across tickers. The matched in-sample (IS) columns compare each synthetic path with a randomly selected contiguous 249 -day block from the 2014 – 2024 training history, matching the holdout sample length. W1 and the variance ratio are medians across ticker-level medians; the variance ratio is synthetic variance divided by observed 2025 variance. The hybrid correction used the training-period market variance and each simulated asset draw’s variance.
α=0.95
α=0.99
Method
Assets
rate (%)
SD (pp)
rate (%)
SD (pp)
Naive
416
4.04
2.08
0.88
0.70
Gaussian SIM
416
4.65
2.22
1.72
1.08
Hybrid
416
5.48
2.45
1.12
0.81
JumpHMM-on-residuals
416
5.62
2.55
1.16
0.81
Block bootstrap
416
5.50
2.52
1.28
0.87
Table 5: Out-of-sample per-ticker one-day left-tail Value-at-Risk coverage across the six composition methods. For each asset and coverage level α , one VaR threshold was estimated from 1,245,000 daily log returns pooled across 5,000 separate 249 -day paths with frozen parameters. Exceedances were counted on the observed 2025 history. The hybrid correction retained the training-period market variance convention of Table 4 . rate : mean per-asset exceedance rate (nominal: 1−α ). Standard deviation (SD) describes cross-asset dispersion in percentage points; it is not a standard error. Coverage summaries are descriptive.
Jump setting
Method
KS (%)
AD (%)
ACF 25
ACF 60
Vgen
Training: 2014 – 2024 , 423 assets, 2,766 days
Off
Naive
6.93
3.38
0.13585
0.09492
1.33273
Off
Corrected
73.94
68.54
0.13569
0.09485
1.00011
Market only
Naive
6.28
3.18
0.13197
0.09208
1.34938
Market only
Corrected
73.64
67.81
0.12844
0.08969
1.00032
Market + assets
Naive
5.25
2.56
0.11727
0.08264
1.33445
Table 6: Jump settings under naive and corrected multi-asset composition. Each setting used 1,000 replications per asset across four seeds, with identical asset and market draws for the two composition methods. SPY was simulated in both windows, and the correction used each simulated market path’s variance and each asset draw’s variance. Entries are equal-weight cross-ticker means of per-path metrics. Kolmogorov–Smirnov (KS) and Anderson–Darling (AD) report non-rejection rates at α=0.05 . ACF 25 and ACF 60 are absolute-return autocorrelation errors through lags 25 and 60 , calculated within each path before averaging over replications and assets; lower values indicate better temporal fit. Vgen=Var(gi)/σgen,i2 compares composed variance with the active generator’s variance, rather than observed variance.
Figure 1: Empirical stylized facts of SPY daily excess growth rates ( 2014 – 2024 ). Panel (a) shows the heavy-tailed return density; the Laplace maximum-likelihood fit tracks the empirical peak and tails while the Gaussian fit does not. Panel (b) shows departure from the diagonal in a normal quantile-quantile plot at both extremes. Panel (c) shows the autocorrelation function of raw excess growth rates. Individual correlations are small, although the Ljung–Box test detects joint serial dependence. Panel (d) shows the autocorrelation function of absolute excess growth rates, which decays slowly across the reported lags.
Figure 2: Architecture of the hidden Markov model with jumps (HMM-WJ). When no jump episode is active, the chain transitions according to the empirical transition matrix T with probability 1−ϵ (thin bidirectional arrows) or enters a Poisson jump episode with probability ϵ (dashed upward arrow to the Poisson clock). During an episode, each of the K∼Poisson(λ) forced steps independently draws the bottom tail set S− (red, lowest-valued states) with probability pneg or the top tail set S+ (blue, highest-valued states) otherwise. Ordinary transitions then resume. Small bell curves above each state show the state-conditional location-scale Student- t ( ν=5 ) emission distribution. Tail sets are defined as the Ntail lowest- and highest-quantile states under the Laplace quantile partition.
Figure 3: Head-to-head in-sample model comparison for SPY ( N=100 , 1,000 simulated paths). Panel (a): marginal density of excess growth rates with in-sample Kolmogorov–Smirnov (KS) pass rates annotated per generator. Panel (b): mean autocorrelation function (ACF) of ∣Gt∣ at lags 1 – 252 . For the hidden Markov model with jumps (HMM-WJ), the solid curve and its 10 th– 90 th percentile band use jump-active paths; the dashed curve averages all paths. The generalized autoregressive conditional heteroskedasticity (GARCH) band also gives path percentiles. Horizontal dotted lines are the white-noise references ±1.96/2,766 . Panel (c): tail quantile-quantile plot at the 0.1 st– 99.9 th percentile region per generator.
Figure 4: Marginal fit and generator-variance preservation under paired composition. We used 100 paired paths of 2,766 observations for each of 423 non-market assets, with the observed 2014 – 2024 SPY market path and jumps disabled. Blue circles denote naive composition; red diamonds denote hybrid composition. Outlined circles mark the tracker assets QQQ and SPYG in the corresponding method color. Panel (a): each point is the fraction of paths passing the Kolmogorov–Smirnov (KS) test against the observed asset returns at α=0.05 . Panel (b): each point is the median of the 100 ratios Var(gi)/σgen,i2 , with the denominator measured from the same uncomposed generator draw. The dashed line marks the hybrid target of one for the 421 non-tracker assets. Trackers instead target βi2σm2/Rreal,i2 and need not lie on that line. The dotted curve summarizes the per-ticker medians of the naive reference 1+ρi , where ρi=βi2σm2/σgen,i2 is computed per draw. This reference omits the finite-path covariance term. Solid curves in panel (a) and the dotted curve in panel (b) are Gaussian-kernel weighted medians over non-tracker assets, with bandwidth 0.15 in calibrated β . For non-tracker hybrid paths, the median and 95 th percentile of ∣Var(gi)/σgen,i2−1∣ were 1.12% and 3.41% ; ticker medians therefore conceal individual-path variation. The annualized variance of the observed market path was Δtσm2=0.030yr−1 .
Figure 5: Cross-ticker distribution of frozen-parameter out-of-sample marginal fit. Panel (a) shows the distribution of per-ticker 2025 Kolmogorov–Smirnov (KS) pass rates across 100 replications; the dashed line marks 95% . Panel (b) compares each ticker’s hybrid KS pass rate against a matched-length training block with its pass rate against the 2025 holdout. The diagonal denotes equal performance.
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
Quantity
Closed form at the fit
Sample or simulation
Stationary law and moments
State occupancy count, smallest and largest (of T=2,766 )
–
16 , 47
Occupancy frequency π^k , smallest and largest
–
0.0058 , 0.017
maxk∣πˉk−π^k∣
3.7×10−4
–
Mean ( yr−1 )
0.0636
0.0631
supx∣Fmix(x)−FT(x)∣
0.0045
–
Appendix
Table S1 : Closed-form quantities of the fitted SPY generator against sample and simulated values. Entries evaluate the expressions below at the fitted SPY model of Table 1 ; jump-path entries use the stated single-episode and finite-horizon approximations. Sample values are computed from the in-sample SPY series; simulated values use 400 in-sample-length paths for the jump-episode quantities (forced-step fraction, jump-path probability, and forced fraction within a jump path) and 1,000 paths for mean sample skewness. The sup-distance entry is the largest gap between the no-jump model’s stationary distribution function and the in-sample empirical distribution function; for comparison, the two-sample Kolmogorov–Smirnov critical value used by the path-level tests at α=0.05 for two samples of T=2,766 observations is 1.3582/T=0.0365 . Observed autocorrelations are those of the in-sample series shown in Fig. 1 d. Stationary moments describe the no-jump mixture unless labeled otherwise. Here At=∣Gt∣ and θ2 is the transition matrix’s second-largest eigenvalue in modulus.
Metric
HSMM
HMM-WJ
HMM-WJ
(Student- t )
(Gaussian)
(Student- t )
States
8
100
100
In-sample ( 2,766 trading days, 2014 – 2024 )
KS pass rate (%)
82.0 ( 1.2 )
97.0 ( 0.5 )
98.3 ( 0.4 )
AD pass rate (%)
42.5 ( 1.6 )
90.5 ( 0.9 )
94.8 ( 0.7 )
Excess kurtosis
4.8 ( 0.08 )
5.5 ( 0.03 )
7.5 ( 0.09 )
Appendix
Table S2 : Three-way comparison of emission distributions and duration specifications for SPY. Standard errors in parentheses; bold marks the best value per row, which for excess kurtosis is the value closest to the observed one. The HSMM is the hidden semi-Markov baseline adapted from Bulla and Bulla (eight states, negative-binomial dwell times with a geometric fallback, and Student- t emissions) [ 11 ] ; HMM-WJ: hidden Markov model with jumps ( N=100 ). All entries are computed from 1,000 simulated paths; pass rates use significance level α=0.05 . Kolmogorov–Smirnov (KS), Anderson–Darling (AD), and mean absolute error in the autocorrelation function (ACF-MAE) are defined in Online Appendix S3 . Autocorrelation error compares the observed curve with the ensemble-average curve, using lags 1 – 252 in training and 1 – 248 in the holdout.
β bucket
Method
∣β^−β∣
KS pass (%)
W1
κ
Var( g )
Q1 (low β )
Naive
0.018
24.6
0.403
8.971
18.1
Gaussian SIM
0.015
0.0
0.620
0.622
14.0
Hybrid
0.016
87.6
0.177
8.369
14.6
JumpHMM-on-residuals
0.015
73.2
0.204
7.059
14.3
Block bootstrap
0.015
71.3
0.208
6.286
13.9
GARCH(1,1)- t
0.015
57.8
0.253
5.255
13.4
Appendix
Table S3 : Aggregate metrics by β quartile, across composition methods. Quartile cutoffs are computed from the calibrated β distribution across the 423 -ticker universe. Pass rates pool equal numbers of paths per asset; other entries are medians across paths in the bucket. The GARCH rows use eligible fits among 393 assets, while the other methods cover all 423 .
Figure S1 : Heavy-tail preservation: excess kurtosis and Hill tail index vs calibrated β . Each point is a per-ticker median over 100 replications. Left: excess kurtosis, y -axis clipped to [−2,20] for readability. The dashed line marks the median real-data excess kurtosis across the universe ( κreal≈13 ); the hybrid and naive composition methods (orange and blue) track each other, while the Gaussian single-index model (SIM) stays near κ≈1 . Right: Hill tail-index estimator on the upper 5% of ∣g∣ . The hybrid and naive medians remain near 0.37 throughout the β range; Gaussian SIM sits near 0.22 . The shortfall from κreal is present with and without variance correction; this similarity does not isolate the effect of rescaling. Both composed distributions depend on the market and generator variance shares (Eq. ( S53 )).
Jump setting
Δ ACF 25 [95% MC interval]
Δ KS [95% MC interval]
Training: 2014 – 2024 , 423 assets, 2,766 days
Market only
−0.00725 [ −0.00812,−0.00638 ]
−0.30 [ −1.08,0.49 ]
Market + assets
−0.01988 [ −0.02063,−0.01913 ]
−12.25 [ −13.02,−11.49 ]
Holdout: 2025 , 416 assets, 249 days
Market only
0.00195 [ 0.00104,0.00287 ]
−0.04 [ −0.41,0.34 ]
Market + assets
0.00502 [ 0.00412,0.00593 ]
−1.49 [ −1.87,−1.12 ]
Appendix
Table S4 : Monte Carlo uncertainty in the effect of jump settings under corrected composition. Differences are relative to jumps disabled, with 1,000 market replications per window. Δ ACF 25 is the change in mean absolute error of the absolute-return autocorrelation function through lag 25 ; negative values indicate improved temporal fit. Δ KS is the change in Kolmogorov–Smirnov non-rejection rate in percentage points. Brackets contain approximate 95% Monte Carlo (MC) intervals conditional on the fitted models and observed histories.
KS pass (%)
AD pass (%)
W1
∣α^−α∣
Method
Native
Centered
Native
Centered
Native
Centered
Native
Centered
Naive
7.5
7.5
3.7
3.7
0.695
0.695
0.002
0.002
Gaussian SIM
0.6
0.9
0.5
0.6
0.675
0.673
0.047
0.002
Hybrid
74.4
74.4
65.1
65.1
0.246
0.246
0.002
0.002
JumpHMM-on-residuals
75.8
78.4
70.4
71.4
0.230
0.226
0.048
0.002
Block bootstrap
73.5
76.7
66.7
68.0
0.230
0.227
0.041
0.002
Appendix
Table S5 : Paired control for residual centering on common training assets. Native and centered results use the same 393 assets and 100 paths per asset. Centered paths have zero residual mean over 2,766 observations. Kolmogorov–Smirnov (KS) and Anderson–Darling (AD) columns give non-rejection percentages at α=0.05 ; higher values indicate closer empirical fit. W1 is median Wasserstein-1 distance, and ∣α^−α∣ is median absolute ordinary least squares (OLS) intercept error, both in yr−1 ; lower values indicate closer agreement. Naive and hybrid already center each residual path. JumpHMM denotes the hidden Markov generator, with jumps disabled; SIM denotes the single-index model, and GARCH denotes generalized autoregressive conditional heteroskedasticity.
Output
Metric
As fitted
Empirical scale
Paired change (SE)
Uncomposed
KS pass (%)
98.64
99.82
+1.18 (0.16)
AD pass (%)
98.90
99.72
+0.82 (0.14)
W1 ( yr−1 )
0.1800
0.1696
-0.0104 (0.0004)
Variance / observed
1.0772
1.0553
-0.0220 (0.0001)
ACF-MAE 25
0.14207
0.14183
-0.00024 (0.00002)
Naive
KS pass (%)
12.13
14.64
+2.51 (0.22)
Appendix
Table S6 : Paired sensitivity to the scale of populated constant states. Each treatment used 100 paired training-length paths for each of the same 39 affected assets. Entries are means over these fixed assets and replications. The empirical-scale treatment changes only populated near-constant states, retaining the sparse-state fallback. Kolmogorov–Smirnov (KS) and Anderson–Darling (AD) pass fractions use p>0.05 ; their changes are percentage points. W1 is the Wasserstein-1 distance to observed growth rates. Variance / observed divides each path’s variance by its asset’s observed training variance. ACF-MAE 25 is the mean absolute difference between each path’s absolute-return autocorrelation function and the observed function over lags 1 – 25 , calculated before averaging paths. Paired change subtracts the fitted value from the empirical-scale value. Standard errors (SE) use the 100 replication-level mean paired changes over the fixed asset set and describe simulation uncertainty, not uncertainty across historical markets.