コード例 #1
0
def calcula_custodia(df, data=None):

    custodia = []

    if data:
        df = df.loc[df['data'] <= data, :]

    precos_medios_de_compra = calcula_precos_medio_de_compra(df, data)

    for ticker in df['ticker'].unique():
        qtd_em_custodia = df.loc[df['ticker'] == ticker]['qtd_ajustada'].sum()
        preco_atual = busca_preco_atual(ticker)
        valor = preco_atual * qtd_em_custodia
        preco_medio_de_compra = precos_medios_de_compra[ticker]['valor']
        data_primeira_compra = precos_medios_de_compra[ticker][
            'data_primeira_compra']
        valorizacao = preco_atual / preco_medio_de_compra * 100.0 - 100.0
        valorizacao = "{0:.2f}".format(valorizacao)

        custodia.append({
            'ticker': ticker,
            'tipo': tipo_ticker(ticker).name,
            'qtd': int(qtd_em_custodia),
            'preco_medio_compra': preco_medio_de_compra,
            'valor': valor,
            'preco_atual': preco_atual,
            'valorizacao': valorizacao,
            'data_primeira_compra': data_primeira_compra
        })

    df_custodia = pd.DataFrame(custodia)
    df_custodia = df_custodia.sort_values(by=['valor'], ascending=False)

    return df_custodia
コード例 #2
0
def calcula_custodia(df, data=None):

    custodia = []

    if data:
        df = df.loc[df['data'] <= data, :]

    precos_medios_de_compra = calcula_precos_medio_de_compra(df, data)

    for ticker in df['ticker'].unique():
        try:
            qtd_em_custodia = df.loc[df['ticker'] ==
                                     ticker]['qtd_ajustada'].sum()
            preco_atual = float('nan')
            try:
                preco_atual = busca_preco_atual(ticker)
            except:
                pass
            valor = preco_atual * qtd_em_custodia
            preco_medio_de_compra = precos_medios_de_compra[ticker]['valor']
            data_primeira_compra = precos_medios_de_compra[ticker][
                'data_primeira_compra']

            if preco_medio_de_compra <= 0.0001:
                valorizacao = 'NA'  # ex: direitos de compra com custo zero
            else:
                valorizacao = preco_atual / preco_medio_de_compra * 100.0 - 100.0
                valorizacao = "{0:.2f}".format(valorizacao)

            custodia.append({
                'ticker': ticker,
                'tipo': tipo_ticker(ticker).name,
                'qtd': int(qtd_em_custodia),
                'preco_medio_compra': preco_medio_de_compra,
                'valor': valor,
                'preco_atual': preco_atual,
                'valorizacao': valorizacao,
                'data_primeira_compra': data_primeira_compra
            })
        except Exception as ex:
            raise Exception(
                'Erro ao calcular custodia do ticker {}'.format(ticker), ex)

    df_custodia = pd.DataFrame(custodia)
    df_custodia = df_custodia.sort_values(by=['valor'], ascending=False)

    return df_custodia
コード例 #3
0
def calcula_custodia(df, data=None, orderBy=['valor', 'ticker']):

    custodia = []

    if data:
        df = df.loc[df['data'] <= data, :]

    precos_medios_de_compra = calcula_precos_medio_de_compra(df, data)

    incluiZerado = (os.getenv('CUSTODIA_INCLUI_ZERO', '0') == '1')
    for ticker in tqdm(df['ticker'].unique()):
        qtd_em_custodia = df.loc[df['ticker'] == ticker]['qtd_ajustada'].sum()
        if incluiZerado or (qtd_em_custodia > 0):
            try:
                preco_atual = float('nan')
                try:
                    preco_atual = busca_preco_atual(ticker)
                except:
                    pass
                valor = preco_atual * qtd_em_custodia
                preco_medio_de_compra = precos_medios_de_compra[ticker][
                    'valor']
                data_primeira_compra = precos_medios_de_compra[ticker][
                    'data_primeira_compra']

                if preco_medio_de_compra <= 0.0001:
                    valorizacao = 'NA'  # ex: direitos de compra com custo zero
                else:
                    valorizacao = preco_atual / preco_medio_de_compra * 100.0 - 100.0
                    valorizacao = np.round(valorizacao, decimals=2)

                custodia.append({
                    'ticker':
                    ticker,
                    'tipo':
                    tipo_ticker(ticker).name,
                    'qtd':
                    int(qtd_em_custodia),
                    'preco_medio_compra':
                    np.round(preco_medio_de_compra, decimals=2),
                    'preco_medio_be':
                    np.round(precos_medios_de_compra[ticker]['valor_be'],
                             decimals=2),
                    'valor':
                    np.round(valor, decimals=2),
                    'preco_atual':
                    np.round(preco_atual, decimals=2),
                    'valorizacao':
                    valorizacao,
                    'ultimo_yield':
                    ticker_dividend_yield(ticker),
                    'p_vp':
                    ticker_p_vp(ticker),
                    'data_primeira_compra':
                    data_primeira_compra,
                    'valor_original':
                    np.round(preco_medio_de_compra * qtd_em_custodia,
                             decimals=2)
                })
            except Exception as ex:
                raise Exception(
                    'Erro ao calcular custodia do ticker {}'.format(ticker),
                    ex)

    df_custodia = pd.DataFrame(custodia)
    df_custodia = df_custodia.sort_values(by=orderBy, ascending=False)

    return df_custodia
コード例 #4
0
 def test_tipo_ticker(self):
     assert tipo_ticker('GRLV11') is TipoTicker.FII
     assert tipo_ticker('VRTA11') is TipoTicker.FII
     assert tipo_ticker('vrta11') is TipoTicker.FII
     assert tipo_ticker('ITSA4') is TipoTicker.ACAO
     assert tipo_ticker('PETR4') is TipoTicker.ACAO
     assert tipo_ticker('BOVA11') is TipoTicker.ETF
     assert tipo_ticker('SPXI11') is TipoTicker.ETF
     assert tipo_ticker('ISPU20') is TipoTicker.FUTURO
     assert tipo_ticker(get_random_opcoes_tickers()[0]) is TipoTicker.OPCAO
     assert tipo_ticker(get_random_opcoes_tickers()[1]) is TipoTicker.OPCAO
     assert tipo_ticker('IRDM11') is TipoTicker.FII
     assert tipo_ticker('invalid') is None