def tipo_ticker(ticker): if ticker in __cache__: return __cache__[ticker] else: if e_tipo_fii(ticker): __cache__[ticker] = TipoTicker.FII return TipoTicker.FII if e_tipo_etf(ticker): __cache__[ticker] = TipoTicker.ETF return TipoTicker.ETF try: busca_preco_atual(ticker) __cache__[ticker] = TipoTicker.ACAO return TipoTicker.ACAO except: pass from src.crawler_advfn import CrawlerAdvfn crawlerAdvfn = CrawlerAdvfn() if crawlerAdvfn.busca_tipo_ticker(ticker) == TipoTicker.ACAO: return TipoTicker.ACAO if crawlerAdvfn.busca_tipo_ticker(ticker) == TipoTicker.OPCAO: return TipoTicker.OPCAO if crawlerAdvfn.busca_tipo_ticker(ticker) == TipoTicker.FUTURO: return TipoTicker.FUTURO return None
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 tipo_ticker(ticker): if ticker in __cache__: return __cache__[ticker] else: if e_tipo_fii(ticker): __cache__[ticker] = TipoTicker.FII return TipoTicker.FII if e_tipo_etf(ticker): __cache__[ticker] = TipoTicker.ETF return TipoTicker.ETF try: busca_preco_atual(ticker) __cache__[ticker] = TipoTicker.ACAO return TipoTicker.ACAO except: pass return None
def test_get_ticker_price_bs4(self): with self.assertRaises(Exception): busca_preco_atual('invalid') sdil11 = busca_preco_atual('SDIL11') maxr11 = busca_preco_atual('MAXR11') itsa4 = busca_preco_atual('ITSA4') vrta11 = busca_preco_atual('VRTA11') bova11 = busca_preco_atual('BOVA11') assert type(itsa4) is float assert type(vrta11) is float assert type(bova11) is float
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