gpt4 book ai didi

r - 使用 xts 标准化股票图表

转载 作者:行者123 更新时间:2023-12-01 14:02:28 25 4
gpt4 key购买 nike

我想用 quantmod 做一个项目并比较股票图表。由于这些图表通常具有不同的绝对值,我想通过除以第一个值来归一化。
加载数据中

getSymbols(Symbols = "^IXIC", verbose = FALSE, warnings = TRUE, src = "yahoo", symbol.lookup = TRUE, auto.assign = getOption('getSymbols.auto.assign',TRUE))

IXIC_test1 <- IXIC/2
效果很好,因为我又得到了一个时间序列
> head(IXIC_test1)
IXIC.Open IXIC.High IXIC.Low IXIC.Close IXIC.Volume IXIC.Adjusted
2007-01-03 1214.860 1227.310 1197.330 1211.580 1217640000 1211.580
2007-01-04 1211.910 1230.255 1206.875 1226.715 1052105000 1226.715
2007-01-05 1222.535 1222.535 1210.295 1217.125 1030180000 1217.125
2007-01-08 1217.625 1222.815 1210.565 1219.100 952810000 1219.100
2007-01-09 1221.630 1224.935 1211.780 1221.915 1072080000 1221.915
2007-01-10 1217.020 1230.670 1213.950 1229.665 1137105000 1229.665
但是,当我尝试使用
IXIC_Norm <- IXIC/first(IXIC)
我只有一行
> head(IXIC_Norm)
IXIC.Open IXIC.High IXIC.Low IXIC.Close IXIC.Volume IXIC.Adjusted
2007-01-03 1 1 1 1 1 1
有人可以告诉我,为什么这行不通?

最佳答案

您必须遍历矩阵 coredata(IXIC) 的行在执行规范化时。如问题所示,您得到的结果是第一行数据自除的结果。根据预期输出,没有后续行除以第一行数据。

试试这个:它将使用 apply()函数循环遍历时间序列对象并执行归一化,然后返回一个矩阵。使用 as.xts() 将矩阵转换回时间序列对象功能。

library('xts')
as.xts(t(apply( IXIC, 1, function(x) x/first(IXIC))))
# IXIC.Open IXIC.High IXIC.Low IXIC.Close IXIC.Volume IXIC.Adjusted
# 2007-01-03 1.0000000 1.0000000 1.000000 1.000000 1.0000000 1.000000
# 2007-01-04 0.9975717 1.0023996 1.007972 1.012492 0.8640526 1.012492
# 2007-01-05 1.0063176 0.9961094 1.010828 1.004577 0.8460465 1.004577
# 2007-01-08 1.0022760 0.9963375 1.011054 1.006207 0.7825055 1.006207
# 2007-01-09 1.0055727 0.9980649 1.012069 1.008530 0.8804573 1.008530
# 2007-01-10 1.0017780 1.0027377 1.013881 1.014927 0.9338598 1.014927

数据:
library('xts')
df1 <- read.table(text='ds IXIC.Open IXIC.High IXIC.Low IXIC.Close IXIC.Volume IXIC.Adjusted
2007-01-03 1214.860 1227.310 1197.330 1211.580 1217640000 1211.580
2007-01-04 1211.910 1230.255 1206.875 1226.715 1052105000 1226.715
2007-01-05 1222.535 1222.535 1210.295 1217.125 1030180000 1217.125
2007-01-08 1217.625 1222.815 1210.565 1219.100 952810000 1219.100
2007-01-09 1221.630 1224.935 1211.780 1221.915 1072080000 1221.915
2007-01-10 1217.020 1230.670 1213.950 1229.665 1137105000 1229.665', header=TRUE)

rownames(df1) <- df1$ds
df1$ds <- NULL
IXIC <- xts(df1, order.by=as.Date(rownames(df1),"%Y-%m-%d"))

关于r - 使用 xts 标准化股票图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com