R语言探索与分析17-股票题目

Value at Risk(VaR)是一种统计技术,用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示,用于估计在给定的置信水平和特定时间范围内,投资组合可能遭受的最大损失。例如,一个1%的一日VaR为$1百万意味着在任何给定的日子里,只有1%的概率投资组合的损失会超过100万美元。

VaR的主要特点和考虑因素包括:

置信水平:这是VaR计算中的一个关键参数,表示损失不会超过VaR估计的概率。常见的置信水平有95%、99%等。

时间范围:VaR估计的另一个关键方面是时间范围,比如一天、一周或一个月。时间范围越长,潜在损失的估计通常越大。

损失的估计:VaR提供了一个损失估计,但并不预测损失会发生的确切时间点。

方法论:计算VaR的方法有多种,包括历史模拟法、方差-协方差法和蒙特卡洛模拟法。每种方法都有其优缺点,适用于不同类型的投资组合。

局限性:虽然VaR是一个有用的风险度量工具,但它也有局限性。它不考虑超过VaR估计值的极端损失,且对于非线性和复杂的金融工具可能不够精确。

VaR在金融领域广泛应用,特别是在风险管理、资产管理和资本要求计算方面。银行、投资公司和其他金融机构使用VaR来监控和管理其暴露在市场、信用和其他风险中的资产组合。尽管它是一个有力的工具,但专业人士和监管机构都认识到,依赖单一风险度量标准是不足够的,需要结合其他风险管理技术和工具。

这里我选取的是googel的股票,使用dailyReturn函数算出它的收益率,前五行如下:

# 计算股票的日度收益率  # 计算对数收益率
returns <- dailyReturn(GOOGL)
returns
# 绘制收益率时序图
plot(returns, main = "Daily Returns of Alphabet (GOOGL) in the Last Year", ylab = "Daily Returns")# 计算收益率的均值、方差和标准差
mean_return <- mean(returns, na.rm = TRUE)
variance <- var(returns, na.rm = TRUE)
std_deviation <- sd(returns, na.rm = TRUE)# 输出均值、方差和标准差
print(paste("Mean of returns:", mean_return))
print(paste("Variance of returns:", variance))
print(paste("Standard deviation of returns:", std_deviation))

           daily.returns

2023-08-15 -0.0100686499

2023-08-16 -0.0083217753

2023-08-17  0.0094794095

2023-08-18 -0.0189347291

2023-08-21  0.0071394947

接下来可视化:

接下来分别使用mean,var,sd函数进行算出结果:

Mean of returns: 0.000487064370016916

Variance of returns: 0.000277345687220339

Standard deviation of returns: 0.0166536989050583

