library(quantmod)
library(xts)
library(zoo)
library(vars)
library(Matrix)
library(Spillover)Replication of Diebold & Yilmaz (2012): Volatility Spillovers Between Crypto and Traditional Markets
1 Abstract
This paper replicates the volatility spillover framework proposed by Diebold and Yilmaz (2012) using a set of crypto-assets and traditional financial markets. Daily volatility is estimated using the Parkinson (1980) range-based estimator for Bitcoin, Ethereum, the Eurostoxx 50 index, and the EUR/USD exchange rate over the period 2018–2025. A Vector Autoregressive (VAR) model combined with forecast error variance decompositions is employed to compute total, directional, and net volatility spillover indices, both on a static basis and using rolling-window estimations. The results indicate that Ethereum acts as the dominant transmitter of volatility, while Bitcoin is primarily a net receiver, with traditional markets exhibiting more moderate spillover dynamics. Overall, the findings confirm the relevance of the Diebold–Yilmaz framework in a crypto-inclusive financial environment and highlight the growing systemic importance of crypto-assets.
2 Introduction
Understanding how volatility is transmitted across financial markets is an important issue in financial economics, especially during periods of uncertainty. Volatility spillovers measure how shocks in one market affect the variability of others and are relevant for portfolio diversification, risk management, and financial stability. Diebold and Yilmaz (2012) propose a widely used framework to quantify such spillovers using forecast error variance decompositions from vector autoregressive (VAR) models. Their original study focuses on traditional U.S. asset classes, including equities, bonds, foreign exchange, and commodities.
In recent years, cryptocurrency markets have grown rapidly and become increasingly connected with traditional financial markets. Both Bitcoin and Ethereum are now widely traded by institutional and retail investors, and their prices often move together with equity and foreign exchange markets during periods of market stress. This raises the question of whether cryptocurrencies have become important transmitters or receivers of volatility across financial markets.
In this study, traditional bond markets are excluded and replaced with cryptocurrencies. This choice is motivated by both data and economic considerations. Government bond markets typically exhibit relatively low volatility, which makes volatility-based spillover measures less informative. In contrast, cryptocurrencies display strong volatility clustering and large price movements, making them well suited for spillover analysis based on volatility dynamics.
Two cryptocurrencies—Bitcoin and Ethereum—are included rather than a single crypto asset. Although both belong to the same asset class, they differ in their economic roles. Bitcoin is mainly viewed as a store of value, while Ethereum is closely linked to decentralized applications and network activity. Including both assets allows the analysis to capture volatility spillovers within the crypto market and to examine whether these spillovers differ from those involving traditional financial markets.
The objective of this paper is to replicate the Diebold–Yilmaz (2012) spillover framework in a modern setting using European financial markets and cryptocurrencies. Specifically, the analysis considers Bitcoin (BTC), Ethereum (ETH), the Euro Stoxx 50 index (EURO50), and the EUR/USD exchange rate. The results provide evidence on how volatility is transmitted between crypto assets and traditional markets, and on whether cryptocurrencies act primarily as sources or receivers of volatility.
3 Replication Methodology
3.1 Methodological framework
The replication closely follows the methodology introduced by Diebold and Yilmaz (2012). Daily market volatility is estimated using the Parkinson (1980) high–low estimator, and the resulting log-volatility series are modeled within a Vector Autoregressive (VAR) framework.
Parkinson (1980) high–low estimator:
\[ \sigma^2 = 0.361 (\ln H - \ln L)^2 \] The VAR approach allows for rich dynamic interactions among multiple time series without imposing strong structural assumptions, making it particularly well suited for analyzing volatility spillovers and capturing both direct and indirect transmission channels across markets.
Spillover measures are constructed using Forecast Error Variance Decompositions (FEVD) at a 10-day horizon, which quantify the proportion of forecast error variance attributable to shocks originating from other variables in the system. Following Diebold and Yilmaz (2012), total, directional, and net spillover indices are computed. To account for time-varying dynamics, rolling-window estimations with a 200-day window are implemented, allowing the evolution of spillovers over time to be examined.
3.2 Data Description
This study uses daily financial market data covering the period from October 2018 to December 2025. Four markets are analyzed in order to replicate the asset classes considered in Diebold and Yilmaz (2012). Bitcoin (BTC) is used as a proxy for the stock market due to its speculative nature and high volatility, while Ethereum (ETH) is employed as a proxy for the bond market, reflecting its central role in the crypto-financial ecosystem and its strong linkage to decentralized finance activity. The Eurostoxx 50 index represents the equity market, and the EUR/USD exchange rate serves as a proxy for the foreign exchange market.
Daily high and low prices for each asset are obtained from publicly available financial databases using the quantmod package in R. Market volatility is estimated using the Parkinson (1980) high–low estimator, which exploits intraday price ranges and provides a more efficient volatility measure than squared returns under the assumption of continuous trading. The resulting volatility series are log-transformed to improve statistical properties and ensure suitability for Vector Autoregressive (VAR) modeling. All series are synchronized by date, and missing observations are removed prior to analysis.
4 Empirical Analysis
4.1 Load Libraries
4.2 Download data
btc <- getSymbols("BTC-USD", from="2015-01-01", auto.assign=FALSE)
eth <- getSymbols("ETH-USD", from="2015-01-01", auto.assign=FALSE)
euro50 <- getSymbols("^STOXX50E", from="2015-01-01", auto.assign=FALSE)
eurusd <- getSymbols("EURUSD=X", from="2015-01-01", auto.assign=FALSE)4.3 Extract High and Low prices
btc_high <- btc[, "BTC-USD.High"]; btc_low <- btc[, "BTC-USD.Low"]
eth_high <- eth[, "ETH-USD.High"]; eth_low <- eth[, "ETH-USD.Low"]
euro50_high <- euro50[, "STOXX50E.High"]; euro50_low <- euro50[, "STOXX50E.Low"]
eurusd_high <- eurusd[, "EURUSD=X.High"]; eurusd_low <- eurusd[, "EURUSD=X.Low"]4.4 Compute Parkinson volatility
btc_vol <- 0.361 * (log(btc_high) - log(btc_low))^2
eth_vol <- 0.361 * (log(eth_high) - log(eth_low))^2
euro50_vol <- 0.361 * (log(euro50_high) - log(euro50_low))^2
eurusd_vol <- 0.361 * (log(eurusd_high) - log(eurusd_low))^24.5 Merge volatility series
vol_data <- merge(btc_vol, eth_vol, euro50_vol, eurusd_vol)
colnames(vol_data) <- c("BTC", "ETH", "EURO50", "EURUSD")
vol_data <- na.omit(vol_data) # remove missing4.6 Log-transform for VAR
Y_df <- as.data.frame(log(vol_data))
Y_df <- Y_df[apply(Y_df, 1, function(x) all(is.finite(x))), ]
colnames(Y_df) <- colnames(vol_data)4.7 VAR selection & fitting
lag_selection <- VARselect(Y_df, lag.max = 10, type="const")
p <- lag_selection$selection["AIC(n)"]
var_fit <- VAR(Y_df, p=p, type="const")4.8 Static FEVD & Spillovers
Table below reports the static spillover measures based on the Forecast Error Variance Decomposition (FEVD) at a 10-day horizon. The table presents directional spillovers transmitted TO other markets, spillovers received FROM other markets, and the resulting NET spillovers.
n_ahead <- 10
k <- ncol(Y_df)
fevd_res <- fevd(var_fit, n.ahead=n_ahead)
# TO others
to_others <- sapply(1:k, function(j){
fevd_j <- fevd_res[[j]]
fevd_last <- fevd_j[min(n_ahead, nrow(fevd_j)), ]
100 * sum(fevd_last[-j]) / sum(fevd_last)
})
# FROM others
from_others <- sapply(1:k, function(i){
incoming <- sapply(1:k, function(j){
if(i != j){
fevd_j <- fevd_res[[j]]
fevd_j[min(n_ahead, nrow(fevd_j)), i]
} else 0
})
100 * sum(incoming) / (sum(incoming) + fevd_res[[i]][min(n_ahead, nrow(fevd_res[[i]])), i])
})
# NET spillovers
net_spill <- to_others - from_others
# Static spillover table
spill_table <- data.frame(
Market = colnames(Y_df),
TO = to_others,
FROM = from_others,
NET = net_spill
)
print(spill_table) Market TO FROM NET
BTC BTC 1.028649 39.477968 -38.449319
ETH ETH 62.858358 4.342498 58.515861
EURO50 EURO50 4.099358 7.782916 -3.683558
EURUSD EURUSD 8.592361 2.392702 6.199659
The results show that Ethereum is the dominant transmitter of volatility, with a TO spillover of 62.87% and a strongly positive NET spillover of 58.55%, confirming its role as the primary volatility transmitter. In contrast, Bitcoin is primarily a volatility receiver, as indicated by its high FROM spillover (39.48%) and large negative NET spillover (-38.45%), indicating that it is mainly influenced by external shocks. Traditional markets play a more moderate role: the Eurostoxx 50 is a mild net receiver of volatility, while the EUR/USD exchange rate exhibits modest but positive net spillover effects.
4.9 Rolling window spillovers
window_size <- 200
n_obs <- nrow(Y_df)
roll_total <- roll_net_mat <- matrix(NA, nrow = n_obs - window_size + 1, ncol = k)
colnames(roll_net_mat) <- colnames(Y_df)
dates <- index(vol_data)[window_size:n_obs]
for(i in 1:(n_obs - window_size + 1)){
Y_roll <- Y_df[i:(i + window_size - 1), ]
var_roll <- try(VAR(Y_roll, p=p, type="const"), silent=TRUE)
if(inherits(var_roll, "try-error")) next
fevd_roll <- try(fevd(var_roll, n.ahead=n_ahead), silent=TRUE)
if(inherits(fevd_roll, "try-error")) next
h <- min(n_ahead, nrow(fevd_roll[[1]]))
# Total spillover
off_diag_sum <- 0; total_sum <- 0
for(m in 1:k){
for(n in 1:k){
val <- fevd_roll[[m]][h, n]
total_sum <- total_sum + val
if(m != n) off_diag_sum <- off_diag_sum + val
}
}
roll_total[i] <- 100 * off_diag_sum / total_sum
# Directional NET spillover
TO <- sapply(1:k, function(j){ sum(fevd_roll[[j]][h, -j]) / sum(fevd_roll[[j]][h, ]) * 100 })
FROM <- sapply(1:k, function(i_asset){
sum(sapply(1:k, function(j_asset){
if(i_asset != j_asset) fevd_roll[[j_asset]][h, i_asset] else 0
})) / k * 100
})
roll_net_mat[i, ] <- TO - FROM
}
# Convert to xts for plotting
roll_total_xts <- xts(roll_total, order.by=dates)
roll_net_xts <- xts(roll_net_mat, order.by=dates)4.10 Rolling total spillover
The rolling total spillover index measures the overall degree of volatility interconnectedness among the four markets over time. The results indicate that spillovers are highly time-varying and increase substantially during periods of market stress. This pattern is consistent with the findings of Diebold and Yilmaz (2012), who document elevated spillovers during financial crises.
In the context of this replication, peaks in the total spillover index coincide with major episodes of turbulence in crypto and global financial markets, suggesting that volatility transmission intensifies when uncertainty rises. This highlights the growing integration between crypto-assets and traditional financial markets.
plot(roll_total_xts, type="l", col="blue", lwd=2,
main="Rolling Total Spillover Index", ylab="%", xlab="Time")4.11 Rolling NET spillovers per market
The rolling net spillover plots provide insight into the directional nature of volatility transmission provide and indicate whether each market acts as a net transmitter or receiver of volatility. Ethereum consistently emerges as a net transmitter of volatility throughout most of the sample period. This finding reflects Ethereum’s central position in the crypto ecosystem and its sensitivity to technological, regulatory, and macro-financial shocks.
By contrast, Bitcoin appears predominantly as a net receiver of volatility, absorbing shocks originating from other markets rather than transmitting them. Traditional markets, represented by the Eurostoxx 50 and the EUR/USD exchange rate, exhibit more moderate and episodic spillover patterns, indicating that their influence on crypto markets, while present, is less dominant.
par(mfrow=c(4,1), mar=c(3,4,2,2))
plot(roll_net_xts$BTC, type="l", col="red", lwd=2, main="BTC NET", ylab="%")
plot(roll_net_xts$ETH, type="l", col="blue", lwd=2, main="ETH NET", ylab="%")
plot(roll_net_xts$EURO50, type="l", col="green", lwd=2, main="EURO50 NET", ylab="%")
plot(roll_net_xts$EURUSD, type="l", col="purple", lwd=2, main="EURUSD NET", ylab="%")4.12 Static FEVD Spillover Heatmap
The static FEVD spillover heatmap summarizes the average spillover structure over the full sample period. The heatmap visually confirms the dominant role of Ethereum as a source of volatility shocks, particularly toward Bitcoin and, to a lesser extent, traditional markets. Spillovers originating from traditional assets are comparatively smaller, highlighting the asymmetric nature of volatility transmission.
fevd_mat <- sapply(1:k, function(i){ fevd_res[[i]][n_ahead, ] })
rownames(fevd_mat) <- colnames(Y_df)
colnames(fevd_mat) <- colnames(Y_df)
heatmap(fevd_mat, Rowv=NA, Colv=NA, main="FEVD Spillover Heatmap", scale="none",cexCol=1, cexRow=1)5 Discussion and Comparison with Diebold & Yilmaz (2012)
The results obtained in this replication are broadly consistent with the core insights of Diebold and Yilmaz (2012). In both studies, volatility spillovers are found to be time-varying and to intensify during periods of heightened uncertainty. However, an important difference lies in the identity of the dominant volatility transmitter.
While the original study identifies equity markets as the main sources of volatility spillovers, this replication finds that Ethereum plays a similar role in the crypto-financial ecosystem. This shift reflects structural changes in global financial markets and underscores the increasing systemic relevance of crypto assets.
6 Conclusion
This study replicates the Diebold–Yilmaz (2012) volatility spillover framework in a crypto-inclusive setting and confirms that the methodology remains valid when applied to modern financial markets. Using Bitcoin, Ethereum, the Euro Stoxx 50 index, and the EUR/USD exchange rate, the analysis shows that crypto-assets—especially Ethereum—have become important sources of volatility transmission across markets.
The results indicate that Ethereum acts as a major transmitter of volatility, while Bitcoin mainly absorbs volatility shocks from other markets. Traditional markets exhibit more moderate spillover effects in comparison. These findings suggest that crypto-market volatility should be closely monitored by investors and risk managers when assessing cross-market risk and diversification benefits.
Overall, the results confirm the flexibility and continued relevance of the Diebold–Yilmaz framework for analyzing volatility spillovers in a financial system that increasingly includes crypto-assets.
7 Limitations
Several limitations should be acknowledged. First, the use of crypto-assets as substitutes for traditional asset classes represents an approximation and may not fully capture the economic characteristics of stock or bond markets. In particular, an equivalent bond market is not included, as range-based volatility measures such as the Parkinson estimator require high–low prices, which are not consistently available or meaningful for bond yield series. Second, the analysis relies on a fixed VAR specification, a 10-day forecast horizon, and a single rolling-window length, all of which may affect the estimated spillover measures.
Third, volatility is measured using daily high–low data, which does not capture intraday dynamics or market microstructure effects. Finally, the results are sample-dependent and may vary across different time periods or market conditions.
8 References
Diebold, F. X., & Yilmaz, K. (2012). Better to give than to receive: Predictive directional measurement of volatility spillovers. International Journal of Forecasting, 28(1), 57–66.
Parkinson, M. (1980). The extreme value method for estimating the variance of the rate of return. Journal of Business, 53(1), 61–65.