Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(QuantTools)
- # Функция для рассчета портфеля
- calc_simple_portfolio = function( assets, weights, full = F ){
- setorder(assets, date)
- # start and end date of assets
- start_date = max(assets[, date[1] , by = symbol]$V1)
- end_date = min(assets[, date[.N], by = symbol]$V1)
- assets = assets[date %bw% c(start_date, end_date)]
- assets.matrix = dcast(assets, date ~ symbol, value.var = "return", mean, fill = 0)
- assets.matrix = assets.matrix[, .SD * weights, date]
- assets.matrix[, return := rowSums(.SD[,-1])]
- if(full)
- assets.matrix[]
- else
- assets.matrix[, .(date, return)]
- }
- # Названия бумаг
- symbols = sort(c( "MAGN", "GMKN", "TATN"))
- # Собираем данные с финама
- candles = lapply( symbols, function( s ) get_finam_data( s, from = '2007-01-01', to = '2007-12-31')[, .( date, close, symbol = s ) ] )
- # Объединяем данные в одну таблицу
- candles = rbindlist( candles )
- # Считаем доходности
- candles[, return := close / shift( close, fill = close[1] ) - 1, by = symbol ]
- # Считаем портфель
- portfolio = calc_simple_portfolio(candles, c( 0.33, 0.33, 0.33 ) )
- # Рисуем график
- plot_dts(portfolio[,.(date, pnl = cumprod(1+return))])
- dt = fread("
- from to assets
- 2007-01-01 2007-12-31 MAGN,GMKN,TATN
- 2008-01-01 2008-12-31 MAGN,GMKN
- ")
- dt = dt[,{
- symbols = unlist(strsplit(assets, ","))
- n_symb = length(symbols)
- candles = lapply( symbols, function( s ) get_finam_data( s, from = from, to = to)[, .( date, close, symbol = s ) ] )
- candles = rbindlist( candles )
- # Считаем доходности
- candles[, return := close / shift( close, fill = close[1] ) - 1, by = symbol ]
- # Считаем портфель
- calc_simple_portfolio(candles, rep(1/n_symb, n_symb) )
- }, by = from]
- plot_dts(dt[,.(date, pnl = cumprod(1+return))])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement