运用MATLAB探索上证指数(1990-2022)基本特征:走势、损益、回报率、自相关

  • 本文部分参考《MATLAB金融风险管理师FRM》(姜伟生,Part2)第一章。
  • 本文将原书中的标普500指数改为上证指数,以更好的适应中国市场。
  • 本文纯为交流用途,不带有商业性质。

数据来源

来源于wind,获取1990-12-19到2022-10-12的上证指数日收盘价数据,共有7773条数据。
“上证日K.mat”文件中有两个数据,分别是7773x1 datetime的date_series和7773x1 double的price。

绘制上证指数走势图

load 上证日K.mat
index = 1;
figure(index)
index = index + 1;
plot(date_series, price)
datetick('x','yyyy','keeplimits')
ylim([0,max(price)*1.1])
xlabel('日期')
ylabel('上证指数')
title('上证指数走势图')
set(gcf,'color','white')

在这里插入图片描述
可见,从2007年开始,上证就突破了3000。到了现在(2022年),上证指数再一次跌破3000点。

这怎么行?所以2022年10月11日,中国证券报头版再度发文《我国经济基本面稳定向好,A股估值已被低估》。

绘制上证指数单日损益图

PnL = diff(price);
PnL = [NaN; PnL];

figure(index)
index = index + 1;
plot(date_series, PnL,'.'); hold on
plot(date_series,0*PnL,'LineWidth',2)
datetick('x','yyyy','keeplimits')
ylim([min(PnL)*1.1,max(PnL)*1.1])
xlabel('日期')
ylabel('上证指数单日损益')
title('上证指数单日损益图')
set(gcf,'color','white')

在这里插入图片描述
07-08年,和15年股灾的时候,单日损益绝对值比较大。而2020年疫情的冲击没有那么大。相比来说,标普500在疫情的时候波动更大。

figure (index)
index = index + 1;
subplot (1,2,1)
histogram(PnL,50);
xlabel('Daily P&L')
ylabel('Number of occurrences')
subplot(1,2,2)
histfit(PnL,50);
xlabel('Daily P&L')
ylabel('Number of occurrences')
set(gcf,'color','white')

在这里插入图片描述
很明显,P&L存在厚尾的特征。计算一些统计指标:

PnL(isnan(PnL)) = [];
disp(['Mean value of PnL: ', num2str(mean(PnL))])
disp(['Variance of PnL: ', num2str(var(PnL))])
disp(['Standard deviation of PnL: ', num2str(std(PnL))])
disp(['Skewness of PnL: ', num2str(skewness(PnL))])
disp(['Kurtosis of PnL: ', num2str(kurtosis(PnL))])

输出:

Mean value of PnL: 0.37651
Variance of PnL: 1646.9315
Standard deviation of PnL: 40.5824
Skewness of PnL: -0.44546
Kurtosis of PnL: 23.2634

回报率

[daily_log_return,interval] = tick2ret (price, date_series,...
'Continuous');
 
[daily_simple_return,interval] = tick2ret (price, ...
date_series,'Simple');
 
figure (index)
index = index + 1;
 
subplot(1,2,1)
plot(date_series(2:end), daily_log_return*100,'.'); hold on
% yline(0) % 2018b, new function to draw a reference line
x = date_series(2:end);
y = 0;
plot(x,y*ones(size(x)),'LineWidth',2)
datetick('x','yyyy','keeplimits')
ylim([min(daily_log_return)*110,max(daily_log_return)*110])
xlabel('日期')
ylabel('对数日收益率')
set(gcf,'color','white')
 
subplot(1,2,2)
plot(date_series(2:end), daily_simple_return*100,'.'); hold on
plot(x,y*ones(size(x)),'LineWidth',2)
datetick('x','yyyy','keeplimits')
ylim([min(daily_log_return)*110,max(daily_log_return)*110])
xlabel('日期')
ylabel('普通日收益率')
set(gcf,'color','white')

在这里插入图片描述
1992年5月21日,上海股票交易市场股价全部放开。当天的普通日收益率超105%,对数收益率也超70%,算是一大奇迹。

其他时候来看,在市场很不健全的90年代,日收益率超过10%的并不少见。但是到进入新世纪,这种现象基本上销声匿迹。

figure (index)
index = index + 1;
subplot (1,2,1)
histogram(daily_log_return*100,50);
xlabel('对数日收益率')
ylabel('频次')
xlim([-20,20])
subplot(1,2,2)
histfit(daily_log_return*100,50);
xlabel('对数日收益率')
ylabel('频次')
xlim([-20,20])
set(gcf,'color','white')

在这里插入图片描述
统计指标:

daily_log_return(isnan(daily_log_return)) = [];
disp(['Mean value of log_r: ', num2str(mean(daily_log_return))])
disp(['Variance of log_r: ', num2str(var(daily_log_return))])
disp(['Standard deviation of PnL: ', num2str(std(daily_log_return))])
disp(['Skew of log_r: ', num2str(skewness(daily_log_return))]) 
disp(['Kurt of log_r: ', num2str(kurtosis(daily_log_return))])
daily_log_return(isnan(daily_log_return)) = [];
disp(['Mean value of log_r: ', num2str(mean(daily_log_return))])
disp(['Variance of log_r: ', num2str(var(daily_log_return))])
disp(['Standard deviation of PnL: ', num2str(std(daily_log_return))])
disp(['Skew of log_r: ', num2str(skewness(daily_log_return))]) 
disp(['Kurt of log_r: ', num2str(kurtosis(daily_log_return))])

自相关与平方自相关

figure (index)
index = index + 1;
subplot (1,2,1)
autocorr(daily_log_return)
subplot (1,2,2)
autocorr(daily_log_return.^2)

在这里插入图片描述
可见,中国的数据并不是很支持“回报率无自相关”(左图),而“回报率平方有自相关”(右图)的特性。基于此,GARCH模型对于1990-2022上证指数的适用性值得探讨(获取去掉1990年代的样本之后,又符合GARCH的适用性了)。

后续部分

第一章后续部分,为简单波动率的估计。这一部分之前有些许了解,这里不再探讨。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络是一种模拟大脑中神经元之间相互连接工作方式的人工智能技术。它通过学习输入与输出之间的关系来实现分类、预测等任务。 对于mushroom数据集的解决方案,我们可以使用matlab来实现。下面是一个使用神经网络的matlab代码示例: ```matlab % 加载数据 load('mushroom_dataset.mat'); % 数据预处理 inputs = mushroom_dataset(:, 2:end)'; targets = mushroom_dataset(:, 1)'; % 设置神经网络参数 hiddenLayerSize = 10; net = patternnet(hiddenLayerSize); net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; % 训练神经网络 [net, tr] = train(net, inputs, targets); % 对测试集进行预测 outputs = net(inputs(:, tr.testInd)); predictedLabels = round(outputs); % 计算准确率 accuracy = sum(predictedLabels == targets(:, tr.testInd)) / numel(targets(:, tr.testInd)); % 打印准确率 fprintf('准确率:%.2f\n', accuracy * 100); ``` 在代码中,首先加载mushroom数据集。然后对数据进行预处理,将特征值作为输入,将类别值作为目标输出。接下来,设置神经网络的参数,包括隐藏层的大小和数据集的分割比例。然后,通过调用`train`函数训练神经网络。训练完成后,使用测试集进行预测,并计算准确率。最后,将准确率打印出来。 需要注意的是,代码中的mushroom_dataset.mat文件需要提前准备好,其中包含了mushroom数据集的特征和类别信息。 通过以上的matlab代码示例,我们可以实现对mushroom数据集的分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值