Please include libraries used
On Mon, Feb 2, 2026 at 1:46 PM Andre Luiz Tietbohl Ramos <
[email protected]> wrote:
>
> Dear Ilya,
>
> Thanks for the prompt reply once more! The code I used is below and its
> output is attached (which is in Portuguese).
>
> tickers <- c('UNIP6.SA', 'KLBN4.SA', 'CSAN3.SA', 'BBAS3.SA', 'PETR4.SA', '
> SBSP3.SA')
> tickers.clean <- str_replace_all(tickers,'.SA$', '')
> ## weights
> wts = c(0.4, 0.15, 0.15, 0.05, 0.1, 0.15)
>
> wts_tbl <- tibble(symbol = tickers,
> wts = wts)
> wts_percent <- wts_tbl
> wts_percent$wts <- sapply(wts_percent$wts, function(x) percent(x, accuracy
> = 0.01))
> print(wts_percent)
>
> ## YF download
> price_data <- tq_get(tickers,
> from = start,
> to = end,
> get = 'stock.prices')
>
> ## Daily return for each stock
> ret_data <- price_data %>% group_by(symbol) %>%
> tq_transmute(select = adjusted,
> mutate_fun = periodReturn,
> period = "daily",
> col_rename = "ret",
> relationship = "many-to-many")
>
> ## weights, returns join on a daily basis
> ret_data <- left_join(ret_data, wts_tbl, by = 'symbol', relationship =
> "many-to-many")
>
> ## weighted average
> ret_data <- ret_data %>%
> mutate(wt_return = wts * ret)
>
> ## removal of the .SA suffix from Brazilian stocks via custom function
> del.SA downloaded through tidyquant
> ret_data <- del.SA(ret_data, "tq")
>
> ## total return on a given day is the sum of the prices weight of the
> portfolio
> port_ret <- ret_data %>%
> group_by(date) %>%
> summarise(port_ret = sum(wt_return))
>
> ## Portfolio cumulative return via cumprod()
> port_cumulative_ret <- port_ret %>%
> mutate(cum_ret = cumprod(1 + port_ret))
>
> ## filter for period of interest
> port_cumulative_ret <- port_cumulative_ret[port_cumulative_ret$date >=
> as.Date("2024-06-01") &
>
> port_cumulative_ret$date <= today(),]
>
> posrtfolio.return <-
> port_cumulative_ret %>% ggplot(aes(x = date, y = cum_ret)) +
> theme_gray() +
> theme(plot.background = element_rect(fill = "gray86")) +
> geom_line(color = "blue") +
> theme(axis.text.x = element_text(angle = 50, hjust = 1)) +
> labs(x = 'Data',
> y = 'Retorno Acumulado',
> title = paste0('Retorno Acumulado do Portfolio de
> ',length(tickers.clean), ' ativo(s) em ',
> format(as.Date(end), format="%d/%m/%Y")),
> subtitle = paste0("Ativos: ", toString(tickers.clean), "\nPesos:
> ",
> toString(percent(wts, accuracy = 0.1)))
> ) +
> scale_x_date(date_breaks = '2 weeks',
> date_labels = '%d %b %y') +
> scale_y_continuous(
> breaks = seq(0, 10, 0.05),
> labels = scales::percent_format(accuracy = 1)
> )
>
> Code for saving it to pdf seems quite straight forward and simple thus it
> isn't shown.
> I hope this work for you. If it doesn't let me know for it does for me
> (OSX v11.7, R v4.1).
>
> Regards,
>
> --
> André Luiz Tietbohl Ramos, PhD
>
>
> On Mon, Feb 2, 2026 at 2:43 PM Ilya Kipnis <[email protected]> wrote:
>
>> Andre,
>>
>> I am saying that those of us that aren't *you* cannot run your code
>> because we don't know how you formulated the "stocks" object. Your code is
>> not reproducible to anybody else. Please include a minimum *reproducible*
>> example.
>>
>> -Ilya
>>
>> On Mon, Feb 2, 2026 at 12:41 PM Andre Luiz Tietbohl Ramos <
>> [email protected]> wrote:
>>
>>> Dear Ilya,
>>>
>>> Thanks for the prompt reply! The code from my previous message works
>>> and I uploaded as an example so you could see what my intent is. Your
>>> suggestion will be considered, thank you! Its output is attached (which is
>>> in Portuguese).
>>>
>>> Thanks,
>>>
>>> --
>>> André Luiz Tietbohl Ramos, PhD
>>>
>>>
>>> On Mon, Feb 2, 2026 at 12:56 PM Ilya Kipnis <[email protected]>
>>> wrote:
>>>
>>>> This isn't a reproducible example--we don't have the stocks data frame.
>>>> Also, it is bad practice to use dplyr in the R/Finance stack as it
>>>> overrides multiple functions, such as lag and filter.
>>>>
>>>> On Mon, Feb 2, 2026 at 8:39 AM Andre Luiz Tietbohl Ramos <
>>>> [email protected]> wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> Is it possible to customize the x-axis label? Using ggplot I have the
>>>>> custom x-label described below,
>>>>>
>>>>> stocks %>%
>>>>> ggplot(aes(x = date, y = cum_ret)) +
>>>>> theme_gray() +
>>>>> theme(plot.background = element_rect(fill = "gray86")) +
>>>>> geom_line(color = "blue") +
>>>>> *theme(axis.text.x = element_text(angle = 50, hjust = 1))* +
>>>>> labs(x = 'Data',
>>>>> y = 'Cumulative Return',
>>>>> title = paste0('Portfolio Cumulative Return of ',
>>>>> length(tickers.clean), ' stocks on ',
>>>>> format(as.Date(end), format="%d/%m/%Y")),
>>>>> subtitle = paste0("Ativos: ", toString(tickers.clean),
>>>>> "\nWeights:
>>>>> ",
>>>>> toString(percent(wts, accuracy = 0.1)))
>>>>> ) +
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> * scale_x_date(date_breaks = '2 weeks',
>>>>> date_labels = '%d %b %y') + scale_y_continuous( breaks =
>>>>> seq(0,
>>>>> 10, 0.05), labels = scales::percent_format(accuracy = 1)*
>>>>> )
>>>>>
>>>>> TIA,
>>>>>
>>>>> --
>>>>> Andre Luiz Tietbohl Ramos, PhD
>>>>>
>>>>> [[alternative HTML version deleted]]
>>>>>
>>>>> _______________________________________________
>>>>> [email protected] mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>>> -- Also note that this is not the r-help list where general R
>>>>> questions should go.
>>>>>
>>>>
[[alternative HTML version deleted]]
_______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should
go.