示例#1
0
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
示例#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():
        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
示例#3
0
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
示例#4
0
    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
示例#5
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