Нужен ли мне временной ряд, матрица, вектор или фрейм данных? - PullRequest
0 голосов
/ 13 июня 2018

Я не понимаю, как работает код ниже.

library(quantmod)
library(PerformanceAnalytics)
library(ggplot2)
library(cowplot)
library(BatchGetSymbols)
library(tidyr)
library(quantmod)
library(xts)
library(TTR)


ticker = 'AAPL'
# Get Data
# set dates
first.date <- Sys.Date() - 360
last.date <- Sys.Date()


out <- BatchGetSymbols(ticker = ticker, 
                       first.date = first.date,
                       last.date = last.date, 
                       cache.folder = file.path(tempdir(), 
                                                'BGS_Cache') ) 
out<-out$df.tickers
out<-out[,c("ref.date","ticker", "price.adjusted")]


##################################################################

# Eliminate Dupes
deduped_data <- unique(out[ , 1:3 ])

prices <- deduped_data$price.adjusted
prices <- as.data.frame(prices)


# Calculate Returns: Daily RoC
stock_ret <- ROC(prices, type = "discrete")


stock_ret <- as.matrix(stock_ret)
stock_ret <- ROC(stock_ret, type = "discrete")



#Output Top 10 Drawdowns By Magnitude
table.Drawdowns(stock_ret, top = 10, digits = 4)

paste("Average Drawdown",sprintf("%.2f %%", AverageDrawdown(stock_ret) * 100))
paste("Max Drawdown", sprintf("%.2f %%", maxDrawdown(stock_ret, geometric = TRUE) * 100))
paste("Drawdown Deviation",sprintf("%.2f %%", DrawdownDeviation(stock_ret) * 100))
paste("Average Length", round(AverageLength(stock_ret), 2))
paste("Average Recovery Time",round(AverageRecovery(stock_ret), 2))

Когда я попадаю в строку ниже, я получаю сообщение об ошибке.

table.Drawdowns(stock_ret, top = 10, digits = 4)

Error in R[, 1, drop = FALSE] : incorrect number of dimensions

Видимо, что-то не так спеременная 'stock_ret'!

Есть идеи, что здесь не так?Код приходит по ссылке ниже.

http://programmingforfinance.com/2017/11/examining-drawdowns-and-the-pain-index-with-r/

1 Ответ

0 голосов
/ 13 июня 2018

Как и предполагалось, вы можете просто преобразовать в объект XTS.Это кажется самым простым способом.Для объекта xts требуется индекс даты.

quantmod уже может иметь оболочку для этого.Если есть, то это будет чище.

Используются опции по умолчанию, потому что вы, очевидно, можете обрабатывать эту часть.

library(quantmod)
library(PerformanceAnalytics)
library(ggplot2)
library(cowplot)
library(BatchGetSymbols)
library(tidyr)
library(quantmod)
library(xts)
library(TTR)
ticker = 'AAPL'
# Get Data
# set dates
first.date <- Sys.Date() - 360
last.date <- Sys.Date()
out <- BatchGetSymbols(ticker = ticker, 
                       first.date = first.date,
                       last.date = last.date, 
                       cache.folder = file.path(tempdir(), 
                                                'BGS_Cache') ) 
tickers <-out$df.tickers
# Create and xts object as suggested by many of the comments
prices.xts <- xts(tickers$ret.adjusted.prices, order.by = tickers$ref.date)
str(prices.xts)
table.Drawdowns(prices.xts)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...