def calcula_rentabilidad_diaria(date): date_anterior = utiles.get_fecha_habil_anterior(date) #Saco la info del día de ayer de AUM, Pactos y carteras ya que a la hora que corre este scrip no se tienen los datos spot df_funds_currency = utiles.get_funds_currency() df_aum = utiles.get_funds_aum(date_anterior) df_leverage = utiles.get_leverage(date_anterior) df_carteras_fondos = utiles.get_carteras_fondos(date_anterior) df_info_fondos = df_funds_currency.join(df_aum, how='inner').join( df_leverage, how='left').fillna(0) df_info_fondos[ 'Patrimonio'] = df_info_fondos['AUM'] - df_info_fondos['monto_pactado'] df_info_fondos['Ratio_Leverage'] = df_info_fondos['AUM'] / df_info_fondos[ 'Patrimonio'] # Saco la info de risk df_risk_spot, int_data_available_spot = compute_df_risk(date) df_risk_anterior, int_data_availabe_anterior = compute_df_risk( date_anterior) df_risk_anterior = df_risk_anterior[['precio', 'tasa', 'duration']] df_risk = df_risk_spot.join(df_risk_anterior, how='inner', lsuffix='_spot', rsuffix='_anterior') #Guardo todos los instrumentos que no entran en el cálculo df_rezagados = get_instrumentos_no_considerados(df_carteras_fondos, df_risk) df_rentorno_ins = df_carteras_fondos.join(df_risk, how='inner') df_rentorno_ins.index.name = 'codigo_ins' df_rentorno_ins.reset_index(inplace=True) df_rentorno_ins.set_index('codigo_fdo', inplace=True) df_rentorno_ins = df_rentorno_ins.join(df_info_fondos, how='left') df_rentorno_ins.reset_index(inplace=True) df_rentorno_ins.set_index('codigo_ins', inplace=True) df_monedas = utiles.get_currencys(date) df_rentorno_ins = calcula_rentabilidad_instrumentos( date, df_rentorno_ins, df_monedas) df_forwards = calcula_rentabilidad_forwards(date, df_monedas, df_info_fondos) df_retorno_fondos = calcula_retorno_total_fondo(df_info_fondos, df_rentorno_ins, df_forwards) return df_retorno_fondos, df_rentorno_ins, df_forwards, df_rezagados, df_info_fondos, df_monedas, int_data_available_spot
def get_tpm_and_icp(date): date_ayer = utiles.get_fecha_habil_anterior(date) date_ante_ayer = utiles.get_fecha_habil_anterior(date_ayer) query_tpm = "Select Fecha, valor from Indices_Dinamica where Index_Id=459 and Fecha>='DATE_1' and Fecha<='DATE_2'" query_tpm = query_tpm.replace('DATE_1',str(date_ante_ayer)).replace('DATE_2', str(date_ayer)) df_tpm = fs.get_frame_sql_user(server="puyehue", database="MesaInversiones", username="******", password="******", query=query_tpm) query_icp = "Select valor from Indices_Dinamica where Index_Id=4 and Fecha='DATE'" query_icp = query_icp.replace('DATE', str(date)) print(query_icp) icp = fs.get_val_sql_user(server="puyehue", database="MesaInversiones", username="******", password="******", query=query_icp) return df_tpm, icp
def calcula_rentabilidad_instrumentos(date, df_rentorno_ins, df_monedas): date_anterior = utiles.get_fecha_habil_anterior(date) delta_dias_valorizacion = (date - date_anterior).days df_rentorno_ins = join_cartera_monedas(df_rentorno_ins, df_monedas) df_rentorno_ins = utiles.get_devengo_tasa(df_rentorno_ins) #El weight verdadero de la cartera es corregido por leverage df_rentorno_ins['weight_adj'] = df_rentorno_ins[ 'weight'] * df_rentorno_ins['Ratio_Leverage'] df_rentorno_ins['dur_mod'] = df_rentorno_ins['duration_anterior'] / ( 1 + df_rentorno_ins['tasa_anterior'] / 100) df_rentorno_ins['r_aprox'] = -df_rentorno_ins['dur_mod'] * ( df_rentorno_ins['tasa_spot'] - df_rentorno_ins['tasa_anterior']) / 100 df_rentorno_ins['r_1D'] = df_rentorno_ins['precio_spot'] / df_rentorno_ins[ 'precio_anterior'] - 1 #condiciones para que la rentabilidad no cague cuando haya pago de cupones. conditions = [(df_rentorno_ins["tipo_SVC"] == 'Nacional') & (df_rentorno_ins['r_1D'] < -0.01), (df_rentorno_ins["tipo_SVC"] == 'Nacional') & (df_rentorno_ins['r_1D'] >= -0.01) & (df_rentorno_ins["Moneda"].isin(['$', 'UF'])), (df_rentorno_ins["tipo_SVC"] == 'Nacional') & (df_rentorno_ins['r_1D'] >= -0.01) & (df_rentorno_ins["Moneda"].isin(['$', 'UF']) == False), (df_rentorno_ins["tipo_SVC"] == 'Internacional')] retorno = [ df_rentorno_ins["r_aprox"] + df_rentorno_ins["devengo"] + df_rentorno_ins['r_moneda'], df_rentorno_ins["r_1D"] - (delta_dias_valorizacion - 1) * (df_rentorno_ins["devengo"] + df_rentorno_ins['r_moneda']), df_rentorno_ins["r_1D"] - (delta_dias_valorizacion - 1) * (df_rentorno_ins["devengo"]), df_rentorno_ins["r_1D"] + df_rentorno_ins['r_moneda'] ] df_rentorno_ins['r_ins'] = np.select(conditions, retorno, default=df_rentorno_ins['r_1D']) df_rentorno_ins[ 'CTR_Ins'] = df_rentorno_ins['weight_adj'] * df_rentorno_ins['r_ins'] return df_rentorno_ins
def get_currency_type(date, df_risk): date_anterior = utiles.get_fecha_habil_anterior(date) path = ".\\querys\\mapping_cinta.sql" query = fs.read_file(path=path).replace("AUTODATE", str(date_anterior)) cinta_ra = fs.get_frame_sql_user(server="Puyehue", database="MesaInversiones", username="******", password="******", query=query) cinta_ra.set_index(["Codigo_Ins"], inplace=True) df_mapped = df_risk.merge(cinta_ra, how='left', left_index=True, right_index=True) return df_mapped
def write_excel(df_risk_internacional): wb = fs.open_workbook("data_riskamerica_internacional.xlsx", True, True) fs.clear_sheet_xl(wb, "data") fs.paste_val_xl(wb, "data", 1, 1, df_risk_internacional) fechas_hab=utiles.get_fechas_habiles() fechas_hab['Fecha'] = fechas_hab['Fecha'].apply(lambda x: datetime.datetime.strftime(x, '%Y-%m-%d')) date_spot = datetime.date.today() print(str(date_spot)) date_anterior = utiles.get_fecha_habil_anterior(date_spot) df_risk_internacional_spot= download_international_data(date_spot) df_risk_internacional_anterior= download_international_data(date_anterior) df_risk_internacional = get_full_international_df(date_spot, df_risk_internacional_spot, df_risk_internacional_anterior) upload_DB(df_risk_internacional)