<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>协方差 on 格物堂</title><link>https://gewutang.cn/tags/%E5%8D%8F%E6%96%B9%E5%B7%AE/</link><description>Recent content in 协方差 on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 18 Dec 2010 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/%E5%8D%8F%E6%96%B9%E5%B7%AE/index.xml" rel="self" type="application/rss+xml"/><item><title>指数加权移动平均法计算VaR</title><link>https://gewutang.cn/2010/12/18/caculate-var-via-ewma/</link><pubDate>Sat, 18 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/18/caculate-var-via-ewma/</guid><description>&lt;h2 id="指数加权移动平均法"&gt;&lt;a href="#%e6%8c%87%e6%95%b0%e5%8a%a0%e6%9d%83%e7%a7%bb%e5%8a%a8%e5%b9%b3%e5%9d%87%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;指数加权移动平均法&#10;&lt;/h2&gt;&lt;p&gt;指数移动加权法是一种动态波动率建模方法，其核心思想是通过赋予历史收益率随时间衰减的权重，捕捉金融时间序列的波动率聚集特征。与传统等权重方法不同，EWMA通过引入衰减因子 &lt;code&gt;\(\lambda\)&lt;/code&gt;，其中: &lt;code&gt;\(\left(0\le\lambda\le1\right)\)&lt;/code&gt; ，使近期数据对波动率估计的影响呈指数级递增，而远期数据影响逐渐衰减（通常取 &lt;code&gt;\(\lambda = 0.94\)&lt;/code&gt; ，基于RiskMetrics建议）。这种机制使得模型能更快响应市场突变，尤其适用于高频风险监测。&lt;/p&gt;&#10;&lt;h3 id="单资产情形"&gt;&lt;a href="#%e5%8d%95%e8%b5%84%e4%ba%a7%e6%83%85%e5%bd%a2" class="header-anchor"&gt;&lt;/a&gt;单资产情形&#10;&lt;/h3&gt;&lt;h4 id="1-数据准备与收益率计算"&gt;&lt;a href="#1-%e6%95%b0%e6%8d%ae%e5%87%86%e5%a4%87%e4%b8%8e%e6%94%b6%e7%9b%8a%e7%8e%87%e8%ae%a1%e7%ae%97" class="header-anchor"&gt;&lt;/a&gt;1. 数据准备与收益率计算&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;获取资产历史收盘价序列${P_t}$，计算对数收益率：&#10;$$&#10;r_t = \ln\left(\frac{P_t}{P_{t-1}}\right)&#10;$$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="2-动态方差估计"&gt;&lt;a href="#2-%e5%8a%a8%e6%80%81%e6%96%b9%e5%b7%ae%e4%bc%b0%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;2. 动态方差估计&#10;&lt;/h4&gt;&lt;p&gt;EWMA通过指数衰减因子 &lt;code&gt;\(\lambda\)&lt;/code&gt; 赋予近期数据更高权重，捕捉波动率的时变特性：&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\sigma_t^2 = \lambda \sigma_{t-1}^2 + (1-\lambda) r_{t-1}^2&#10;$$&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\lambda \in (0,1)\)&lt;/code&gt;：衰减因子（典型值0.94）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(r_{t-1}\)&lt;/code&gt;：前一日收益率&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\sigma_{t-1}^2\)&lt;/code&gt;：前一日波动率&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="3-var计算正态假设"&gt;&lt;a href="#3-var%e8%ae%a1%e7%ae%97%e6%ad%a3%e6%80%81%e5%81%87%e8%ae%be" class="header-anchor"&gt;&lt;/a&gt;3. VaR计算（正态假设）&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;单日VaR公式：&#10;$$&#10;\text{VaR}_{\alpha} = -\mu + \sigma_t \Phi^{-1}(1-\alpha)&#10;$$&#10;其中$\mu$为收益率均值（短期内可忽略），$\Phi^{-1}$为标准正态分布分位数（如95%置信水平对应1.645）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="4-多期var调整"&gt;&lt;a href="#4-%e5%a4%9a%e6%9c%9fvar%e8%b0%83%e6%95%b4" class="header-anchor"&gt;&lt;/a&gt;4. 多期VaR调整&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;持有期$T$天的VaR扩展：&#10;$$&#10;\text{VaR}&lt;em&gt;T = \text{VaR}&lt;/em&gt;{1d} \times \sqrt{T}&#10;$$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h5 id="代码实现"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;代码实现&#10;&lt;/h5&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;) # 金融数据获取&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：quantmod&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：xts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'zoo'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## as.Date, as.Date.numeric&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：TTR&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by 'quantmod':&#10;## method from&#10;## as.zoo.data.frame zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;if (!require(&amp;quot;ggplot2&amp;quot;)) install.packages(&amp;quot;ggplot2&amp;quot;) # 可视化&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：ggplot2&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;library(ggplot2)&#10;&#10;# 获取标普500指数数据（示例）&#10;getSymbols(&amp;quot;^GSPC&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = &amp;quot;2020-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;GSPC&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 计算对数收益率&#10;returns &amp;lt;- na.omit(ROC(Cl(GSPC))) # 使用收盘价计算&#10;colnames(returns) &amp;lt;- &amp;quot;Daily_Return&amp;quot;&#10;&#10;# 参数设置&#10;lambda &amp;lt;- 0.94 # 衰减因子&#10;portfolio_value &amp;lt;- 1e6 # 组合价值100万美元&#10;confidence_level &amp;lt;- 0.95 # 置信水平&#10;z_score &amp;lt;- qnorm(1 - confidence_level) # 分位数（正态分布）&#10;&#10;# 初始化EWMA方差序列&#10;n &amp;lt;- length(returns)&#10;ewma_var &amp;lt;- numeric(n)&#10;ewma_var[1] &amp;lt;- var(returns) # 初始化为样本方差&#10;&#10;# 递归计算EWMA方差&#10;for (i in 2:n) {&#10; ewma_var[i] &amp;lt;- lambda * ewma_var[i-1] + (1 - lambda) * returns[i-1]^2&#10;}&#10;&#10;# 转换为年化波动率&#10;ewma_vol &amp;lt;- sqrt(ewma_var * 252)&#10;&#10;# 计算VaR序列&#10;VaR &amp;lt;- portfolio_value * z_score * ewma_vol&#10;&#10;# 获取最新VaR值&#10;latest_VaR &amp;lt;- tail(VaR, 1)&#10;cat(&amp;quot;最新EWMA VaR（95%置信度）:&amp;quot;, round(latest_VaR, 2), &amp;quot;美元\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 最新EWMA VaR（95%置信度）: -581585.7 美元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 可视化结果&#10;results &amp;lt;- data.frame(&#10; Date = index(GSPC)[-1], &#10; Volatility = ewma_vol,&#10; VaR = VaR&#10;)&#10;&#10;ggplot(results, aes(x = Date)) +&#10; geom_line(aes(y = Volatility, color = &amp;quot;波动率&amp;quot;)) +&#10; geom_line(aes(y = VaR / 1e4, color = &amp;quot;VaR（万美元）&amp;quot;)) +&#10; scale_y_continuous(&#10; name = &amp;quot;年化波动率&amp;quot;,&#10; sec.axis = sec_axis(~ . * 1e4, name = &amp;quot;VaR（美元）&amp;quot;)&#10; ) +&#10; labs(title = &amp;quot;EWMA波动率与VaR动态变化&amp;quot;,&#10; color = &amp;quot;指标类型&amp;quot;) +&#10; theme_minimal()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/18/caculate-var-via-ewma/index_files/figure-html/unnamed-chunk-1-1.png" width="672" /&gt;&#10;&lt;h3 id="多元资产组合ewma-var建模原理与r实现"&gt;&lt;a href="#%e5%a4%9a%e5%85%83%e8%b5%84%e4%ba%a7%e7%bb%84%e5%90%88ewma-var%e5%bb%ba%e6%a8%a1%e5%8e%9f%e7%90%86%e4%b8%8er%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;多元资产组合EWMA-VaR建模原理与R实现&#10;&lt;/h3&gt;&lt;h4 id="协方差矩阵动态更新"&gt;&lt;a href="#%e5%8d%8f%e6%96%b9%e5%b7%ae%e7%9f%a9%e9%98%b5%e5%8a%a8%e6%80%81%e6%9b%b4%e6%96%b0" class="header-anchor"&gt;&lt;/a&gt;协方差矩阵动态更新&#10;&lt;/h4&gt;&lt;p&gt;多资产EWMA模型通过递归更新协方差矩阵捕捉资产间相关性的时变特征:&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\Sigma_t = \lambda \Sigma_{t-1} + (1-\lambda)\mathbf{r}&lt;em&gt;{t-1}\mathbf{r}&lt;/em&gt;{t-1}^\top&#10;$$&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\mathbf{r}_{t-1}\)&lt;/code&gt;：前一期资产收益率向量（$n \times 1$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\Sigma_{t-1}\)&lt;/code&gt;：前一期协方差矩阵（$n \times n$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\lambda\)&lt;/code&gt;：衰减因子（建议值0.94）:ml-citation{ref=&amp;ldquo;4,8&amp;rdquo; data=&amp;ldquo;citationList&amp;rdquo;}&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="组合var计算流程"&gt;&lt;a href="#%e7%bb%84%e5%90%88var%e8%ae%a1%e7%ae%97%e6%b5%81%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;组合VaR计算流程&#10;&lt;/h4&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;步骤&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;计算公式&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;组合方差&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(\sigma_p^2 = \mathbf{w}^\top \Sigma_t \mathbf{w}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;年化波动率&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(\sigma_p^{\text{annual}} = \sigma_p \sqrt{252}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VaR&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(VaR_{\alpha} = Z_{1-\alpha} \times P_0 \times \sigma_p^{\text{annual}}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\mathbf{w}\)&lt;/code&gt;：资产权重向量（需满足$\sum w_i=1$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(P_0\)&lt;/code&gt;：组合总价值&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="r语言完整实现"&gt;&lt;a href="#r%e8%af%ad%e8%a8%80%e5%ae%8c%e6%95%b4%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;R语言完整实现&#10;&lt;/h4&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要库&#10;library(quantmod) # 多元金融数据获取&#10;library(ggplot2) # 可视化&#10;library(reshape2) # 数据重塑&#10;&#10;# 获取三大股指数据&#10;symbols &amp;lt;- c(&amp;quot;^GSPC&amp;quot;, &amp;quot;^IXIC&amp;quot;, &amp;quot;^DJI&amp;quot;) # 标普500、纳斯达克、道琼斯&#10;getSymbols(symbols, from = &amp;quot;2020-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;GSPC&amp;quot; &amp;quot;IXIC&amp;quot; &amp;quot;DJI&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 合并收盘价并计算对数收益率&#10;prices &amp;lt;- na.omit(merge(Cl(GSPC), Cl(IXIC), Cl(DJI)))&#10;returns &amp;lt;- na.omit(ROC(prices)) &#10;colnames(returns) &amp;lt;- c(&amp;quot;SP500&amp;quot;, &amp;quot;NASDAQ&amp;quot;, &amp;quot;DJI&amp;quot;)&#10;&#10;# 参数设置&#10;lambda &amp;lt;- 0.94 # 衰减因子&#10;weights &amp;lt;- c(0.5, 0.3, 0.2) # 资产权重向量&#10;portfolio_value &amp;lt;- 1e7 # 组合价值（美元）&#10;conf_level &amp;lt;- 0.95 # 置信水平&#10;&#10;# 初始化协方差矩阵&#10;n_assets &amp;lt;- ncol(returns)&#10;n_obs &amp;lt;- nrow(returns)&#10;covar &amp;lt;- array(dim = c(n_assets, n_assets, n_obs))&#10;covar[,,1] &amp;lt;- cov(returns) # 初始协方差矩阵&#10;&#10;# 递归更新协方差矩阵&#10;for (i in 2:n_obs) {&#10; r_prev &amp;lt;- as.numeric(returns[i-1, ])&#10; covar[,,i] &amp;lt;- lambda * covar[,,i-1] + (1 - lambda) * outer(r_prev, r_prev)&#10;}&#10;&#10;# 计算组合波动率&#10;port_var &amp;lt;- sapply(1:n_obs, function(i) {&#10; t(weights) %*% covar[,,i] %*% weights&#10;})&#10;annual_vol &amp;lt;- sqrt(port_var * 252)&#10;&#10;# 计算VaR序列&#10;z_score &amp;lt;- qnorm(conf_level)&#10;VaR_series &amp;lt;- -portfolio_value * z_score * annual_vol&#10;&#10;# 输出最新VaR&#10;cat(&amp;quot;Latest Portfolio EWMA VaR (95%):&amp;quot;, &#10; round(tail(VaR_series, 1), 2), &amp;quot;USD\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Latest Portfolio EWMA VaR (95%): -6013901 USD&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 可视化协方差矩阵变化&#10;cov_df &amp;lt;- data.frame(&#10; Date = index(returns),&#10; SP500_NASDAQ = sapply(1:n_obs, function(i) covar[1,2,i]),&#10; SP500_DJI = sapply(1:n_obs, function(i) covar[1,3,i]),&#10; NASDAQ_DJI = sapply(1:n_obs, function(i) covar[2,3,i])&#10;)&#10;cov_long &amp;lt;- melt(cov_df, id.vars = &amp;quot;Date&amp;quot;)&#10;&#10;ggplot(cov_long, aes(x = Date, y = value, color = variable)) +&#10; geom_line(alpha = 0.7) +&#10; labs(title = &amp;quot;协方差动态变化趋势&amp;quot;, y = &amp;quot;协方差值&amp;quot;) +&#10; theme_minimal()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/18/caculate-var-via-ewma/index_files/figure-html/unnamed-chunk-2-1.png" width="672" /&gt;&#10;</description></item></channel></rss>