Продолжаю писать для себя библиотеку на R для количественного анализа рыночных данных, недавно переделал функцию для просмотра средней статистической доходностй активов по периодам час/день/месяц. Некоторые вещи вот по ходу публикую, может кому оно и пригодиться.
Собственно на диаграме средня доходность по периоду (час/день/месяц) за период с 2010 года по сегодняшний день. Качество изображения плохое, потому что нельзя вставлять картинки высокого разрешения.
Что эта информация может дать? К примеру в самом тривиальном виде мы видим, что у MICEX хороший час это 18 и хороший день это пятница, сколько бы мы заработали, если бы покупали 18 час пятницы?
#*****************************************************************
# 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