【问题标题】:Erorr when calculating periodReturn in RR中计算周期返回时出错
【发布时间】:2021-08-21 09:45:59
【问题描述】:

我有一个 csv。包含每日 ohlc 汇率数据的文件。现在我需要每小时数据,但是当我尝试使用 quantmod 包的 periodReturn 函数时收到错误消息。 这是我所做的:

EURUSD_Min = CSV_EUR


eurusd_minutedata_df = as.data.frame(EURUSD_Min)


colnames(eurusd_minutedata_df)[1] <- "Date"
colnames(eurusd_minutedata_df)[2] <- "Time"
colnames(eurusd_minutedata_df)[3] <- "Bid"
colnames(eurusd_minutedata_df)[4] <- "Ask"
colnames(eurusd_minutedata_df)[5] <- "High"
colnames(eurusd_minutedata_df)[6] <- "Low"
colnames(eurusd_minutedata_df)[7] <- "Close"

eurusd_minutedata_df$Date = as.POSIXct(paste(eurusd_minutedata_df$Date, eurusd_minutedata_df$Time), format="%Y-%m-%d %H:%M:%S")
eurusd_minutedata_df_final <- eurusd_minutedata_df[-2]



  index_min_eurusd <- eurusd_minutedata_df_final$Date
  data_min_eurusd <- data.frame(eurusd_minutedata_df_final[,2:6])
  df.ohlc.min_eurusd_xts <- xts(data_min_eurusd, index_min_eurusd)
  eurusd_min_return <- diff(log(Cl(df.ohlc.min_eurusd_xts)), lag=1)
 
  eurusd_min_return

 2021-07-28 21:16:00  1.690188e-04
 2021-07-28 21:17:00  3.379520e-04
 2021-07-28 21:18:00  0.000000e+00
 2021-07-28 21:19:00 -1.689617e-04

 periodReturn(eurusd_min_return, period = "hourly")

但我得到了错误:

   Error in if (on == "secs" || on == "mins") on <- substr(on, 1L, 3L) : 
   missing value where TRUE/FALSE needed

有谁知道我需要做什么才能让它工作?

原始数据如下所示: # 小标题:2,982 x 7

     `Local Date` `Local Time`    Bid   Ask  High   Low  Open
       <date>       <time>       <dbl> <dbl> <dbl> <dbl> <dbl>
    1 2021-07-30   23:00         1.19  1.19  1.19  1.19  1.19
    2 2021-07-30   22:59         1.19  1.19  1.19  1.19  1.19
    3 2021-07-30   22:58         1.19  1.19  1.19  1.19  1.19
    4 2021-07-30   22:57         1.19  1.19  1.19  1.19  1.19
    5 2021-07-30   22:56         1.19  1.19  1.19  1.19  1.19

【问题讨论】:

  • 亲爱的妮娜,你能提供一些数据样本吗?

标签: r return quantmod


【解决方案1】:

您应该学习检查中间结果。 as.POSIXct 调用的格式规范有秒数,但您的数据没有。因此,您在处理的一开始就获得了 NA。这是我的主张的演示。

 txt <- "2021-07-30 23:00" # my guess at the results of `paste` on your data
 as.POSIXct(txt, format="%Y-%m-%d %H:%M:%S")
#[1] NA

您应该打印出中间结果以找出生成 NA 的位置。 (这可能不是唯一的地方,但它肯定会给你一个 NA,所以你可以尝试适当地改变你的格式规范。)

 as.POSIXct(txt, format="%Y-%m-%d %H:%M")
#[1] "2021-07-30 23:00:00 PDT"

我怀疑您实际上并没有给出一个明确的描述,如果正在处理的数据是因为错误直到您的处理后期才发生。最好提供dput(head(eurusd_minutedata_df)) 的结果作为起点,然后提供所有需要的library 调用以加载所需的包,然后是产生该错误的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多