对该股票采用Weibul1分布法估计其180天周期90%置信水平的VaR序列(用前180天历史数据预测未来180天的日度VaR,并画出Va 时序图

# 自定义 Weibull 分布的估计函数
weibull_func <- function(data) {fit <- suppressWarnings(tryCatch(fitdistr(data, densfun = "weibull",start = list(shape = 1, scale = 1),  # 自定义合适的初始参数值method = "BFGS"),  # 自定义拟合方法error = function(e) NULL))return(fit)
}# 进行 Weibull 分布的拟合
fit_weibull <- weibull_func(positive_returns)# 使用拟合的 Weibull 分布计算 VaR
confidence_level <- 0.9
VaR_90 <- qweibull(1 - confidence_level, shape = fit_weibull$estimate[1], scale = fit_weibull$estimate[2])

90% 置信水平的 VaR: 0.0023112336283049

计算所有日期的 VaR并画图

另选一只股票,采用排序法计算其一年期 70%置信度的日度 VaR,若回测时次日跌幅超过 VaR 预测的闯值,则判定为一次“违约’。采用交易量、拆幅(最高价减最低价)和收益率MACDKDJOBVCCI等来预测违约估计 logit 模型,然后评价你的模型效果 (NP、ROC、CAP),并提出些可行改进方案。

这里选取的是APPLE的股票数据,设置API接口获取:

同样也是计算日度收益率,前5行如下:

           daily.returns

2023-08-15  0.0000000000

2023-08-16 -0.0049591434

2023-08-17 -0.0145551339

2023-08-18  0.0028160920

2023-08-21  0.0077368331

计算采用排序法计算其一年期 70%置信度的日度 VaR,若回测时次日跌幅超过 VaR 预测的闯值,则判定为一次“违约’。写成相应的代码:

var_70 <- quantile(returns, 0.3)  # 70%分位数即为VaR

default_event <- ifelse(returns < var_70, 1, 0)

default_event

default_event输出示例如下:

           daily.returns

2023-08-15             0

2023-08-16             0

2023-08-17             1

2023-08-18             0

2023-08-21             0

接下来分别计算各个特征并且最终合并文件:

# 计算日度收益率
returns <- dailyReturn(AAPL$AAPL.Close)
returns
# 计算VaR
var_70 <- quantile(returns, 0.3)  # 70%分位数即为VaR
default_event <- ifelse(returns < var_70, 1, 0)
default_event# 计算交易量
volume <- AAPL$AAPL.Volume
volume
# 计算拆幅
range <- AAPL$AAPL.High - AAPL$AAPL.Low
range
# 计算收益率
returns <- dailyReturn(AAPL$AAPL.Close)
returns
# 计算技术指标
# 计算MACD指标
macd_data <- MACD(AAPL$AAPL.Close)
macd_data
# 计算KDJ指标
Hi <- AAPL$AAPL.High
Lo <- AAPL$AAPL.Low
Cl <- AAPL$AAPL.Close
# 假设N=9天
N <- 9# 计算RSV值
RSV <- (Cl - rollapplyr(Lo, width = N, min, align = "right")) / (rollapplyr(Hi, width = N, max, align = "right") - rollapplyr(Lo, width = N, min, align = "right")) * 100# 计算K值、D值和J值
K <- D <- J <- rep(NA, length(Cl))
for (i in N:length(Cl)) {if (i == N) {K[i] <- 50  # 初始K值为50D[i] <- 50  # 初始D值为50} else {K[i] <- (RSV[i] + (N - 1) * K[i - 1]) / ND[i] <- (K[i] + (N - 1) * D[i - 1]) / N}J[i] <- 3 * K[i] - 2 * D[i]
}# 将计算结果添加到数据框中
KDJ_data <- data.frame(Date = index(AAPL), K = K, D = D, J = J)
KDJ_data

最终数据合并如下:

macd

signal

K

D

J

OBV

2023-08-15

0.502

0.607

56.791

56.537

57.299

43622593

2023-08-16

0.502

0.607

56.791

56.537

57.299

-3342264

2023-08-17

0.502

0.607

56.791

56.537

57.299

-69405146

2023-08-18

0.502

0.607

56.791

56.537

57.299

-8232996

2023-08-21

0.502

0.607

56.791

56.537

57.299

38078883

2023-08-22

0.502

0.607

56.791

56.537

57.299

80163128

CCI

Returns

macd.1

macd_data

Volume

default_event

2023-08-15

15.587

0.000

0.502

0.607

43622593

0

2023-08-16

15.587

-0.005

0.502

0.607

46964857

0

2023-08-17

15.587

-0.015

0.502

0.607

66062882

1

2023-08-18

15.587

0.003

0.502

0.607

61172150

0

2023-08-21

15.587

0.008

0.502

0.607

46311879

0

2023-08-22

15.587

0.008

0.502

0.607

42084245

0

# 建立逻辑回归模型

# 建立 Logit 模型
model <- glm(default_event ~ ., data = train, family = binomial)
model
# 在测试集上进行预测
predicted <- predict(model, newdata = test, type = "response")
predicted

 

理想情况下,ROC 曲线会向左上角弯曲,靠近左上角的(0,1)点,这表明模型具有很高的真正例率和很低的假正例率。在这张图中,曲线开始时沿着 y 轴急剧上升,表明在低假正例率下模型能够实现相对较高的真正例率。总体而言,这个 ROC 曲线表明模型在某些阈值设置下对正类的预测有一定的准确性。

Area under the curve: 0.9074

曲线下面积(AUC)为 0.9074 表示模型具有很高的区分能力。

# 绘制 CAP 曲线
cap_curve <- function(actual, predicted) {total <- length(actual)num_positive <- sum(actual == 1)# 确保排序后的实际值和预测值长度一致actual_sorted <- actual[order(predicted, decreasing = TRUE)]# 计算累积正例的比例cum_positive <- cumsum(actual_sorted == 1) / num_positive# 生成 x 和 y 值x_values <- c(0, (1:total) / total)y_values <- c(0, cum_positive)# 确保 x_values 和 y_values 长度一致if (length(x_values) != length(y_values)) {stop("Lengths of x_values and y_values are not equal.")}# 绘制 CAP 曲线plot(x_values, y_values, type = "l", col = "red", xlab = "Population", ylab = "Positive", main = "CAP Curve")abline(0, 1, col = "blue") # 随机预测线lines(c(0, sum(actual == 1) / total, 1), c(0, 1, 1), col = "green") # 理想曲线
}# 调用函数绘制 CAP 曲线
cap_curve(test_data$default_event, predictions)

基于这些指标,以下是一些改进模型性能的策略:

数据重新采样:如果数据集不平衡,即违约和非违约的案例数量有很大差异,可以尝试过采样少数类别或欠采样多数类别。也可以使用合成数据生成技术,如 SMOTE,来合成新的正例。

特征工程:检查是否有可能从现有数据中创建更有信息量的特征。评估并可能移除对预测不具有统计显著性的特征。使用特征选择技术来识别和保留最重要的特征。

模型调整:调整模型超参数,使用网格搜索或随机搜索确定最佳参数。尝试不同的模型算法,比如随机森林、支持向量机或梯度提升机,并与当前的逻辑回归模型比较。

阈值调整:改变分类的决策阈值,可能会提高正类别的预测准确性。

使用成本敏感学习,并为错误分类的类别分配不同的权重。

模型集成:使用集成方法如 Bagging 或 Boosting,这些方法可以提高模型的稳定性和性能。

考虑堆叠不同的模型来利用各自的优势。

评估指标选择:依据业务目标,选择更合适的评估指标,例如利润曲线,以确保模型优化方向与业务目标一致。

题目和代码和数据

创作不易,希望大家多多点赞收藏和评论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV的小部件最基本范例

OpenCV也有与PYQT类似的小部件&#xff0c;例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法&#xff0c;也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…

(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构 正常的小项目就是所有的功能集成在一个模块中&#xff0c;这样代码之间不仅非常耦合&#xff0c;而且修改处理的时候也非常的麻烦&#xff0c;应对高并发时也不好处理&#xff0c;所以 我们可以使用微服务架构&#xff0c;对项目进行模块之间的拆分&#xff0c;每一…

前端传参数后端变量类型能够接受到List却无法接收到值

问题描述 今天写了个接口&#xff0c;下图所示 ReqVO里是这样的&#xff1a; 然后前端去请求&#xff0c;从请求结果中看发现这里值是在的&#xff08;有经验的可能就看出来了otherInfo.id: 这样以参数后端是接收不到的&#xff0c;但是当时没发现&#xff09; 传进来后端…

GAT1399协议分析(8)--批量图像查询

一、请求消息定义 视频图像包含视频片段、 图像、 文件、 人员、 人脸、 机动车、 非机动车、 物品、 场景和视频案事件、 视频图像标签等对象 在消息体中,可以包含其中一种类,加上Data字段即可。 ImageInfo对象 二、请求消息实例 wireshark 抓包实例 请求: 文本化: /V…

制造执行MES系统在光伏行业的应用

全球对可再生能源的需求不断增长&#xff0c;光伏能源作为一种清洁、可持续的能源形式&#xff0c;已经在广泛应用中受到了广泛关注。为满足工业领域的光伏能源需求&#xff0c;光伏制造执行系统(MES)作为一种集成化的技术解决方案&#xff0c;提供了更高效、更可靠的解决方案。…

WPS的JSA算国产编程语言,IDE,脚本工具吗?javascript代替VBA

现在wps用javascript代替VBA&#xff0c;应该算很成功了吧。 如果可以独立出来变成一个脚本语言&#xff0c;简单的IDE(本身也有类似VBA&#xff0c;不要寄宿在WPS里面运行&#xff0c;这样就可以变成VBS一样执行脚本了&#xff0c;用来开发按键精灵,LUA一样的脚本很不错 以下…

Activity->Activity中动态添加Fragment->Fragment回退栈BackStack

Fragment回退栈 Fragment回退栈用于管理Fragment的导航历史(添加、删除、替换)。每个Activity都有一个包含其所有Fragment的FragmentManager&#xff0c;调用其addToBackStack方法时&#xff0c;这个事务就会被添加到FragmentManager的回退栈中当用户按下返回键时&#xff0c;…

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机&#xff0c;每天晚上21点开始做rman完全备份&#xff0c;大约第2天上午9点多完成备份&#xff0c;rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份&#xff0c;6月2日上午10点15分完成备份&#xff0c;并生成了一个控制文件备份 c-4063271871-2024…

前端图片在切换暗黑模式时太亮该怎么办?

通过css中的filter属性来实现&#xff0c;进行图片的色系反转、亮度、对比度调整等 1、invert 反转输入图像&#xff0c;值为 100% 则图像完全反转&#xff0c;值为 0% 则图像无变化 filter: invert(1); 2、blur 给元素应用高斯模糊效果。 filter: blur(5px); 3、brightnes…

如何解决网络问题?

组织和 IT 管理员尽其所能完善他们的网络&#xff0c;但是&#xff0c;不同程度的网络问题仍然可能出现&#xff0c;这些网络问题需要立即响应和解决&#xff0c;如果这些问题在不合理的时间内得不到解决&#xff0c;网络和组织的损害可能会付出高昂的代价。这就是为什么 IT 管…

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务&#xff0c;使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…

《大道平渊》· 玖 —— 把高深的道理讲的通俗,这是一门艺术。

《平渊》 玖 "化繁为简, 点石成金。" 把高深的道理讲得通俗&#xff0c;这是一门艺术&#xff01; 讲述者能够站在群众的角度&#xff0c;用尽可能简单通俗的语言来解释复杂的概念。 讲述者需要对概念有深刻的理解&#xff0c;还要有灵活的表达能力。 群众愿意接受…

从当当网批量获取图书信息

爬取当当网图书数据并保存到本地&#xff0c;使用request、lxml的etree模块、pandas保存数据为excel到本地。 爬取网页的url为&#xff1a; http://search.dangdang.com/?key{}&actinput&page_index{} 其中key为搜索关键字&#xff0c;page_index为页码。 爬取的数据…

15- Redis 中的 整数集合 数据结构

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不大时&#xff0c;就会使用整数集合这个数据结构作为底层实现。 1. 整数集合结构设计 整数集合本质上是一块连续内存空间&#xff0c;它的结构定义如下&#xff1a; typedef s…

集成学习笔记

集成学习 简介 决策树 GBDT 拟合残差 一般 GBDT XGBOOST 弓 1 能表达样本落入的子节点&#xff0c;但是不能把表示结构 2 3.正则项 – 惩罚 防止过拟合&#xff0c;比如一个值总共有10颗树都是由同一颗树决定的&#xff0c;过拟合 5 找到一种方式不依赖于损失函数 …

python的优势有哪些?

python的优点很多&#xff0c;下面简单地列举一些&#xff1a; 简单 Python的语法非常优雅&#xff0c;甚至没有像其他语言的大括号&#xff0c;分号等特殊符号&#xff0c;代表了一种极简主义的设计思想。阅读Python程序像是在读英语。 易学 Python入手非常快&#xff0c;学习…

Linux——内存管理代码分析

虚空间管理 页框和页的关系 页框 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框&#xff0c;也叫页帧&#xff0c;即物理页面&#xff0c;是linux划分内存空间的结果。 每个页框都有一个页框号&#xff0c;即内存块号、物理块号。 页 将用户…

完整指南:远程管理 Linux 服务器的 Xshell6 和 Xftp6 使用方法(Xshell无法启动:要继续使用此程序........,的解决方法)

&#x1f600;前言 在当今软件开发领域&#xff0c;远程管理 Linux 服务器已成为日常工作的重要组成部分。随着团队成员分布在不同的地理位置&#xff0c;远程登录工具的使用变得至关重要&#xff0c;它们为开发人员提供了访问和管理服务器的便捷方式。本文将介绍两款功能强大的…

Linux高级进阶-ssh配置

Ubuntu-system 允许使用root远程登陆 apt install ssh -y在/etc/ssh/sshd_config 文件修改PermitRootLogin yes systemctl restart ssh远程连接软件用户名为root