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

news2024/10/7 14:24:13

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值为50
    D[i] <- 50  # 初始D值为50
  } else {
    K[i] <- (RSV[i] + (N - 1) * K[i - 1]) / N
    D[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.coloradmin.cn/o/1795892.html

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

相关文章

Spring异步任务@Async的默认线程池执行器是如何初始化的

Spring异步任务Async的默认线程池执行器&#xff0c;是从哪里来&#xff1f;是如何初始化的&#xff1f; 结论先行 异步任务Async的默认线程池执行器是通过TaskExecutionAutoConfiguration#applicationTaskExecutor自动注入的。 异步任务的线程池执行器是如何初始化的&#…

C语言,排序

前言 排序&#xff0c;可以说是数据结构中必不可缺的一环。我们创造数据存储它&#xff0c;要想知道数据之间的联系&#xff0c;比较是必不可少的。不然&#xff0c;费劲心思得来的数据若是不能有更多的意义&#xff0c;那么拿到了又有什么用&#xff1f; 排序是计算机内经常进…

Meta Llama 3 RMSNorm(Root Mean Square Layer Normalization)

Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09; flyfish 目录 Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09;先看LayerNorm和BatchNorm举个例子计算 LayerNormRMSNorm 的整个计算过程实际代码实现结…

webpack-性能优化-提取css

CDN 分发网络 Content Delivery Network 或 Content Distribution Network 的缩写 一般把静态资源或第三方资源放到CDN上。 可以在 output的publicPath配置cdn的地址&#xff0c;打包后所有的脚本的前缀都变为这个cdn地址了,一般不会这样使用 output: {filename: "[name…

Mysql学习(三)——SQL通用语法之DML

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DML添加数据修改数据删除数据 总结 DML DML用来对数据库中表的数据记录进行增删改操作。 添加数据 -- 给指定字段添加数据 insert into 表名(字段1&#xff0c;字…

20240603每日通信--------springboot使用netty-socketio集成即时通信WebSocket

简单效果图 群聊&#xff0c;私聊&#xff0c;广播都可以支持。 基础概念&#xff1a; springbootnetty-socketioWebSocket POM文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/…

英伟达市值超越苹果;ChatGPT、Perplexity、Claude 同时大崩溃丨 RTE 开发者日报 Vol.220

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

大数据的数据采集

大数据采集是指从各种来源收集大量数据的过程&#xff0c;这些数据通常是结构化或非结构化的&#xff0c;并且可能来自不同的平台、设备或应用程序。大数据采集是大数据分析和处理的第一步&#xff0c;对于企业决策、市场分析、产品改进等方面具有重要意义。以下是大数据采集的…

关于python包导入问题的重思考

将顶层目录直接设置为一个包 像这样&#xff0c;每一个文件从顶层包开始导入 这样可以解决我的问题&#xff0c;但是要注意的时&#xff0c;要避免使用出现上下级出现同名包的情况&#xff0c;比如&#xff1a; AutoServer--AutoServer--__init__.py--__init__.py这种情况下…

MongoDB CRUD操作:地理位置查询

MongoDB CRUD操作&#xff1a;地理位置查询 文章目录 MongoDB CRUD操作&#xff1a;地理位置查询地理空间数据GeoJSON对象传统坐标对通过数组指定&#xff08;首选&#xff09;通过嵌入文档指定 地理空间索引2dsphere2d 地理空间查询地理空间查询运算符地理空间聚合阶段 地理空…

Kaggle——Deep Learning(使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络)

1.单个神经元 创建一个具有1个线性单元的网络 #线性单元 from tensorflow import keras from tensorflow.keras import layers #创建一个具有1个线性单元的网络 modelkeras.Sequential([layers.Dense(units1,input_shape[3]) ]) 2.深度神经网络 构建序列模型 #构建序列模型 …

【vue3|第6期】如何正确地更新和替换响应式对象reactive

日期&#xff1a;2024年6月5日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

【Linux取经路】守护进程

文章目录 一、前台进程和后台进程二、Linux 的进程间关系三、setsid——将当前进程设置为守护进程四、daemon——设置为守护进程五、结语 一、前台进程和后台进程 Linux 中每一次用户登录都是一个 session&#xff0c;一个 session 中只能有一个前台进程在运行&#xff0c;键盘…

AppInventor2有没有删除后的撤销功能?

问&#xff1a;不小心删除了组件&#xff0c;能撤回吗&#xff1f; 答&#xff1a;界面&#xff08;组件&#xff09;设计界面&#xff0c;没有撤销功能。代码&#xff08;逻辑&#xff09;设计视图&#xff0c;可以使用 CtrlZ 撤销&#xff0c;CtrlY 反撤销。 界面设计没有撤…

搜索与图论:树的重心

搜索与图论&#xff1a;树的重心 题目描述参考代码 题目描述 输入样例 9 1 2 1 7 1 4 2 8 2 5 4 3 3 9 4 6输出样例 4参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010, M N * 2;int n, m…

JavaWeb_SpringBootWeb案例

环境搭建&#xff1a; 开发规范 接口风格-Restful&#xff1a; 统一响应结果-Result&#xff1a; 开发流程&#xff1a; 第一步应该根据需求定义表结构和定义接口文档 注意&#xff1a; 本文代码从上往下一直添加功能&#xff0c;后面的模块下的代码包括前面的模块&#xff0c…

新能源管理系统主要包括哪些方面的功能?

随着全球对可持续发展和环境保护的日益重视&#xff0c;新能源管理系统已成为现代能源领域的核心组成部分。这一系统不仅涉及对新能源的收集、存储和管理&#xff0c;还包括对整个能源网络进行高效、智能的监控和控制。以下是新能源管理系统主要包含的几方面功能&#xff1a; 一…

ESP32 Error creating RestrictedPinnedToCore

随缘记&#xff0c;刚遇到&#xff0c;等以后就可能不想来写笔记了。 目前要使用到音频数据&#xff0c;所以去用ESP-ADF&#xff0c;但在使用例程上出现了这个API有问题&#xff0c;要去打补丁。 但是我打补丁的时候git bash里显示not apply&#xff0c;不能打上。 网上看到…

谷歌账号的注册到使用GitHub

一、浏览器扩展 浏览器扩展谷歌学术 二、注册谷歌邮箱 https://support.google.com/accounts/answer/27441?hlzh-hans 1.打开无痕模式&#xff08;ctrlshiftn&#xff09; 2.输入网址 3.选择个人账号 4.填写信息&#xff08;随便填就行&#xff09; &#xff08;以上步骤有时…

FTP

文章目录 概述主动模式和被动模式的工作过程注意事项 概述 文件传输协议 FTP&#xff08;File Transfer Protocol&#xff09;在 TCP/IP 协议族中属于应用层协议&#xff0c;是文件传输标准。主要功能是向用户提供本地和远程主机之间的文件传输&#xff0c;尤其在进行版本升级…