예제 #1
0
def titulos(data,vencimento,taxa,resultado='pu',cupom=0.06,valor_futuro=1000,vna=1):
    from helper import feriados
    feriados = list(feriados.lista())
    if cupom == 0.0:
        du = np.busday_count(data,vencimento,holidays=feriados)/252.0
        pu = valor_futuro/(1+taxa)**du
        mod = du
    else:
        dt_cupom = vencimento
        lst=[]
        cupom  = ((1+cupom)**(0.5)-1)*valor_futuro*vna
        while dt_cupom >= data:
            mes = dt_cupom.month-6
            ano = dt_cupom.year
            if mes < 0:
                mes+=12
                ano=dt_cupom.year - 1
            dt_cupom = pd.to_datetime(str(ano) + '-' + str(mes) +'-' + str(vencimento.day))
            lst.append({'datas_cupom':dt_cupom})
        lst.append({'datas_cupom':vencimento})
        df=pd.DataFrame.from_dict(lst)
        df=df[df['datas_cupom']>data].sort_values(by='datas_cupom', ascending=True).reset_index(drop=True)
        df['dia']=data
        df['du']=np.busday_count(list(df['dia'].copy()),list(df['datas_cupom'].copy()),holidays=feriados)/252.0
        df['fator']=1/(1+float(taxa))**df['du']
        df['valor_de_face']=df['fator']*cupom
        pu=df['valor_de_face'].sum() + df['fator'].min()*valor_futuro*vna
        df['fator_mod']=((df['du']*cupom)/(1+float(taxa))**df['du'])/pu
        mod = df['fator_mod'].sum() + df['fator'].min()*valor_futuro/pu
    if resultado == 'pu':
        return pu
    else:
        return mod
예제 #2
0
def buscar_proximo_dia_util(date):
    """Retorna o próximo dia útil caso o parâmetro não seja dia útil"""

    while (date.weekday() == calendar.SATURDAY
           or date.weekday() == calendar.SUNDAY) or (date in feriados.lista()):
        date += datetime.timedelta(days=1)
    return date
예제 #3
0
def buscar_dia_anterior(date):
    """Retorna o dia útil anterior"""

    date -= datetime.timedelta(days=1)
    while (date.weekday() == calendar.SATURDAY
           or date.weekday() == calendar.SUNDAY) or (date in feriados.lista()):
        date -= datetime.timedelta(days=1)
    return date
예제 #4
0
def primeira_data_mes(date):
    """Retorna o primeiro dia útil do mês"""

    try:
        d = datetime.datetime(int(date.year), int(date.month), 1)
        while d.weekday() == calendar.SATURDAY or d.weekday(
        ) == calendar.SUNDAY or (d.date() in feriados.lista()):
            d += datetime.timedelta(days=1)
        return d.date()
    except Exception as e:
        raise Exception("erro ao buscar primeiro dia util do mes %s" % date)
예제 #5
0
def get_last_util_day(date):
    """Retorna o último dia útil do mês"""

    try:
        last_day = calendar.monthrange(int(date.year), int(date.month))[1]
        d = datetime.datetime(int(date.year), int(date.month), last_day)
        while d.weekday() == calendar.SATURDAY or d.weekday(
        ) == calendar.SUNDAY or (d.date() in feriados.lista()):
            d -= datetime.timedelta(days=1)
        return d.date()
    except Exception as e:
        raise Exception("erro ao buscar ultimo dia util do mes %s" % date)
예제 #6
0
def cupons(data,vencimento):
    from helper import feriados
    feriados = list(feriados.lista())
    dt_cupom = vencimento
    lst=[]
    while dt_cupom >= data:
        mes = dt_cupom.month-6
        ano = dt_cupom.year
        if mes < 0:
            mes+=12
            ano=dt_cupom.year - 1
        dt_cupom = pd.to_datetime(str(ano) + '-' + str(mes) +'-' + str(vencimento.day))
        lst.append({'datas_cupom':dt_cupom})
    return lst
예제 #7
0
def net_workdays1(data_inicial, data_final):
    net_days = (data_final - data_inicial).days
    lst = []
    data = data_inicial
    for i in range(0, net_days):
        data += datetime.timedelta(days=1)
        lst.append({'fds': data, 'weekday': data.weekday()})
    d = pd.DataFrame.from_dict(lst)
    f = len(
        d[d['weekday'] > 4]) + sum(1 if (x >= data_inicial) & (x <= data_final)
                                   & (x not in d['fds']) else 0
                                   for x in pd.to_datetime(feriados.lista()))
    net_days -= f
    return net_days
예제 #8
0
def proximo_dia_util(date):
    date += datetime.timedelta(days=1)
    while (date.weekday() == calendar.SATURDAY
           or date.weekday() == calendar.SUNDAY) or (date in feriados.lista()):
        date += datetime.timedelta(days=1)
    return date
예제 #9
0
# coding: utf-8

# In[11]:

import pandas as pd
import numpy as np
import datetime
from helper import feriados

feriados = list(feriados.lista())


class Ajustes_dap(object):
    def __init__(self, arcv):
        self.arcv = arcv

    def result(self):
        arcv = self.arcv
        d = pd.read_excel(arcv, header=1,sheetname ='base_dados',skip_footer=1)\
                    .fillna(method='ffill', limit=2).fillna(0.0).reset_index(drop=True)
        i = 0
        while i + 2 <= len(d.columns):
            try:
                df
            except:
                df = d[d.columns[i:i + 2]].copy()
                df['ticker'] = df.columns[1]
                df.rename(columns={
                    df.columns[0]: 'data',
                    df.columns[1]: 'preco',
                },