R - импорт Quantstrat CSV для внутридневных данных

Я пытаюсь импортировать данные в R впервые для использования в пакете R quantstrat. См. следующее:

fn1 <- "fgbl_formatted_vpoc_prior_week.txt"
> fn1

> dat <- read.table(file=fn1,sep=",",header=T,as.is=T)
> dat
              Timestamp   Open   High    Low   Last Volume
1   2016-09-27 02:00:00 165.50 165.58 165.46 165.47     2001
2   2016-09-27 03:00:00 165.47 165.65 165.46 165.63     1345
3   2016-09-27 04:00:00 165.64 165.92 165.59 165.91     1241
4   2016-09-27 05:00:00 165.91 166.13 165.91 165.97     880
5   2016-09-27 06:00:00 165.98 165.98 165.76 165.78     748

Может ли кто-нибудь показать, как теперь получить это в формате, подходящем для quantstrat, с правильным форматом даты/времени, который, я думаю, является POSIXct. Я изо всех сил пытаюсь найти документацию, показывающую, как импортировать такие данные.


person nipy    schedule 29.11.2016    source источник


Ответы (3)


Вы правы, желая, чтобы время было в формате POSIXct. Quantstrat использует xts объектов, которые вам необходимо создать. Вы не предоставили легко воспроизводимого, поэтому первый бит кода здесь генерирует ваши данные:

library(xts)
data <- "
1   2016-09-27 02:00:00 165.50 165.58 165.46 165.47     2001
2   2016-09-27 03:00:00 165.47 165.65 165.46 165.63     1345
3   2016-09-27 04:00:00 165.64 165.92 165.59 165.91     1241
4   2016-09-27 05:00:00 165.91 166.13 165.91 165.97     880
5   2016-09-27 06:00:00 165.98 165.98 165.76 165.78     748"
dat <- read.table(text = data,
                     col.names = c("num", "date", "time", "Open" ,  "High",    "Low",   "Last", "Volume"))
dat <- cbind("Timestamp" = paste(dat$date, dat$time), dat)
# Make dat look just like your example when loaded in R:
dat[, c("num", "date", "time")] <- NULL

# Now have your object, which would be a data.frame:

dat
# Timestamp   Open   High    Low   Last Volume
# 1 2016-09-27 02:00:00 165.50 165.58 165.46 165.47   2001
# 2 2016-09-27 03:00:00 165.47 165.65 165.46 165.63   1345
# 3 2016-09-27 04:00:00 165.64 165.92 165.59 165.91   1241
# 4 2016-09-27 05:00:00 165.91 166.13 165.91 165.97    880
# 5 2016-09-27 06:00:00 165.98 165.98 165.76 165.78    748

posix_times <- as.POSIXct(dat[, 1])
x_dat <- xts(x = dat[, 2:NCOL(dat)], order.by = posix_times)
> x_dat
# Open   High    Low   Last Volume
# 2016-09-27 02:00:00 165.50 165.58 165.46 165.47   2001
# 2016-09-27 03:00:00 165.47 165.65 165.46 165.63   1345
# 2016-09-27 04:00:00 165.64 165.92 165.59 165.91   1241
# 2016-09-27 05:00:00 165.91 166.13 165.91 165.97    880
# 2016-09-27 06:00:00 165.98 165.98 165.76 165.78    748

> class(x_dat)
#[1] "xts" "zoo"

x_dat это то, что вы можете использовать в quantstrat.

PS:

Вы можете обнаружить, что процесс обучения с quantstrat будет намного быстрее, если вы будете следовать хорошему ресурсу, такому как http://www.r-programming.org/papers или (не бесплатному курсу =( ) quantstrat в datacamp: https://www.datacamp.com/courses/financial-trading-in-r

person FXQuantTrader    schedule 01.12.2016

Нет необходимости конвертировать в POSIXct вообще. Импортируйте файл с read.zoo вместо read.table. Предполагая, что dat - это кадр данных, как в вашем примере

> class(dat)
[1] "data.frame"
> dat
         Timestamp   Open   High    Low   Last Volume
1 2016-09-27 02:00 165.50 165.58 165.46 165.47   2001
2 2016-09-27 03:00 165.47 165.65 165.46 165.63   1345
3 2016-09-27 04:00 165.64 165.92 165.59 165.91   1241
4 2016-09-27 05:00 165.91 166.13 165.91 165.97    880
5 2016-09-27 06:00 165.98 165.98 165.76 165.78    748

все, что нужно, это:

> dat <- as.xts(read.zoo(dat))

проверить class:

> class(dat)
[1] "xts" "zoo"

Итак, чтобы вернуться к вашему текстовому файлу, все, что вам нужно сделать, чтобы импортировать его как «объект xts», это:

dat ‹- as.xts(read.zoo("yourFileName.txt", аргументы, необходимые для вашего файла)

person hvollmeier    schedule 05.12.2016

чувствительны ли там имена столбцов к регистру?

потому что я заметил, что quantmod's chartSeries()

не любит

colnames(my_data) <- c('Open', 'High', 'Low', 'Close', 'Volume', 'Oi')

они должны быть в нижнем регистре, например:

> class(my_data)
[1] "xts" "zoo"
> tail(my_data)
                       open    high     low   close volume      oi
2016-12-30 10:00:00 2233.50 2234.50 2228.00 2229.25  71515  743254
2016-12-30 10:30:00 2229.25 2234.75 2228.75 2233.75  74937  818191
2016-12-30 11:00:00 2233.75 2235.75 2229.25 2235.00 180772  998981
2016-12-30 11:30:00 2234.75 2237.50 2233.75 2234.75 245717 1244735
2016-12-30 12:00:00 2234.50 2235.25 2233.00 2233.75   6565 1251318
2016-12-30 12:30:00 2233.50 2234.00 2233.25 2233.50    686 1252004
person QuanTomatic    schedule 12.04.2017