<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Value at Risk on 格物堂</title><link>https://gewutang.cn/tags/value-at-risk/</link><description>Recent content in Value at Risk on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Feb 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/value-at-risk/index.xml" rel="self" type="application/rss+xml"/><item><title>R与金融时间序列分析常见问题集</title><link>https://gewutang.cn/2012/02/03/r-and-questions-in-financial-timeseries-analysing/</link><pubDate>Fri, 03 Feb 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/02/03/r-and-questions-in-financial-timeseries-analysing/</guid><description>&lt;p&gt;大概四、五个月前，心血来潮打算总结一下COS论坛上关于金融时间序列分析上的常见问题，期许能够形一个集子以方便有需求者查询使用。因先前从未写过书籍，一时难以把握集子的结构便犹豫了很久。后来，无意中发现了《A Discussion of Time Series Objects for R in Finance》这本册子，读罢便决定以该册子的结构为蓝本来总结金融时间序列分析的常见问题集。问题集结构如下:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;基础篇&#10;&lt;ul&gt;&#10;&lt;li&gt;时间序列对象创建&lt;/li&gt;&#10;&lt;li&gt;时间戳操作&lt;/li&gt;&#10;&lt;li&gt;取子集操作&lt;/li&gt;&#10;&lt;li&gt;缺失值处理&lt;/li&gt;&#10;&lt;li&gt;操作效率度量等&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;技术篇&#10;&lt;ul&gt;&#10;&lt;li&gt;R与ARIMA模型&lt;/li&gt;&#10;&lt;li&gt;GARCH族模型&lt;/li&gt;&#10;&lt;li&gt;VaR（Value at Risk）模型&lt;/li&gt;&#10;&lt;li&gt;极值理论模型等&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;目前，基础篇大致完成，技术篇尚未完善，而已完成部分中定有不少错漏之处，希望发现错误的童鞋们能够及时批评指正。此外，本问题集由王晓伟、熊熹、刘剑锋、杨羽提供初稿，由我最终润色完成。感兴趣的人可以在点击&lt;a class="link" href="https://github.com/dengyishuo/dengyishuo.github.com/blob/master/RFinance/FAQ.pdf" target="_blank" rel="noopener"&#10; &gt;FAQ&lt;/a&gt;下载。&lt;/p&gt;&#10;</description></item><item><title>VaR和历史模拟法及R语言</title><link>https://gewutang.cn/2010/12/15/var-calculation-using-historical-simulation/</link><pubDate>Wed, 15 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/15/var-calculation-using-historical-simulation/</guid><description>&#10;&#10;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(showtext)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: sysfonts&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: showtextdb&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;font_add(&amp;quot;SimHei&amp;quot;, &amp;quot;SimHei.ttf&amp;quot;)&#10;showtext_auto()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;div id="引言" class="section level2"&gt;&#10;&lt;h2&gt;引言&lt;/h2&gt;&#10;&lt;p&gt;现代金融领域的计量工作分为两大块，即资产定价和风险度量。而资产定价又是以度量风险并为风险定价为基础，由此可见，风险度量工作实际上是现代金融计量领域的核心。金融领域度量风险的方法有很多，其中应用最多的是方差、最大回撤和 VaR 等。&lt;/p&gt;&#10;&lt;p&gt;在业界，VaR 不仅单纯作为风险管理的工具，在进行投资组合优化时，也会将 VaR 作为重要的过滤指标之一。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="var-的定义" class="section level2"&gt;&#10;&lt;h2&gt;VaR 的定义&lt;/h2&gt;&#10;&lt;p&gt;VaR 是 Value at Risk 的简称，中文译作“在险价值”。它是指在市场正常波动情况下，投资者所持有的投资组合在未来一定时期 &lt;span class="math inline"&gt;\(T\)&lt;/span&gt; 内，在一定置信水平 &lt;span class="math inline"&gt;\(\alpha\)&lt;/span&gt; 下所可能产生的最大可能损失。&lt;/p&gt;&#10;&lt;p&gt;假设投资者持有的投资组合的初始价值为 &lt;span class="math inline"&gt;\(P_{0}\)&lt;/span&gt; ，&lt;span class="math inline"&gt;\(r\)&lt;/span&gt; 为未来一定时期 &lt;span class="math inline"&gt;\(T\)&lt;/span&gt; 对应的收益率。那么，该组合的期末价值为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;P_{T}=P_{0}(1+r_{T})&#10;\]&lt;/span&gt;&#10;&lt;span class="math inline"&gt;\(r\)&lt;/span&gt; 可视作随机变量，若假设在某一置信水平下，该投资组合的最低价值为 &lt;span class="math inline"&gt;\(P^*\)&lt;/span&gt; ，则：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;P_{T}^*=P_{0}(1+r_{T}^*)&#10;\]&lt;/span&gt;&#10;显然，根据VaR的定义可知，其等于投资组合的最低价值和初始价值之差：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;VaR_{\alpha}=-P_{0}r_{\alpha}^*&#10;\]&lt;/span&gt;&#10;可见，计算 VaR 值等价于计算一定置信水平下的投资组合的最低价值 &lt;span class="math inline"&gt;\(P^*\)&lt;/span&gt; 或最低收益率 &lt;span class="math inline"&gt;\(r^*\)&lt;/span&gt; 。而计算最低价值或最低收益率则需依赖于价格序列或收益率序列的分布或概率密度函数。换句话说，计算金融资产序列的分布函数或概率密度函数正是计算 VaR 值的核心之处。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="var-的算法" class="section level1"&gt;&#10;&lt;h1&gt;VaR 的算法&lt;/h1&gt;&#10;&lt;p&gt;清楚了 VaR 的定义，计算 VaR 的方法也就呼之欲出了。目前，常用的 VaR 算法可以分为参数法即方差-协方差法、蒙特卡洛模拟法以及非参数方法即历史模拟法。在 VaR 的应用过程中，人们也对 VaR 的上述算法进行了扩展。比如，在方差-协方差方法下人们提出了指数级权平均模型计算方差或者结合 Garch 类模型计算方差进而计算 VaR 的方法。&lt;/p&gt;&#10;&lt;div id="历史模拟法" class="section level2"&gt;&#10;&lt;h2&gt;历史模拟法&lt;/h2&gt;&#10;&lt;p&gt;历史模拟法是最简单的计算 VaR 的方法。它假设投资组合未来的波动与投资组合的历史数据完全一致，因此，计算投资组合的未来 VaR 就等同于计算历史数据的既有 VaR 。&lt;/p&gt;&#10;&lt;p&gt;历史模拟法的步骤为：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;搜集历史数据&lt;/li&gt;&#10;&lt;li&gt;计算历史数据的几何收益率&lt;/li&gt;&#10;&lt;li&gt;对收益率进行排序并计算给定置信水平的下分位数&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div id="单资产-var-的计算及其r实现" class="section level2"&gt;&#10;&lt;h2&gt;单资产 VaR 的计算及其R实现&lt;/h2&gt;&#10;&lt;p&gt;下面以计算单个资产的VaR为例：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载必要包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;library(quantmod)&#10;&#10;# 获取苹果公司股票数据&#10;getSymbols(&amp;quot;AAPL&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = Sys.Date() - 365, to = Sys.Date())&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 计算对数收益率&#10;returns &amp;lt;- na.omit(periodReturn(AAPL, period = &amp;#39;daily&amp;#39;, type = &amp;#39;log&amp;#39;))&#10;&#10;# 设置置信水平 (95%)&#10;confidence_level &amp;lt;- 0.95&#10;&#10;# 历史模拟法计算VaR&#10;historical_var &amp;lt;- -quantile(returns, probs = 1 - confidence_level)&#10;&#10;# 打印结果&#10;cat(&amp;quot;历史模拟法计算的每日VaR（95%置信水平）:&amp;quot;, round(historical_var*100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 历史模拟法计算的每日VaR（95%置信水平）: 3.22 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 可视化结果&#10;hist(returns, breaks = 50, main = &amp;quot;日收益率分布与VaR（95%）&amp;quot;,&#10; xlab = &amp;quot;日收益率&amp;quot;, col = &amp;quot;lightblue&amp;quot;, border = &amp;quot;white&amp;quot;)&#10;abline(v = -historical_var, col = &amp;quot;red&amp;quot;, lwd = 2)&#10;text(x = -historical_var, y = par(&amp;quot;usr&amp;quot;)[4]*0.9, &#10; labels = paste(&amp;quot;VaR =&amp;quot;, round(historical_var*100, 2), &amp;quot;%&amp;quot;), &#10; pos = 2, col = &amp;quot;red&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/15/var-calculation-using-historical-simulation/index_files/figure-html/unnamed-chunk-1-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;p&gt;也可以直接用PerformanceAnalytics包中的VaR函数计算历史模拟法下的VaR值：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载必要包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;if (!require(&amp;quot;PerformanceAnalytics&amp;quot;)) install.packages(&amp;quot;PerformanceAnalytics&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Loading required package: PerformanceAnalytics&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;PerformanceAnalytics&amp;#39;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following object is masked from &amp;#39;package:graphics&amp;#39;:&#10;## &#10;## legend&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(quantmod)&#10;library(PerformanceAnalytics)&#10;&#10;# 获取苹果公司股票数据（过去250个交易日）&#10;getSymbols(&amp;quot;AAPL&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = Sys.Date() - 365, to = Sys.Date())&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 计算对数收益率&#10;returns &amp;lt;- na.omit(ROC(Cl(AAPL))) # 等效于 log(Cl(AAPL)/lag(Cl(AAPL)))&#10;&#10;# 使用PerformanceAnalytics包计算历史模拟法VaR（95%置信水平）&#10;var_result &amp;lt;- VaR(&#10; R = returns,&#10; p = 0.95,&#10; method = &amp;quot;historical&amp;quot;,&#10; portfolio_method = &amp;quot;single&amp;quot;&#10;)&#10;&#10;# 提取并格式化结果&#10;historical_var &amp;lt;- abs(var_result[1,]) # VaR值通常取正数表示损失&#10;confidence_level &amp;lt;- attr(var_result, &amp;quot;cl&amp;quot;)&#10;&#10;# 输出结果&#10;cat(&amp;quot;PerformanceAnalytics计算的每日VaR（&amp;quot;, confidence_level*100, &amp;quot;%置信水平）:&amp;quot;,&#10; round(historical_var*100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## PerformanceAnalytics计算的每日VaR（ %置信水平）: 3.22 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 可视化收益率分布及VaR&#10;hist(returns, breaks = 50, main = &amp;quot;日收益率分布与VaR（历史模拟法）&amp;quot;,&#10; xlab = &amp;quot;日收益率&amp;quot;, col = &amp;quot;lightblue&amp;quot;, border = &amp;quot;white&amp;quot;)&#10;abline(v = -historical_var, col = &amp;quot;red&amp;quot;, lwd = 2)&#10;text(x = -historical_var, y = par(&amp;quot;usr&amp;quot;)[4]*0.9,&#10; labels = paste(&amp;quot;VaR =&amp;quot;, round(historical_var*100, 2), &amp;quot;%&amp;quot;),&#10; pos = 2, col = &amp;quot;red&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/15/var-calculation-using-historical-simulation/index_files/figure-html/unnamed-chunk-2-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="多资产投资组合的-var-计算及其-r-实现" class="section level2"&gt;&#10;&lt;h2&gt;多资产投资组合的 VaR 计算及其 R 实现&lt;/h2&gt;&#10;&lt;p&gt;用历史模拟法计算多资产投资组合的 VaR 与单资产思路类似，唯一不同的是要按照当前投资组合中各资产的权重计算投资组合的历史收益率。&lt;/p&gt;&#10;&lt;p&gt;具体R代码如下:&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载必要包&#10;library(quantmod) # 金融数据获取&#10;library(dplyr) # 数据处理&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## ######################### Warning from &amp;#39;xts&amp;#39; package ##########################&#10;## # #&#10;## # The dplyr lag() function breaks how base R&amp;#39;s lag() function is supposed to #&#10;## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #&#10;## # source() into this session won&amp;#39;t work correctly. #&#10;## # #&#10;## # Use stats::lag() to make sure you&amp;#39;re not using dplyr::lag(), or you can add #&#10;## # conflictRules(&amp;#39;dplyr&amp;#39;, exclude = &amp;#39;lag&amp;#39;) to your .Rprofile to stop #&#10;## # dplyr from breaking base R&amp;#39;s lag() function. #&#10;## # #&#10;## # Code in packages is not affected. It&amp;#39;s protected by R&amp;#39;s namespace mechanism #&#10;## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #&#10;## # #&#10;## ###############################################################################&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;dplyr&amp;#39;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from &amp;#39;package:xts&amp;#39;:&#10;## &#10;## first, last&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from &amp;#39;package:stats&amp;#39;:&#10;## &#10;## filter, lag&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from &amp;#39;package:base&amp;#39;:&#10;## &#10;## intersect, setdiff, setequal, union&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(ggplot2) # 可视化&#10;&#10;# ========== 参数设置 ==========&#10;symbols &amp;lt;- c(&amp;quot;AAPL&amp;quot;, &amp;quot;GOOG&amp;quot;, &amp;quot;MSFT&amp;quot;) # 资产代码（苹果、谷歌、微软）&#10;weights &amp;lt;- c(0.5, 0.3, 0.2) # 资产权重（总和为1）&#10;portfolio_value &amp;lt;- 1e7 # 投资组合当前价值（假设1千万元）&#10;confidence_level &amp;lt;- 0.95 # 置信水平&#10;start_date &amp;lt;- &amp;quot;2020-01-01&amp;quot; # 数据开始日期&#10;end_date &amp;lt;- &amp;quot;2023-12-31&amp;quot; # 数据结束日期&#10;&#10;# ========== 1. 获取历史价格数据 ==========&#10;getSymbols(symbols, src = &amp;quot;yahoo&amp;quot;, from = start_date, to = end_date)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot; &amp;quot;GOOG&amp;quot; &amp;quot;MSFT&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 提取收盘价并合并&#10;prices &amp;lt;- merge(Cl(get(symbols[1])), Cl(get(symbols[2])), Cl(get(symbols[3])))&#10;colnames(prices) &amp;lt;- symbols&#10;&#10;# 清理缺失值（确保日期对齐）&#10;prices_clean &amp;lt;- na.omit(prices)&#10;&#10;# ========== 2. 计算各资产对数收益率 ==========&#10;returns &amp;lt;- data.frame(&#10; AAPL = as.numeric(Delt(prices_clean$AAPL)),&#10; GOOG = as.numeric(Delt(prices_clean$GOOG)),&#10; MSFT = as.numeric(Delt(prices_clean$MSFT))&#10;) %&amp;gt;% na.omit() # 去除首行NA&#10;&#10;# ========== 3. 计算投资组合每日收益率 ==========&#10;# 将收益率转换为矩阵进行加权计算&#10;returns_matrix &amp;lt;- as.matrix(returns)&#10;portfolio_returns &amp;lt;- returns_matrix %*% weights&#10;&#10;# ========== 4. 历史模拟法计算VaR ==========&#10;# 按升序排列组合收益率（损失为负值）&#10;sorted_returns &amp;lt;- sort(portfolio_returns)&#10;&#10;# 确定分位数位置&#10;n &amp;lt;- length(sorted_returns)&#10;var_index &amp;lt;- floor((1 - confidence_level) * n)&#10;var_quantile &amp;lt;- sorted_returns[var_index]&#10;&#10;# 计算VaR绝对值&#10;VaR &amp;lt;- abs(var_quantile) * portfolio_value&#10;&#10;# ========== 5. 输出结果 ==========&#10;cat(&amp;quot;========== 计算结果 ==========\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ========== 计算结果 ==========&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;置信水平:&amp;quot;, confidence_level * 100, &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 置信水平: 95 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;历史数据天数:&amp;quot;, n, &amp;quot;\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 历史数据天数: 1005&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;VaR分位数对应收益率:&amp;quot;, round(var_quantile * 100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## VaR分位数对应收益率: -2.94 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;组合VaR值:&amp;quot;, round(VaR, 2), &amp;quot;元\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 组合VaR值: 294069.7 元&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# ========== 6. 可视化== ==========&#10;# 绘制组合收益率分布直方图&#10;ggplot(data.frame(Return = portfolio_returns), aes(x = Return)) +&#10; geom_histogram(bins = 50, fill = &amp;quot;lightblue&amp;quot;, color = &amp;quot;black&amp;quot;) +&#10; geom_vline(xintercept = var_quantile, color = &amp;quot;red&amp;quot;, linewidth = 1) +&#10; labs(title = &amp;quot;投资组合历史收益率分布与VaR&amp;quot;,&#10; x = &amp;quot;收益率&amp;quot;, y = &amp;quot;频数&amp;quot;) +&#10; annotate(&amp;quot;text&amp;quot;, x = var_quantile, y = Inf, &#10; label = paste0(confidence_level * 100, &amp;quot;% VaR: &amp;quot;, round(VaR, 2), &amp;quot;元&amp;quot;),&#10; color = &amp;quot;red&amp;quot;, vjust = 1.5, hjust = -0.1) +&#10; theme_minimal()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/15/var-calculation-using-historical-simulation/index_files/figure-html/unnamed-chunk-3-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>