示例#1
0
    def d_returns(self, is_portfolio: bool=True, col_name: str='Retornos') -> pd.DataFrame:
        """Retorna os retornos diários do portfólio, se
        is_portfolio=True, ou dos ativos que o compõem, se
        is_postfolio=False.

        Args:
            is_portfolio (bool, optional): refere-se aos retornos
            do portfólio ou dos ativos que o compõem. Padrão: True.
            col_name (str, optional): nome da coluna de retornos. Padrão: 'Retornos'.

        Returns:
            pd.DataFrame
        """
        if is_portfolio:
            ret = (qt.returns(self.prices) * self.weights).sum(axis=1).to_frame()
            ret.rename(columns={0: col_name}, inplace=True)
            return ret.dropna()
        return qt.returns(self.prices).dropna()
示例#2
0
    def total_returns(self, period: str = 'a') -> pd.DataFrame:
        """Retorna a variação total do período,
        (preço final - preço inicial) / preço final.

        Args:
            period (str, optional): refere-se à periodização
            dos retornos ('m' ou 'a'). Padrão: 'a'.

        Returns:
            pd.DataFrame
        """
        return qt.returns(self.prices, which='total', period=period).dropna()
示例#3
0
    def total_returns(self, scaled: bool = True) -> pd.DataFrame:
        """Retorna a variação total do período,
        (preço final - preço inicial) / preço final,
        se scaled=False; e retorna a variação anualizada se
        scaled=True.

        Args:
            scaled (bool, optional): refere-se à anualização
            dos retornos. Padrão: True.

        Returns:
            pd.DataFrame
        """
        return qt.returns(self.prices, which='total', scaled=scaled).dropna()
示例#4
0
    def m_returns(self, is_portfolio: bool=True) -> pd.DataFrame:
        d_rets = self.d_returns(is_portfolio=is_portfolio)

        if is_portfolio:
            # dataframe com multindex
            m_rets = d_rets.iloc[:, 0].groupby(
                [d_rets.index.year, d_rets.index.month]
            ).apply(lambda r: (1 + r).prod() - 1).to_frame()

            # deixando o index como Y-m, em datetime
            m_rets.index = map(
                lambda t: dt(t[0], t[1], 1).strftime('%Y-%m'), m_rets.index
            )
            return m_rets
        return d_rets.aggregate(lambda r: qt.returns(r, 'monthly'))