iqoption

R. Доходности активов по периодам


Продолжаю писать для себя библиотеку на R для количественного анализа рыночных данных, недавно переделал функцию для просмотра средней статистической доходностй активов по периодам час/день/месяц. Некоторые вещи вот по ходу публикую, может кому оно и пригодиться.

Собственно на диаграме  средня доходность по периоду (час/день/месяц) за период с 2010 года по сегодняшний день. Качество изображения плохое, потому что нельзя вставлять картинки высокого разрешения.

R. Доходности активов по периодам

Что эта информация может дать? К примеру в самом тривиальном виде мы видим, что у MICEX хороший час это 18 и хороший день это пятница, сколько бы мы заработали, если бы покупали 18 час пятницы?

R. Доходности активов по периодам

#*****************************************************************
# 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))  
}