Блог им. egenui
#***************************************************************** # Needed libraries #***************************************************************** library(rusquant) library(ggplot2) library(plyr) library(reshape2) library(grid) #***************************************************************** # Symbols #***************************************************************** assetsTicker = c('SBER','LKOH', 'SNGSP','ROSN','VTBR','GAZP','SNGS','MAGN','MGNT','GMKN','MICEX') #***************************************************************** # Start / End dates #***************************************************************** dateFrom = '2010-01-01' dateTo = Sys.Date() #***************************************************************** # Period vectors #***************************************************************** periodsHours <- c(10,11,12,13,14,15,16,17,18) periodsDays <- c("понедельник",'вторник','среда',"четверг",'пятница') periodsMonths <- c("Январь",'Февраль','Март',"Апрель",'Май','Июнь','Июль','Август','Сентябрь', 'Октябрь','Ноябрь','Декабрь') #***************************************************************** # Load historical data #***************************************************************** getSymbols(assetsTicker, from=dateFrom, to=dateTo, src='Finam', period='hour', auto.assign = T) #***************************************************************** # Hours return #***************************************************************** periodReturns <- list() for (i in 1:length(assetsTicker)) { periodReturns[[i]] <- cbind(OpCl(get(assetsTicker[i])),allReturns(get(assetsTicker[i]))) names(periodReturns[[i]])[1] <-'hourly' } names(periodReturns) <- assetsTicker #***************************************************************** # List by period vectors #***************************************************************** periodsList <- list(periodsHours, periodsDays, periodsMonths ) names(periodsList) <- c('hourly','daily', 'monthly') #***************************************************************** # Mean returns by period #***************************************************************** getMeanReturn <- function(xtsAsset, period, assetaName) { if (period %in% periodsHours) { return (mean(na.omit(xtsAsset[.indexhour(xtsAsset) %in% period, "hourly"]))) } else if (period %in% periodsDays) { return (mean(na.omit(xtsAsset[weekdays(index(xtsAsset)) %in% period, "daily"]))) } else if (period %in% periodsMonths) { return (mean(na.omit(xtsAsset[months(index(xtsAsset)) %in% period, "monthly"]))) } } #***************************************************************** # Create list of matrix returns ordered by period vector #***************************************************************** ReturnMatrixList <- list() for (k in 1:length(periodsList)) { #Матрица доходностей ReturnMatrixList[[k]] <- matrix(nrow = length(assetsTicker), ncol = length(periodsList[[k]])) names(ReturnMatrixList)[k] <- names(periodsList)[k] colnames(ReturnMatrixList[[k]]) <- periodsList[[k]] rownames(ReturnMatrixList[[k]]) <- assetsTicker for (i in 1:length(assetsTicker)) { for (p in 1:length(periodsList[[k]])) { x <- periodReturns[attributes(periodReturns)$names %in% assetsTicker[i]][[1]] ReturnMatrixList[[k]][assetsTicker[i], as.character(periodsList[[k]][p]) ] <- getMeanReturn(x, periodsList[[k]][p],assetsTicker[i]) } } } #***************************************************************** # Plot list of matrix returns ordered by period vector #***************************************************************** pushViewport(viewport(layout = grid.layout(length(ReturnMatrixList), 1))) for (i in 1:length(ReturnMatrixList)) { tmp <- melt(ReturnMatrixList[[i]]) names(tmp) <- c('Asset','Period', 'Return') p <- ggplot(tmp, aes(x=Period, y=Return, fill=factor(Asset))) + geom_bar(stat="identity", position="dodge", colour="black") + scale_fill_brewer(type="qual", palette='RdBu' ) + ggtitle(paste("Assets Return from =", dateFrom, cep='')) print(p, vp = viewport(layout.pos.row = i, layout.pos.col = 1)) }
если да, то через getSymbols.
А тестить два варианта,
или по своей гипотезе писать самому функции, или же воспользоваться готовыми пакетами упрощающими жизнь с анализом финансовых данных и которые позволяют многие вещи упростить. Но вначале нужна своя гипотеза.
quantmod (скачка даннных)
rusquant (скачка рус. данных)
blotter (анализ сделок)
PerformanceAnalytics (анализ гипотез)
FinTS (анализ временных рядов)
по ним много есть информации, примеров,
в том числе пара статей и на русском
руки не доходят найдите падавана — мы его такой работой загрузим. это надо на питоне или R кодить
Вам такое не интересно?
Что за товарищ?
Тут не только тестом грейнджера можно делать,
много чего можно взять из маш. обучения.
В целом интересно, могу попробовать.
Пришлите более подробно данные, принципы что надо и т.д.
а сюда мы редко заглядываем. Вас чатовцы знают, пожалуйста, приходите! https://yadi.sk/i/4LYX65z6s7Bg6