コード例 #1
0
def update_carteraAFP_govt(cartera_date):

    filename = str(cartera_date.year) + str('{:02}'.format(
        cartera_date.month)) + str('{:02}'.format(cartera_date.day))
    print(filename)
    wb = fs.open_workbook(".\\" + filename + ".xlsx", True, True)
    array_columns = [
        "clase_activo", "tipo_RA", "tipo_instrumento", "moneda", "emisor",
        "nemo"
    ]
    fs.paste_val_xl(wb, "Sheet0", 1, 1, array_columns)
    cartera_govt = fs.get_frame_xl(wb, "Sheet0", 1, 1, [5])

    cartera_govt = cartera_govt[[
        "tipo_instrumento", "moneda", "% Fondo", "% Familia Activo", "Duración"
    ]]
    cartera_govt.rename(columns={'Duración': 'duration'}, inplace=True)
    types = ["BCP", "BTP", "BCU", "BTU"]
    cartera_govt = cartera_govt.loc[cartera_govt["tipo_instrumento"].isin(
        types)]

    cartera_govt = get_buckets_soberanos(cartera_govt)
    cartera_govt["date"] = cartera_date
    cartera_govt = cartera_govt.reset_index()
    cartera_govt.set_index(['date'], inplace=True)
    tuples = cartera_govt.to_records().tolist()
    print(cartera_govt)
    upload_data(tuples)

    return cartera_govt
コード例 #2
0
def genera_excel(df_retorno_fondos, df_rentorno_ins, df_forwards, df_rezagados,
                 df_risk, df_monedas):

    df_rentorno_ins = df_rentorno_ins.set_index('codigo_fdo')

    conditions = [
        df_rentorno_ins["tipo_SVC"] == 'Nacional',
        df_rentorno_ins["tipo_SVC"] == 'Internacional'
    ]
    values_spot = [
        df_rentorno_ins["tasa_spot"], df_rentorno_ins["precio_spot"]
    ]
    values_anterior = [
        df_rentorno_ins["tasa_anterior"], df_rentorno_ins["precio_anterior"]
    ]

    df_rentorno_ins['tasa/precio_spot'] = np.select(conditions,
                                                    values_spot,
                                                    default=None)
    df_rentorno_ins['tasa/precio_anterior'] = np.select(conditions,
                                                        values_anterior,
                                                        default=None)

    df_rentorno_ins = df_rentorno_ins.loc[:, [
        'codigo_ins', 'tipo_SVC', 'tipo_instrumento', 'Moneda', 'weight_adj',
        'dur_mod', 'tasa/precio_spot', 'tasa/precio_anterior', 'CTR_Ins',
        'r_ins', 'devengo', 'r_moneda'
    ]]
    df_forwards = df_forwards[[
        'moneda_compra', 'moneda_venta', 'parity', 'r_moneda', 'monto_compra',
        'monto_venta', 'weight_adj', 'CTR_Forwards'
    ]]
    df_rezagados = df_rezagados[[
        'codigo_fdo', 'codigo_ins', 'tipo_instrumento', 'Moneda', 'weight'
    ]]
    df_rezagados.set_index('codigo_fdo', inplace=True)

    df_monedas = df_monedas.set_index(['currency', 'paridad'])

    wb = fs.open_workbook("output.xlsx", True, True)
    fs.clear_sheet_xl(wb, "fondos")
    fs.clear_sheet_xl(wb, "instrumentos")
    fs.clear_sheet_xl(wb, "forwards")
    fs.clear_sheet_xl(wb, "rezagados")
    fs.clear_sheet_xl(wb, "info_fondos")
    fs.clear_sheet_xl(wb, "paridades")
    fs.paste_val_xl(wb, "fondos", 1, 1, df_retorno_fondos)
    fs.paste_val_xl(wb, "instrumentos", 1, 1, df_rentorno_ins)
    fs.paste_val_xl(wb, "forwards", 1, 1, df_forwards)
    fs.paste_val_xl(wb, "rezagados", 1, 1, df_rezagados)
    fs.paste_val_xl(wb, "info_fondos", 1, 1, df_risk)
    fs.paste_val_xl(wb, "paridades", 1, 1, df_monedas)

    wb.save()
    wb.close()
