值和百分比的滚动变化
Rolling changes of values and percentage
我正在帮助一个朋友做一些 R 作业,因为 R 显然教得不好 class(因为 class 和补充 material 中涵盖的所有内容都没有帮助)。
我们有两个数据集。一个包含公司股份的每日离散 return 百分比,另一个包含两种货币的每日汇率,比方说美元对瑞士法郎。它看起来像这样:
Date Mon Day Exchangerate
2000 01 01 1.03405
2000 01 02 1.02987
2000 01 03 1.03021
2000 01 04 1.03456
2000 01 05 1.03200
和每日离散 returns:
Date Share1
20000104 -0.03778
20000105 0.02154
20000106 0.01345
20000107 -0.01234
20000108 -0.01789
任务是编写一个使用两个矩阵并从瑞士投资者的角度计算每日 returns 的函数。我们假设初始投资为 1000 美元。
我尝试使用 tidyverse 并使用 dplyr 的滞后函数计算一天与另一天的总变化 return 和百分比变化,如下面提供的代码所示。
library(tidyverse)
myCHFreturn <- function(matrix1, matrix2) {
total = dplyr::right_join(matrix1, matrix2, by = "date") %>%
dplyr::filter(!is.na(Share1)) %>%
dplyr::select(-c(Date, Mon, Day)) %>%
dplyr::mutate(rentShare1_usd = (1+Share1)*1000,
rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1),
rentShare1_chf = rentShare1_usd*Exchangerate,
rentShare1_chfperc =(rentShare1_chf - dplyr::lag(rentShare1_chf))/dplyr::lag(rentShare1_chf),
rentShare1_chfperc = rentShare1_chfperc*100)
}
问题是函数的 rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1)
部分依赖于为初始 1000 美元投资计算的值。因此,我的看法是我们需要根据初始投资对变化进行某种类型的滚动计算。但是,我不知道如何在函数中实现它,因为我只使用滚动方式。我们要根据 Variable Share1 中给出的变化和前一天的投资价值来计算每天的 returns。很感谢任何形式的帮助。
至少要指出解决方案的一部分,单位份额在任何一天的价值是从开始日期到该日期的 (1 + daily_discrete_return) 随时间的累积乘积有关期间。举个例子,使用你的每日离散 returns table:
的扩展版本
df = read.table(text = "Date Share1
20000104 -0.03778
20000105 0.02154
20000106 0.01345
20000107 -0.01234
20000108 -0.01789
20000109 0.02154
20000110 0.01345
20000111 0.02154
20000112 0.02154
20000113 0.01345", header = TRUE, stringsAsFactors = FALSE)
library(dplyr)
Shares = 1000
df1 = mutate(df, ShareValue = cumprod(1+Share1) * Shares)
Date Share1 ShareValue
1 20000104 -0.03778 962.2200
2 20000105 0.02154 982.9462
3 20000106 0.01345 996.1668
4 20000107 -0.01234 983.8741
5 20000108 -0.01789 966.2726
6 20000109 0.02154 987.0862
7 20000110 0.01345 1000.3625
8 20000111 0.02154 1021.9103
9 20000112 0.02154 1043.9222
10 20000113 0.01345 1057.9630
一旦您获得了 table 以及该日期的股票价值,您可以将其加入您的汇率 table 以计算该日期的瑞士货币等值,并扩展它以进行百分比更改等。
我正在帮助一个朋友做一些 R 作业,因为 R 显然教得不好 class(因为 class 和补充 material 中涵盖的所有内容都没有帮助)。
我们有两个数据集。一个包含公司股份的每日离散 return 百分比,另一个包含两种货币的每日汇率,比方说美元对瑞士法郎。它看起来像这样:
Date Mon Day Exchangerate
2000 01 01 1.03405
2000 01 02 1.02987
2000 01 03 1.03021
2000 01 04 1.03456
2000 01 05 1.03200
和每日离散 returns:
Date Share1
20000104 -0.03778
20000105 0.02154
20000106 0.01345
20000107 -0.01234
20000108 -0.01789
任务是编写一个使用两个矩阵并从瑞士投资者的角度计算每日 returns 的函数。我们假设初始投资为 1000 美元。
我尝试使用 tidyverse 并使用 dplyr 的滞后函数计算一天与另一天的总变化 return 和百分比变化,如下面提供的代码所示。
library(tidyverse)
myCHFreturn <- function(matrix1, matrix2) {
total = dplyr::right_join(matrix1, matrix2, by = "date") %>%
dplyr::filter(!is.na(Share1)) %>%
dplyr::select(-c(Date, Mon, Day)) %>%
dplyr::mutate(rentShare1_usd = (1+Share1)*1000,
rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1),
rentShare1_chf = rentShare1_usd*Exchangerate,
rentShare1_chfperc =(rentShare1_chf - dplyr::lag(rentShare1_chf))/dplyr::lag(rentShare1_chf),
rentShare1_chfperc = rentShare1_chfperc*100)
}
问题是函数的 rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1)
部分依赖于为初始 1000 美元投资计算的值。因此,我的看法是我们需要根据初始投资对变化进行某种类型的滚动计算。但是,我不知道如何在函数中实现它,因为我只使用滚动方式。我们要根据 Variable Share1 中给出的变化和前一天的投资价值来计算每天的 returns。很感谢任何形式的帮助。
至少要指出解决方案的一部分,单位份额在任何一天的价值是从开始日期到该日期的 (1 + daily_discrete_return) 随时间的累积乘积有关期间。举个例子,使用你的每日离散 returns table:
的扩展版本df = read.table(text = "Date Share1
20000104 -0.03778
20000105 0.02154
20000106 0.01345
20000107 -0.01234
20000108 -0.01789
20000109 0.02154
20000110 0.01345
20000111 0.02154
20000112 0.02154
20000113 0.01345", header = TRUE, stringsAsFactors = FALSE)
library(dplyr)
Shares = 1000
df1 = mutate(df, ShareValue = cumprod(1+Share1) * Shares)
Date Share1 ShareValue
1 20000104 -0.03778 962.2200
2 20000105 0.02154 982.9462
3 20000106 0.01345 996.1668
4 20000107 -0.01234 983.8741
5 20000108 -0.01789 966.2726
6 20000109 0.02154 987.0862
7 20000110 0.01345 1000.3625
8 20000111 0.02154 1021.9103
9 20000112 0.02154 1043.9222
10 20000113 0.01345 1057.9630
一旦您获得了 table 以及该日期的股票价值,您可以将其加入您的汇率 table 以计算该日期的瑞士货币等值,并扩展它以进行百分比更改等。