暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R语言中使用RCPP并行计算指数加权波动率

拓端数据部落 2022-04-29
648

原文链接:http://tecdat.cn/?p=17829

指数加权波动率是一种波动率的度量,它使最近的观察结果有更高权重。我们将使用以下公式计算指数加权波动率:

S [t] ^ 2 = SUM(1-a) a ^ i (r [t-1-i]-rhat [t])^ 2,i = 0…inf

其中rhat [t]是对应的指数加权平均值

rhat [t] = SUM(1-a) a ^ i r [t-1-i],i = 0…inf

上面的公式取决于每个时间点的完整价格历史记录,并花了一些时间进行计算。因此,我想分享Rcpp和RcppParallel如何帮助我们减少计算时间。

我将使用汇率的历史数据集  作为测试数据。

首先,我们计算平均滚动波动率

#*****************************************************************
# 计算对数收益率
#*****************************************************************

ret = diff(log(data$prices))
 
tic(5)
hist.vol = sqrt(252) * bt.apply.matrix(ret, runSD, n = 200)
toc(5)

经过时间为0.17秒

接下来,让我们编写指数加权代码逻辑

# 建立 RCPP 函数计算指数加权波动率  
load.packages('Rcpp')
sourceCpp(code='
#include <Rcpp.h>
using namespace Rcpp;
using namespace std;
 
// \[\[Rcpp::plugins(cpp11)\]\]
 
//ema\[1\] = 0
//ema\[t\] = (1-a)\*r\[t-1\] + (1-a)\*a*ema\[t-1\]
// \[\[Rcpp::exp

 {
if(!NumericVector::is_na(x\[t\])) break;
res\[t\] = NA_REAL;
}
int start_t = t;

-a) * a^i * (r\[t-1-i\] - rhat\[t\])^2, i=0 ... inf
// \[\[Rcpp::export\]\]
NumericVector run\_esd\_cpp(NumericVector x, double ratio) {
auto sz = x.siz

// find start index; first non NA item
for(t = 0; t < sz; t++) {
if(!Num
0;
for(t = start_t + 1; t < sz; t++) {
ema = (1-ratio) * ( x\[t-1\] + ratio * ema);
double sigma = 0;
for(int i = 0; i < (t - start_t); i++) {
sigma += pow(ratio,i) * pow(x\[t-1-i\] - ema, 2);
}
res\[t\] = (1-ratio) * sigma;
}    
nratio = n/(n+1)) run\_ema\_cpp(x, ratio)
run.esd = funct

经过时间为106.16秒。


点击标题查阅往期内容


HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率


左右滑动查看更多


01

02

03

04



执行此代码花了一段时间。但是,代码可以并行运行。以下是RcppParallel版本。

# 建立 RCPP 并行函数计算指数加权波动率  
load.packages('RcppParallel')
sourceCpp(code='

using namespace Rcpp;
using namespace s
s(cpp11)\]\]
// \[\[Rcpp::depends(R
to read from
const RMatrix<double> mat;
// internal variables
const double ratio
t;
// initialize from Rcpp input and output matrixes
run\_esd\_helper(const Nume
all operator that work for th

in, size_t end) {
for (size_t c1 = begin; c1 < end; c1++) {
int t;
// find start index; fir

经过时间为14.65秒

运行时间更短。接下来,让我们直观地了解使用指数加权波动率的影响

dates = '2007::2010'
layout(1:2)
e='h'col='black'plotX=F)
plota.legend(paste('Dai
s,1\],type='
l',col='black')

 

不出所料,指数加权波动率在最近的观察结果中占了更大的比重,是一种更具反应性的风险度量。





点击文末“阅读原文”

获取全文完整资料


本文选自《R语言中使用RCPP并行计算指数加权波动率》。


点击标题查阅往期内容

HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率
R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
Garch波动率预测的区制转移交易策略
金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
时间序列分析模型:ARIMA-ARCH GARCH模型分析股票价格
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
MATLAB用GARCH模型对股票市场收益率时间序列波动的拟合与预测
R语言GARCH-DCC模型和DCC(MVT)建模估计
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
R语言时间序列GARCH模型分析股市波动率
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测
使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析
R语言多元Copula GARCH 模型时间序列预测
R语言使用多元AR-GARCH模型衡量市场风险
R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
R语言用Garch模型和回归模型对股票价格分析
GARCH(1,1),MA以及历史模拟法的VaR比较
matlab估计arma garch 条件均值和方差模型
R语言POT超阈值模型和极值理论EVT分析
R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
R语言极值理论EVT:基于GPD模型的火灾损失分布分析
R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析
R语言POT超阈值模型和极值理论EVT分析
R语言混合正态分布极大似然估计和EM算法
R语言多项式线性模型:最大似然估计二次曲线
R语言Wald检验 vs 似然比检验
R语言GARCH-DCC模型和DCC(MVT)建模估计
R语言非参数方法:使用核回归平滑估计和K-NN(K近邻算法)分类预测心脏病数据
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计
R语言基于Bootstrap的线性回归预测置信区间估计方法
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
Matlab马尔可夫区制转换动态回归模型估计GDP增长率
R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法


文章转载自拓端数据部落,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论