【问题标题】:Struggling to convert 1min closing prices data to 5min in R努力将 1 分钟收盘价数据转换为 R 中的 5 分钟
【发布时间】:2012-08-25 00:10:42
【问题描述】:

最近问了这个问题,被建议使用'to.minutes5()'函数。但是,这样做时,我收到以下错误:

Error in to.period(x, "minutes", k = 5, name = name, ...) : 
unsupported type

我的原始文本文件具有分隔列的日期和时间:

GBPUSD<- read.table("GBPUSD.txt", sep=',')

head(GBPUSD)

  V1           V2     V3     V4     V5     V6      V7    V8               
1 <TICKER> <DTYYYYMMDD> <TIME> <OPEN> <HIGH>  <LOW> <CLOSE> <VOL> 
2   GBPUSD     20010102 230100 1.5021 1.5021 1.5018  1.5018     4   
3   GBPUSD     20010102 230200 1.5019 1.5019 1.5019  1.5019     4     
4   GBPUSD     20010102 230300 1.5018 1.5019 1.5018  1.5019     4     
5   GBPUSD     20010102 230400 1.5019 1.5019 1.5019  1.5019     4     
6   GBPUSD     20010102 230500 1.5017 1.5018 1.5017  1.5018     4   

所以我采取的第一步是在一个新的“TIME”列中使用 paste() 函数将它们混合到一个列中:

GBPUSD$Time <-paste(GBPUSD[,2],GBPUSD[,3],sep=",") 

之后,我使用新合并的“TIME”(第 9 列)创建了一个 POSIXct 时间戳:

time<- as.POSIXct(GBPUSD[,9], format="%Y%m%d,%H%M%S")

然后我开始使用收盘价和时间创建 xts 时间序列:

gbp<- xts(GBPUSD[7], time)

但是,当我调用 to.minutes5(gbp) 时,出现错误。

如何在不运行循环的情况下将文本文件中的 1 分钟收盘价转换为 5 分钟价格?

另外,我将如何将 1 分钟 OHLC 转换为 5 分钟 OHLC?

更新:

当我尝试 khoxsey 提出的建议时,我收到以下行的错误:

raw_cable <- read.table(header=FALSE, text=data, col.names=cn, colClasses=cl)
"Error in textConnection(text) : invalid 'text' argument"

我想这是因为我首先导入了一个表格数据框并删除了第一行:

data<- read.table("GBPUSD.txt", sep=',')
data <- data[-1,] #deleted the initial header to add at a later step, as suggested

【问题讨论】:

    标签: r xts trading


    【解决方案1】:

    您并没有完全提供所有代码,因此很难准确判断哪里出了问题,但您已经非常接近了。我复制了您的一些数据以获得更多观察结果,并使用您的格式来获取时间字符串。 (顺便说一句,timeR 中的一个函数,因此您可以将变量称为其他名称)。

    第一段代码是可选的,只是一些设置来获取包含代表性数据的数据框,并将您的设置调用到as.POSIXct 以创建我们的索引:

    forex_data <- "GBPUSD 20010102 230000 1.5021 1.5021 1.5018 1.5018 4
    GBPUSD 20010102 230100 1.5021 1.5021 1.5018 1.5018 4
    GBPUSD 20010102 230200 1.5019 1.5019 1.5019 1.5019 4
    GBPUSD 20010102 230300 1.5018 1.5019 1.5018 1.5019 4
    GBPUSD 20010102 230400 1.5019 1.5019 1.5019 1.5019 4
    GBPUSD 20010102 230500 1.5017 1.5018 1.5017 1.5018 4
    GBPUSD 20010102 230600 1.5019 1.5019 1.5019 1.5019 4
    GBPUSD 20010102 230700 1.5018 1.5019 1.5018 1.5019 4
    GBPUSD 20010102 230800 1.5019 1.5019 1.5019 1.5019 4
    GBPUSD 20010102 230900 1.5017 1.5018 1.5017 1.5018 4
    GBPUSD 20010102 231000 1.5017 1.5018 1.5017 1.5018 4"
    
    cn <- c('TICKER','DTYYYYMMDD','TIME','OPEN','HIGH','LOW','CLOSE','Volume')
    cl <- c(rep('character', 3), rep('numeric', 5))
    raw_cable <- read.table(header=FALSE, text=forex_data, col.names=cn, colClasses=cl)
    
    dt_tm <-as.POSIXct(paste(raw_cable[,2], raw_cable[,3],sep=","), format="%Y%m%d,%H%M%S")
    

    现在我们有了一个包含数据的 data.frame 和一个适当的索引向量,我们只使用价格和交易量数据创建一个 xts 对象。在这里,这意味着最后 5 列。

    require(xts)  
    cable <- xts(raw_cable[,4:8], order.by=dt_tm)
    

    最后,使用格式良好的xts 对象,很容易滚动到 5 分钟的周期。请参阅to.period 的文档,了解更多其他可能性。这里要注意的一个关键点是设置indexAt 参数,它允许我们选择使用哪个结束分钟。为了好玩,请尝试文档中的其他可能性。

    to.minutes5(cable, indexAt='startof', name=NULL)
    
                          Open   High    Low  Close Volume
    2001-01-02 23:00:00 1.5021 1.5021 1.5018 1.5019     20
    2001-01-02 23:05:00 1.5017 1.5019 1.5017 1.5018     20
    2001-01-02 23:10:00 1.5017 1.5018 1.5017 1.5018      4
    

    【讨论】:

    • 当我尝试时出现问题:"raw_cable
    • 顺便说一句,data 也是 R 中的一个函数(常用的 df 也是如此)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多