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
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
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
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)
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)
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
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
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
# 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', },