コード例 #3
0
def indice_camara(date, index_term=5):

	date = pd.Timestamp(fs.convert_string_to_date(date))

	fechas = get_fechas_habiles(date, index_term)

	wb = fs.open_workbook(".\\calculo.xlsx", True, True)
    # Obtenemos los paths de politica monetaria
	path_scenario = fs.get_frame_xl(wb, "path", 1, 1, [0])
	path_scenario = utiles.fs.get_frame_xl(wb, "path", 1, 1, [0])


	fechas= fechas.set_index(['Fecha'])
	path_scenario = path_scenario_date_mapping(path_scenario, fechas)
	
	indice_camara = fechas.merge(path_scenario, how='left', left_index=True, right_index=True)
	
	indice_camara = indice_camara.fillna(method='ffill').reset_index()
	print(indice_camara)
	indice_camara['dias_dif'] = (indice_camara['Fecha'] - indice_camara['anterior']) / np.timedelta64(1, 'D')
	indice_camara = add_tpm_and_icp(date,indice_camara)
	indice_camara['retorno_icp_dove'] = (1+indice_camara['dove']*indice_camara['dias_dif']/36000)
	indice_camara['retorno_icp_central'] = (1+indice_camara['central']*indice_camara['dias_dif']/36000)
	indice_camara['retorno_icp_hawk'] = (1+indice_camara['hawk']*indice_camara['dias_dif']/36000)

	indice_camara.loc[0,'retorno_icp_dove'] = 0
	indice_camara.loc[0,'retorno_icp_central'] = 0
	indice_camara.loc[0,'retorno_icp_hawk'] = 0

	indice_camara = get_index_values(date, indice_camara)
	indice_camara['indice_dove'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_dove']
	indice_camara['indice_central'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_central']
	indice_camara['indice_hawk'] = 100*indice_camara['icp_dove']/indice_camara.loc[0,'icp_hawk']

	
	wb = fs.open_workbook("calculo.xlsx", True, True)

	fs.clear_sheet_xl(wb, "indice")
	fs.paste_val_xl(wb, "indice", 1, 1, indice_camara)

	return indice_camara
コード例 #4
0
def generar_excel(df_retorno_fondos, df_retorno_instrumentos, df_nacional,
                  df_internacional, rezagados, name):

    #PARCHE, saco de los dataframes el fondo liquidez, se comsulta en muchos lados asi que es más fácil sacarlo por aca
    df_nacional = df_nacional.loc[df_nacional["codigo_fdo"] != "LIQUIDEZ"]
    rezagados = rezagados.loc[rezagados["codigo_fdo"] != "LIQUIDEZ"]

    wb = fs.open_workbook("rentabilidad.xlsx", True, True)
    fs.clear_sheet_xl(wb, "Resumen_fondos")
    fs.clear_sheet_xl(wb, "Instrumentos")
    fs.clear_sheet_xl(wb, "Nacional_Market")
    fs.clear_sheet_xl(wb, "International_Market")
    fs.clear_sheet_xl(wb, "rezagados")
    fs.paste_val_xl(wb, "Resumen_fondos", 1, 1, df_retorno_fondos)
    fs.paste_val_xl(wb, "Instrumentos", 1, 1, df_retorno_instrumentos)
    fs.paste_val_xl(wb, "Nacional_Market", 1, 1, df_nacional)
    fs.paste_val_xl(wb, "International_market", 1, 1, df_internacional)
    fs.paste_val_xl(wb, "rezagados", 1, 1, rezagados)
    wb.save()
    wb.close()
コード例 #5
0
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)
コード例 #6
0
def check_excel():
    today = str(dt.datetime.now().date())
    yesterday = fs.get_prev_weekday(str(dt.datetime.now().date()))
    excel = fs.get_self_path() + "Cupones_{}".format(today) + ".xlsx"
    wb = fs.open_workbook(excel, True, True)
    df = fs.get_frame_xl(wb, "Hoja1", 2, 3, [0])
    fs.close_workbook(wb)

    query_bonos = (
        "SELECT [codigo_ins], [codigo_fdo], [nominal], [fec_vcto] FROM [MesaInversiones].[dbo].[ZHIS_Carteras_Main] WHERE [fecha] = '{}' AND ([codigo_ins] NOT LIKE '{}' AND [codigo_ins] NOT LIKE '{}') AND [codigo_fdo] IN ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}') AND [Tipo_Instrumento] NOT IN ('{}', '{}')"
    ).format(yesterday, 'PAGARE%', 'PDBC%', 'SPREADCORP', 'DEUDA CORP',
             'DEUDA 360', 'LIQUIDEZ', 'M_MARKET', 'MACRO CLP3', 'MACRO 1.5',
             'RENTA', 'IMT E-PLUS', 'Cuota de Fondo', 'Letra Hipotecaria')
    df_bonos = fs.get_frame_sql_user("Puyehue", "MesaInversiones", "usuario1",
                                     "usuario1", query_bonos)

    query_depositos = (
        "SELECT [codigo_ins], [codigo_fdo], [nominal], [codigo_emi], [Moneda], [fec_vcto] FROM [MesaInversiones].[dbo].[ZHIS_Carteras_Main] WHERE [fecha] = '{}' AND ([codigo_ins] LIKE '{}' OR [codigo_ins] LIKE '{}') AND [codigo_fdo] in ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}')"
    ).format(  ##(Tipo_Instrumento IN ('Bono Corporativo', 'Deposito', 'Bono de Gobierno', 'Letra Hipotecaria', 'Factura', 'RF LATAM') OR Tipo_Instrumento is NULL)").format(
        yesterday, 'PAGARE%', 'PDBC%', 'SPREADCORP', 'DEUDA CORP', 'DEUDA 360',
        'LIQUIDEZ', 'M_MARKET', 'MACRO CLP3', 'MACRO 1.5', 'RENTA',
        'IMT E-PLUS')
    df_depositos = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                         "usuario1", "usuario1",
                                         query_depositos)

    query_cupones = "SELECT * FROM [MesaInversiones].[dbo].[Cupones_RF]"
    df_cupones = fs.get_frame_sql_user("Puyehue", "MesaInversiones",
                                       "usuario1", "usuario1", query_cupones)

    df_bonos_t = df_bonos.loc[df_bonos['fec_vcto'] == today]
    df_depositos = df_depositos.loc[df_depositos['fec_vcto'] == today]

    df_excel = pd.DataFrame(columns=[
        'Fondo', 'Cupones', 'Vencimiento D', 'Vencimiento B', 'Total'
    ])

    for row in df.iterrows():
        fondo = row[0].strip()
        vencimiento_recibido_pdf_d = float(
            str(row[1]['Vencimiento D']).replace('.', '').replace(',', '.'))
        vencimiento_recibido_base_d = 0
        vencimiento_recibido_pdf_b = float(
            str(row[1]['Vencimiento B']).replace('.', '').replace(',', '.'))
        vencimiento_recibido_base_b = 0
        recibido_base = 0
        total_recibido_cupones = float(
            str(row[1]['Cupones']).replace('.', '').replace(',', '.'))
        for line in df_depositos.iterrows():
            if line[1]['codigo_fdo'].strip() == fondo:
                vencimiento_recibido_base_d += float(line[1]['nominal'])
        for linea in df_bonos_t.iterrows():
            instrumento = linea[1]['codigo_ins']
            df_cupon = df_cupones.loc[df_cupones['Instrumento'] == instrumento]
            for i in df_cupon.iterrows():
                vencimiento_recibido_base_b += i[1]['Cantidad_corte']

        if vencimiento_recibido_pdf_d != vencimiento_recibido_base_d:
            ### Acá agregar que pasa si es que los vencimientos del pdf no coinciden con los vencimientos de la base de datos
            pass
        excel_row = [
            fondo,
            locale.format("%f",
                          total_recibido_cupones,
                          grouping=True,
                          monetary=True)[:-5],
            locale.format("%f",
                          vencimiento_recibido_base_d,
                          grouping=True,
                          monetary=True)[:-5],
            locale.format("%f",
                          vencimiento_recibido_base_b,
                          grouping=True,
                          monetary=True)[:-5],
            locale.format("%f",
                          total_recibido_cupones +
                          vencimiento_recibido_base_d +
                          vencimiento_recibido_base_b,
                          grouping=True,
                          monetary=True)[:-5]
        ]
        df_excel = df_excel.append(pd.DataFrame([excel_row],
                                                columns=[
                                                    'Fondo', 'Cupones',
                                                    'Vencimiento D',
                                                    'Vencimiento B', 'Total'
                                                ]),
                                   ignore_index=True)

    excel = resource_path("Cupones_" + today + ".xlsx")
    writer = pd.ExcelWriter(excel)

    #### Escribe el dataframe del resumen de los fondos corregidos en una página del excel
    df_excel.to_excel(writer, sheet_name='Resumen', startrow=1, startcol=1)
    writer.sheets['Resumen'].column_dimensions['C'].width = 13
    writer.sheets['Resumen'].column_dimensions['D'].width = 14
    writer.sheets['Resumen'].column_dimensions['E'].width = 14
    writer.sheets['Resumen'].column_dimensions['F'].width = 14
    writer.sheets['Resumen'].column_dimensions['G'].width = 14
    writer.save()

    ### Imprime solo el resumen de los fondos en un PDF
    #fs.export_sheet_pdf_jp(0, fs.get_self_path()+"Cupones_" + today + ".xlsx", fs.get_self_path()+"Informe_cupones_" + today + "_corregido.pdf")

    fondos = [
        'SPREADCORP', 'DEUDA CORP', 'DEUDA 360', 'LIQUIDEZ', 'M_MARKET',
        'MACRO CLP3', 'MACRO 1.5', 'RENTA', 'IMT E-PLUS', 'None'
    ]

    for fondo in fondos:
        df_sheet = pd.DataFrame(
            columns=['Fondo', 'Instrumento', 'Emisor'
                     'Ingreso'])
        for line in df_depositos.iterrows():
            if line[1]['codigo_fdo'].strip() == fondo:
                row = [
                    fondo, line[1]['codigo_ins'].strip(),
                    line[1]['codigo_emi'].strip(),
                    locale.format("%f",
                                  float(line[1]['nominal']),
                                  grouping=True,
                                  monetary=True)[:-5]
                ]
                print(row)
                df_sheet = df_sheet.append(pd.DataFrame(
                    [row],
                    columns=['Fondo', 'Instrumento', 'Emisor', 'Ingreso']),
                                           ignore_index=True)

        for fila in df_cupones.loc[df_cupones['Fecha_corte'] ==
                                   today].iterrows():
            instrumento = fila[1]['Instrumento']
            for linea in df_bonos.iterrows():
                if instrumento == linea[1]['codigo_ins'] and fondo == linea[1][
                        'codigo_fdo']:
                    row = [
                        fondo, instrumento, None,
                        locale.format(
                            "%f",
                            ((float(linea[1]['Cantidad_corte']) / 1000000) *
                             linea[1]['nominal']),
                            grouping=True,
                            monetary=True)[:-5]
                    ]
                    df_sheet = df_sheet.append(pd.DataFrame(
                        [row],
                        columns=['Fondo', 'Instrumento', 'Emisor', 'Ingreso']),
                                               ignore_index=True)

                    print(row)
        #### Escribe el detalle de todos los intrumentos de cada fondo que reportan ingresos
        df_sheet.to_excel(writer, sheet_name=fondo, startrow=1, startcol=1)
        print('-------------' + fondo + '-------------')
        print(df_sheet)

    for fon in fondos:
        writer.sheets[fon].column_dimensions['C'].width = 14
        writer.sheets[fon].column_dimensions['D'].width = 14
        writer.sheets[fon].column_dimensions['E'].width = 14
        writer.sheets[fon].column_dimensions['F'].width = 14
        writer.sheets[fon].column_dimensions['G'].width = 15

    writer.save()
    writer.close()
    #### Imprime el detalle de todos los fondos en un PDF (la primera lista indica los indices del excel que quiero pasar a PDF,
    #### deberían llegar hasta el 10 para que los imprima todos, pero tira un error de list index que no he podido arreglar)
    fs.export_sheet_pdf_multiple_index(
        [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        fs.get_self_path() + "Cupones_" + today + ".xlsx",
        fs.get_self_path() + "Informe_cupones_" + today + "_detalle.pdf")