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
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
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
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