business-science / tidyquant

Bringing financial analysis to the tidyverse
https://business-science.github.io/tidyquant/
Other
855 stars 175 forks source link

multiple portfolio doesn't seem to work #21

Closed TwoClocks closed 7 years ago

TwoClocks commented 7 years ago

I get this error when I try to create a portfolio w/ different weights --

Warning messages: 1: In check_weights(weights, assets_col, map, x) : The assets in weights does not match the assets in data. 2: Can't join on 'portfolio' x 'stock' because of incompatible types (integer / character)

Here are my weights :

head(w2) Source: local data frame [6 x 3] Groups: portfolio [1]

portfolio stocks weights

1 1 EMHY 0.27727790 2 1 DIVY 0.20706010 3 1 FXY 0.24806711 4 1 PSI 0.02861348 5 1 RSXJ 0.00000000 6 1 EUO 0.04888890 Here is my data : > head(d2) # A tibble: 6 × 3 date stock rtrn 1 2014-12-22 BIZD 0.001358876 2 2014-12-31 BIZD -0.001092245 3 2015-01-02 BIZD 0.010304838 4 2015-01-09 BIZD -0.001115083 5 2015-01-21 BIZD -0.028958860 6 2015-01-23 BIZD 0.009974641 here is the command to join them : > port <- d2 %>% tq_portfolio( + assets_col = stock, + returns_col = rtrn, + weights = w2, + col_rename = FALSE, + wealth.index = TRUE + ) Warning messages: 1: In check_weights(weights, assets_col, map, x) : The assets in weights does not match the assets in data. 2: Can't join on 'portfolio' x 'stock' because of incompatible types (integer / character) It all looks correct to me.... not sure what I did wrong... All the stock names in the weight exist in the data. > packageVersion("tidyquant") [1] ‘0.4.0’
mdancho84 commented 7 years ago

@jonross09 Thanks for submitting. Can you upload your .R file so we can reproduce? It's difficult to tell everything that you are doing. -Matt

mdancho84 commented 7 years ago

Hi @jonross09 I was looking into this again. There's a few issues that I see from the warnings:

First, there appears to be an issue with your weights table. If the assets (stock symbols) exist in the weights table that doesn't existing in the stocks table then you will get an error.

Second, you have a portfolio index column in your weights table, but you don't have a portfolio index column in your stocks (d2) table. This means your weights table is setup for multiple portfolios but your stocks table is setup for single portfolio. Since it only looks like you have one portfolio, you could just drop the portfolio column from your weights table and it should work.

Some background on the "portfolio" column: This index column with key name "portfolio" is used as a key for mapping multiple portfolios. Because of this, the key must be present in both tables and you must also group by portfolio in your stocks table since you are using the multiple portfolio method.

Last, I see that you have col_rename = FALSE. You probably just want to leave out col_rename or set it to col_rename = NULL.