R/MyCota.R

`%>%` <- magrittr::`%>%`

source("R/MyFunctions.R")

# ------------- Lê e orzaniza a planilha de transações ---------------------
myStocks <- dadosBastter("Transações")

myStocks$yahoo <- paste0(myStocks$ticker,".SA")
myStocks$preco <- round(myStocks$valor/myStocks$quantidade, 2)
#---------------------------------------------------------------------------

#------------------ Filtrando os dados da classe escolhida -----------------
myAssets <- myStocks[myStocks$classe == "Ações",]
myAssets <- myAssets[order(myAssets$data),]

save(myAssets, file = "data/myAssests2020.rda")
#---------------------------------------------------------------------------
myProventos <- dadosBastter("Proventos")
myProventos <- myProventos[myProventos$classe== "Ações",]

# --- Separa os códigos transacionados na classe escolhida -----------------
myTickers <- myAssets$yahoo%>%
  unique()
myTickers <- myTickers[order(myTickers)]
#---------------------------------------------------------------------------

# ------------------------ Organizando o Caixa -----------------------------
caixaCompras <- caixa(myAssets)
caixaProventos <- caixa(myProventos)

myCaixa <- merge(caixaCompras, caixaProventos, join = "outer", fill = 0)

myCaixa$proventos <- myCaixa$resgates.1
myCaixa <- myCaixa[,c(1,2,5)]
#----------------------------------------------------------------------------
#----------- Criando um journal com as transações ---------------------------
myJournal <- PMwR::journal(amount=myAssets$quantidade,
               price = myAssets$preco,
               instrument = myAssets$ticker,
               timestamp = myAssets$data,
               account = myAssets$classe
               )

tapply(myJournal,
       INDEX = format(myJournal$timestamp, "%Y-%m"),
       FUN = function(x) sum(abs(x$amount)))
#----------------------------------------------------------------------------

#---------------- Baixar os preços dos ativos -------------------------------
getData(myTickers, min(zoo::index(myCaixa)))
#----------------------------------------------------------------------------

#-------------- lendo o arquivo yahoo_data gerado pela funcao getData
load("data/yahooData.Rdata")
#----------------------------------------------------------------------------

# ---------------------- Separando os preços de abertura --------------------
myPricesClose <- pricesClose(myTickers, yahooData)
#----------------------------------------------------------------------------

load("data/myEventos.rda")
myPricesClose <- myBoni(myPricesClose, myEventos)

#-------------- Extraindo a posição diária ----------------------------------

myPosition <- as.data.frame(PMwR::position(myJournal, when = seq(from = min(zoo::index(myPricesClose)),
                       to   = lubridate::today(),
                       by   = "1 day"), drop.zero = FALSE))%>%
  xts::xts(., order.by = as.Date(rownames(.)))
#----------------------------------------------------------------------------

#---------------- Reindexando com os preços de abertura ---------------------
myPosition <- myPosition[zoo::index(myPricesClose)]
#----------------------------------------------------------------------------
myPos <- myPosition[max(zoo::index(myPosition))]
save(myPos, file = "data/myPosition.rda")


#------------- Caculoando o valor do portfolio ------------------------------
myPortfolio <- zoo::coredata(myPricesClose)*myPosition
myPortfolio$total <- rowSums(myPortfolio,na.rm=TRUE)
myPortfolio <- myPortfolio[myPortfolio$total != 0,]
saveRDS(myPortfolio, file = "data/myPortfolio.rds")
#----------------------------------------------------------------------------


#---------------- Organizando as cotas --------------------------------------------------------
aux <- merge(myPortfolio$total, myCaixa,  join = "outer", fill = 0)#%>%
 # replace(., is.na(.), 0)

myCota <- cota(aux)
#----------------------------------------------------------------------------

#---------------------- Benchmark (IBOV) -----------------------------------
quantmod::getSymbols("^BVSP",
  src = "yahoo",
  from =   min(zoo::index(myCota)),
  to =  lubridate::today()
  )

ibov <- BVSP[,6]
ibov <- ibov/as.numeric(ibov[1,1])
colnames(ibov) <- "IBOV"

myCota <- merge(myCota,ibov, join = "inner")%>%
  zoo::na.locf()

myCota$rIBOV <-  PMwR::returns(myCota$IBOV)
myCota$rIBOVPerc <-  1+ myCota$rIBOV
myCota$diff <- (1+myCota$varPerc)/(1+myCota$rIBOV)-1

myCota[1,c(11:13)] <- 0

saveRDS(myCota, file = "data/myCota.rds")
maxlemes/MyPortfolio documentation built on Jan. 7, 2021, 11:47 p.m.