def genera_flujos(self): info = dict() # Se sacan los datos para generar flujos info["Fecha"] = self.fechaActual info["Fondo"] = self.info_cartera.Fondo[0] info["Tipo"] = "XCCY" info["ID"] = self.info_cartera.ID[0] info["FechaEfectiva"] = pd.to_datetime( datetime.datetime.strptime( self.info_cartera.FechaEfectiva.iloc[0].split(" ")[0], "%d/%m/%Y").strftime("%Y-%m-%d")).date() info["FechaVenc"] = pd.to_datetime( datetime.datetime.strptime( self.info_cartera.FechaVenc.iloc[0].split(" ")[0], "%d/%m/%Y").strftime("%Y-%m-%d")).date() info["AjusteFeriados"] = self.info_cartera.AjusteFeriados[0] # Datos para la parte activa info["ActivoPasivo"] = 1 info["Moneda"] = self.info_cartera.MonedaActivo[0] info["TipoTasa"] = self.info_cartera.TipoTasaActivo[0] info["Nocional"] = self.info_cartera.NocionalActivo[0] info["Frecuencia"] = cast_frecuencia( self.info_cartera.FrecuenciaActivo[0]) info["Tasa"] = self.info_cartera.TasaActivo[0] info["Spread"] = self.info_cartera.SpreadActivo[0] self.genera_flujos_aux(info) # Datos para la parte pasiva info["ActivoPasivo"] = -1 info["Moneda"] = self.info_cartera.MonedaPasivo[0] info["TipoTasa"] = self.info_cartera.TipoTasaPasivo[0] info["Nocional"] = self.info_cartera.NocionalPasivo[0] info["Frecuencia"] = cast_frecuencia( self.info_cartera.FrecuenciaPasivo[0]) info["Tasa"] = self.info_cartera.TasaPasivo[0] info["Spread"] = self.info_cartera.SpreadPasivo[0] self.genera_flujos_aux(info) self.set_status("INFO: Flujos generados para XCCY con ID " + str(self.info_cartera.ID.iloc[0]))
def genera_flujos(self): hora = self.hora cn = self.cn fecha = self.fecha admin = self.info_cartera.Administradora[0] fondo = self.info_cartera.Fondo[0] contraparte = self.info_cartera.Contraparte[0] id = self.info_cartera.ID[0] fecha_efectiva = pd.to_datetime(self.info_cartera.FechaEfectiva[0]).date() fecha_venc = pd.to_datetime(self.info_cartera.FechaVenc[0]).date() ajuste_feriados = self.info_cartera.AjusteFeriados[0] paises_feriados = ajuste_feriados.split(',') moneda = self.info_cartera.MonedaActivo[0] if self.info_cartera.TipoTasaActivo[0] == 'Fija': factor_recibo_fijo = 1 tasa = self.info_cartera.TasaActivo[0] else: factor_recibo_fijo = -1 tasa = self.info_cartera.TasaPasivo[0] nocional = self.info_cartera.NocionalActivo[0] frecuencia = cast_frecuencia(self.info_cartera.FrecuenciaActivo[0]) id_key = self.info_cartera.ID_Key[0] convencion = "ACT360" flujos_f = genera_flujos(max(fecha, fecha_efectiva), fecha_efectiva, fecha_venc, tasa, frecuencia, convencion) fecha_cupon = flujos_f[0][0] fecha_aux = delta_frecuencia(fecha_cupon, frecuencia, -1) fecha_aux = max(fecha_aux, fecha_efectiva) fecha_cupon_anterior = ultimo_habil_pais(fecha_aux, "MX", cn) flujos_v = proyectar_flujos_tabla(fecha, fecha, 1, hora, fecha_efectiva, fecha_venc, frecuencia, moneda, 0, "Local", ajuste_feriados, cn) if fecha >= fecha_cupon_anterior: tasaV = ("SELECT T.Valor FROM dbAlgebra.dbo.TdInfoTasas I " "INNER JOIN dbAlgebra.dbo.TdTasas T " "ON I.TickerCorto = T.Tasa " "INNER JOIN (SELECT MAX(T.Fecha) AS Fecha FROM " "dbAlgebra.dbo.TdInfoTasas I INNER JOIN " "dbAlgebra.dbo.TdTasas T ON I.TickerCorto = T.Tasa " "WHERE (T.SiValida = 1) AND (T.Hora = 'CIERRE') AND (I.TipoTasa = 'TIIE') " "AND (I.MonedaActiva = 'MXN') AND (T.Fecha <= " + fecha_str(fecha_cupon_anterior) + ") " "AND (I.Plazo = '28D')) F ON T.Fecha = F.Fecha " "WHERE (T.SiValida = 1) AND (T.Hora = 'CIERRE') AND (I.TipoTasa = 'TIIE') " "AND (I.MonedaActiva = 'MXN') AND (I.Plazo = '28D')") tasaV = pd.io.sql.read_sql(tasaV, cn) tasaV = tasaV.Valor[0] cupon = (1/factor_descuento(tasaV/100, fecha_cupon_anterior, fecha_cupon, "ACT360", 0)-1) * 100 devengo = cupon * (fecha_cupon_anterior-fecha).days / (fecha_cupon_anterior-fecha_cupon).days fecha_flujo_variable = fecha_cupon fecha_pago = siguiente_habil_paises(add_days(fecha_flujo_variable, -1), paises_feriados, cn) flujos_v[0][0] = fecha_flujo_variable flujos_v[0][1] = cupon flujos_v[0][2] = fecha_pago flujos_v[0][3] = 0 flujos_v[0][4] = cupon flujos_v[0][5] = 0 flujos_v[0][6] = devengo fecha_FNS = fecha_flujo_variable flujo_FNS = nocional * ((cupon/100)+1) else: fecha_FNS = fecha_cupon_anterior flujo_FNS = nocional col_flujos_derivados = ['Fecha', 'Administradora', 'Fondo', 'Contraparte', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFixing', 'FechaFlujo', 'FechaPago', 'Moneda', 'Flujo', 'Amortizacion', 'Interes', 'Sensibilidad', 'InteresDevengado', 'Id_Key_Cartera'] col_flujos_nosensibles = ['Fecha', 'Administradora', 'Fondo', 'Contraparte', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFlujoNoSensible', 'Moneda', 'FlujoNoSensible', 'Id_Key_Cartera'] flujos_derivados = pd.DataFrame(columns=col_flujos_derivados) flujos_nosensibles = pd.DataFrame(columns=col_flujos_nosensibles) for i in flujos_v: flujos_derivados = flujos_derivados.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SMT', id, -factor_recibo_fijo, i[0], i[0], i[2], moneda, i[1] / 100 * nocional, i[3] / 100 * nocional, i[4] / 100 * nocional, i[5] / 100 * nocional, i[6] / 100 * nocional, id_key]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SMT', id, -factor_recibo_fijo, fecha_FNS, moneda, flujo_FNS, id_key]], columns=col_flujos_nosensibles)) for i in flujos_f: flujo_fijo = i[1] / 100 * nocional amortizacion = i[3] / 100 * nocional interes_fijo = i[4] / 100 * nocional fecha_flujo_f = i[0] devengo = i[6] / 100 * nocional fecha_pago = siguiente_habil_paises(add_days(fecha_flujo_f, -1), paises_feriados, cn) flujos_derivados = flujos_derivados.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SMT', id, factor_recibo_fijo, fecha_flujo_f, fecha_flujo_f, fecha_pago, moneda, flujo_fijo, amortizacion, interes_fijo, 0, devengo, id_key]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SMT', id, factor_recibo_fijo, fecha_flujo_f, moneda, flujo_fijo, id_key]], columns=col_flujos_nosensibles)) self.flujos_nosensibles = flujos_nosensibles self.flujos_derivados = flujos_derivados self.set_status("INFO: Flujos generados para SMT con ID " + str(self.info_cartera.ID.iloc[0]))
def genera_flujos(self): hora = self.hora cn = self.cn fecha = self.fecha admin = self.info_cartera.Administradora[0] fondo = self.info_cartera.Fondo[0] contraparte = self.info_cartera.Contraparte[0] id = self.info_cartera.ID[0] fecha_efectiva = pd.to_datetime( self.info_cartera.FechaEfectiva[0]).date() fecha_venc = pd.to_datetime(self.info_cartera.FechaVenc[0]).date() ajuste_feriados = self.info_cartera.AjusteFeriados[0] paises_feriados = ajuste_feriados.split(',') moneda = self.info_cartera.MonedaActivo[0] if self.info_cartera.TipoTasaActivo[0] == 'Fija': factor_recibo_fijo = 1 tasa = self.info_cartera.TasaActivo[0] frecuencia_fija = self.info_cartera.FrecuenciaActivo[0] frecuencia_variable = self.info_cartera.FrecuenciaPasivo[0] else: factor_recibo_fijo = -1 tasa = self.info_cartera.TasaPasivo[0] frecuencia_fija = self.info_cartera.FrecuenciaPasivo[0] frecuencia_variable = self.info_cartera.FrecuenciaActivo[0] nocional = self.info_cartera.NocionalActivo[0] frecuencia_fija = cast_frecuencia(frecuencia_fija) frecuencia_variable = cast_frecuencia(frecuencia_variable) id_key = self.info_cartera.ID_Key[0] fecha_aux = add_days(max(fecha, fecha_efectiva), -1) fecha_aux = add_days(ultimo_habil_pais(fecha_aux, "US", cn), 1) flujos_f = genera_flujos(fecha_aux, fecha_efectiva, fecha_venc, tasa, frecuencia_fija, "ACT360") arr_factor_descuento = curva_cero_swapUSD(fecha, hora, frecuencia_variable, "ACT360", cn) print("arr", arr_factor_descuento) flujos_v = genera_flujos(fecha_aux, fecha_efectiva, fecha_venc, 0, frecuencia_variable, "ACT360") flujos_v_DV01 = flujos_v flujos_f_ns = flujos_v for i in range(len(flujos_v)): fecha_anterior = delta_frecuencia(flujos_v[i][0], frecuencia_variable, -1) print(flujos_v[i][0]) fecha_fijacion_libor = add_days( ultimo_habil_pais(add_days(fecha_anterior, -1), "UK", cn), -1) fecha_fijacion_libor = ultimo_habil_pais(fecha_fijacion_libor, "UK", cn) fecha_fijacion_libor_siguiente = add_days( ultimo_habil_pais(add_days(flujos_v[i][0], -1), "UK", cn), -1) fecha_fijacion_libor_siguiente = ultimo_habil_pais( fecha_fijacion_libor_siguiente, "UK", cn) flujos_v[i][0] = siguiente_habil_pais(add_days(flujos_v[i][0], -1), "US", cn) flujos_v_DV01[i][0] = flujos_v[i][0] flujos_f_ns[i][0] = flujos_v[i][0] max_fecha_libor = ( "SELECT Max(T.Fecha) as FechaMax " "FROM dbAlgebra.dbo.TdInfoTasas I " "INNER JOIN " "dbAlgebra.dbo.TdTasas T " "ON I.TickerCorto = T.Tasa " "WHERE T.SiValida = 1 AND T.Hora = 'CIERRE' AND I.Plazo = '" + frecuencia_variable + "' " "AND I.TipoTasa = 'LIBOR' AND I.MonedaActiva = 'USD' " "AND T.Fecha <= " + fecha_str(fecha_fijacion_libor) + "") max_fecha_libor = pd.io.sql.read_sql(max_fecha_libor, self.cn).FechaMax.iloc[0] if fecha_fijacion_libor <= fecha: libor = ( "SELECT T.Valor " "FROM dbAlgebra.dbo.TdInfoTasas I " "INNER JOIN " "dbAlgebra.dbo.TdTasas T " "ON I.TickerCorto = T.Tasa " "WHERE T.SiValida = 1 AND T.Hora = 'CIERRE' AND I.Plazo = '" + frecuencia_variable + "' " "AND I.TipoTasa = 'LIBOR' AND I.MonedaActiva = 'USD' " "AND T.Fecha = " + fecha_str(max_fecha_libor) + " ORDER BY I.Plazo360") libor = pd.io.sql.read_sql(libor, self.cn).Valor.iloc[0] tasa = libor tasaDV01 = tasa if fecha_fijacion_libor_siguiente > fecha or len( flujos_v) - 1 == i: flujos_f_ns[i][1] = 100 + tasa * ( flujos_f_ns[i][0] - fecha_anterior).days / 360 else: flujos_f_ns[i][1] = tasa * (flujos_f_ns[i][0] - fecha_anterior).days / 360 flujos_v[i][6] = tasa * (fecha - fecha_anterior).days / 360 else: plazo_ini = (fecha_fijacion_libor - fecha).days plazo_fin = (fecha_fijacion_libor_siguiente - fecha).days tasa_arr = tasa_FRA_y_tasa_DV01(plazo_ini, plazo_fin, 0, arr_factor_descuento) tasa = tasa_arr[0] tasaDV01 = tasa_arr[1] flujos_f_ns[i][1] = 0 flujos_v[i][6] = 0 flujos_v[i][1] = flujos_v[i][1] + tasa * ( flujos_v[i][0] - fecha_anterior).days / 360 flujos_v[i][4] = tasa * (flujos_v[i][0] - fecha_anterior).days / 360 flujos_v_DV01[i][1] = flujos_v_DV01[i][1] + tasaDV01 * ( flujos_v_DV01[i][0] - fecha_anterior).days / 360 insert = dict() insert["Fecha"] = fecha insert["Administradora"] = admin insert["Fondo"] = fondo insert["Contraparte"] = contraparte insert["Tipo"] = "SDL" insert["ID"] = id insert["Hora"] = hora insert["ActivoPasivo"] = -factor_recibo_fijo insert["Id_Key_Cartera"] = id_key for i in range(len(flujos_v)): insert["FechaFixing"] = flujos_v[i][0] insert["FechaFlujo"] = flujos_v[i][0] insert["FechaPago"] = siguiente_habil_paises( add_days(flujos_v[i][0], -1), paises_feriados, cn) insert["Moneda"] = moneda insert["Flujo"] = flujos_v[i][1] / 100 * nocional insert["Amortizacion"] = flujos_v[i][3] / 100 * nocional insert["Interes"] = flujos_v[i][4] / 100 * nocional insert["Sensibilidad"] = (flujos_v_DV01[i][1] - flujos_v[i][1]) / 100 * nocional insert["InteresDevengado"] = flujos_v[i][6] / 100 * nocional self.flujos_derivados = self.flujos_derivados.append(insert) insert_nosensible = dict() insert_nosensible["Fecha"] = fecha insert_nosensible["Administradora"] = admin insert_nosensible["Fondo"] = fondo insert_nosensible["Contraparte"] = contraparte insert_nosensible["Tipo"] = "SDL" insert_nosensible["ID"] = id insert_nosensible["Hora"] = hora insert_nosensible["ActivoPasivo"] = factor_recibo_fijo insert_nosensible["Id_Key_Cartera"] = id_key insert["ActivoPasivo"] = factor_recibo_fijo for i in flujos_f: insert["FechaFixing"] = i[0] insert["FechaFlujo"] = i[0] insert["FechaPago"] = siguiente_habil_paises( add_days(i[0], -1), paises_feriados, cn) insert["Moneda"] = moneda insert["Flujo"] = i[1] / 100 * nocional insert["Amortizacion"] = i[3] / 100 * nocional insert["Interes"] = i[4] / 100 * nocional insert["InteresDevengado"] = i[6] / 100 * nocional self.flujos_derivados = self.flujos_derivados.append(insert) insert_nosensible["FechaFlujoNoSensible"] = i[0] insert_nosensible["Moneda"] = moneda insert_nosensible["FlujoNoSensible"] = i[1] / 100 * nocional self.flujos_nosensibles = self.flujos_nosensibles.append( insert_nosensible) insert_nosensible["ActivoPasivo"] = -factor_recibo_fijo for i in flujos_f_ns: insert_nosensible["FechaFlujoNoSensible"] = i[0] insert_nosensible["FlujoNoSensible"] = i[1] / 100 * nocional self.flujos_nosensibles = self.flujos_nosensibles.append( insert_nosensible) self.set_status("INFO: Flujos generados para SDL con ID " + str(self.info_cartera.ID.iloc[0]))
def genera_flujos(self): hora = self.hora cn = self.cn fechaActual = self.fechaActual fechaValores = self.fechaValores fondo = self.info_cartera.Fondo[0] id = self.info_cartera.ID[0] fecha_efectiva = pd.to_datetime( datetime.datetime.strptime( self.info_cartera.FechaEfectiva[0].split(" ")[0], "%d/%m/%Y").strftime("%Y-%m-%d")).date() fecha_venc = pd.to_datetime( pd.to_datetime( datetime.datetime.strptime( self.info_cartera.FechaVenc[0].split(" ")[0], "%d/%m/%Y").strftime("%Y-%m-%d")).date()).date() ajuste_feriados = self.info_cartera.AjusteFeriados[0] paises_feriados = ajuste_feriados.split(',') moneda = self.info_cartera.MonedaActivo[0] if self.info_cartera.TipoTasaActivo[0] == 'Fija': factor_recibo_fijo = 1 tasa = self.info_cartera.TasaActivo[0] else: factor_recibo_fijo = -1 tasa = self.info_cartera.TasaPasivo[0] #tasa = float(tasa.replace(",",".")) nocional = self.info_cartera.NocionalActivo[0] frecuencia = cast_frecuencia(self.info_cartera.FrecuenciaActivo[0]) if frecuencia == cast_frecuencia("Semi annual"): convencion = "ACT360" else: convencion = "LACT360" flujos_f = genera_flujos(max(fechaActual, fecha_efectiva), fecha_efectiva, fecha_venc, tasa, frecuencia, convencion) fecha_cupon = flujos_f[0][0] fecha_aux = delta_frecuencia(fecha_cupon, frecuencia, -1) fecha_aux = max(fecha_aux, fecha_efectiva) fecha_cupon_anterior = ultimo_habil_pais(fecha_aux, "CL", cn) if fechaActual < fecha_cupon_anterior: vpv = 1 else: vpv = ( "SELECT ICP1.ICP / ICP0.ICP AS Cupon FROM (SELECT ICP FROM dbAlgebra.dbo.TdIndicadores " "WHERE (Fecha = " + fecha_str(fechaValores) + ")) ICP1 CROSS JOIN (" "SELECT ICP FROM dbAlgebra.dbo.TdIndicadores " "WHERE (Fecha = " + fecha_str(fecha_cupon_anterior) + ")) " "ICP0") vpv = pd.io.sql.read_sql(vpv, cn) vpv = vpv.Cupon[0] flujos_v = proyectar_flujos_tabla(fechaActual, fechaValores, vpv, hora, fecha_efectiva, fecha_venc, frecuencia, moneda, 0, "Local", ajuste_feriados, cn) # Simulamos los insert a base de datos col_flujos_derivados = [ 'Fecha', 'Fondo', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFixing', 'FechaFlujo', 'FechaPago', 'Moneda', 'Flujo', 'Amortizacion', 'Interes', 'Sensibilidad', 'InteresDevengado' ] col_flujos_nosensibles = [ 'Fecha', 'Fondo', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFlujoNoSensible', 'Moneda', 'FlujoNoSensible' ] flujos_derivados = pd.DataFrame(columns=col_flujos_derivados) flujos_nosensibles = pd.DataFrame(columns=col_flujos_nosensibles) for i in flujos_v: flujos_derivados = flujos_derivados.append( pd.DataFrame([[ fechaActual, fondo, 'SCC', id, -factor_recibo_fijo, i[0], i[0], i[2], moneda, i[1] / 100 * nocional, i[3] / 100 * nocional, i[4] / 100 * nocional, i[5] / 100 * nocional, i[6] / 100 * nocional ]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append( pd.DataFrame([[ fechaActual, fondo, 'SCC', id, -factor_recibo_fijo, max(fechaActual, fecha_efectiva), moneda, vpv * nocional ]], columns=col_flujos_nosensibles)) for i in flujos_f: flujo_fijo = i[1] / 100 * nocional amortizacion = i[3] / 100 * nocional interes_fijo = i[4] / 100 * nocional fecha_flujo_f = i[0] devengo = i[6] / 100 * nocional fecha_pago = siguiente_habil_paises(add_days(fecha_flujo_f, -1), paises_feriados, cn) test = pd.DataFrame([fecha_flujo_f], columns=["fech"]) flujos_derivados = flujos_derivados.append( pd.DataFrame([[ fechaActual, fondo, 'SCC', id, factor_recibo_fijo, fecha_flujo_f, fecha_flujo_f, fecha_pago, moneda, flujo_fijo, amortizacion, interes_fijo, 0, devengo ]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append( pd.DataFrame([[ fechaActual, fondo, 'SCC', id, factor_recibo_fijo, fecha_flujo_f, moneda, flujo_fijo ]], columns=col_flujos_nosensibles)) self.flujos_nosensibles = flujos_nosensibles self.flujos_derivados = flujos_derivados self.set_status("INFO: Flujos generados para SCC con ID " + str(self.info_cartera.ID.iloc[0]))
def genera_flujos(self): hora = self.hora cn = self.cn fecha = self.fecha admin = self.info_cartera.Administradora[0] fondo = self.info_cartera.Fondo[0] contraparte = self.info_cartera.Contraparte[0] id = self.info_cartera.ID[0] fecha_efectiva = pd.to_datetime(self.info_cartera.FechaEfectiva[0]).date() fecha_venc = pd.to_datetime(self.info_cartera.FechaVenc[0]).date() ajuste_feriados = self.info_cartera.AjusteFeriados[0] paises_feriados = ajuste_feriados.split(',') moneda = self.info_cartera.MonedaActivo[0] if self.info_cartera.TipoTasaActivo[0] == 'Fija': factor_recibo_fijo = 1 tasa = self.info_cartera.TasaActivo[0] else: factor_recibo_fijo = -1 tasa = self.info_cartera.TasaPasivo[0] nocional = self.info_cartera.NocionalActivo[0] frecuencia = cast_frecuencia(self.info_cartera.FrecuenciaActivo[0]) id_key = self.info_cartera.ID_Key[0] convencion = "LACT360" flujos_f = genera_flujos(max(fecha, fecha_efectiva), fecha_efectiva, fecha_venc, tasa, frecuencia, convencion) fecha_cupon = flujos_f[0][0] fecha_aux = delta_frecuencia(fecha_cupon, frecuencia, -1) fecha_aux = max(fecha_aux, fecha_efectiva) fecha_cupon_anterior = ultimo_habil_pais(fecha_aux, "CL", cn) if fecha < fecha_cupon_anterior: vpv = 1 else: vpv = ("SELECT (ICP1.ICP / ICP0.ICP)/(ICP1.UF / ICP0.UF) AS Cupon FROM " "(SELECT ICP, UF FROM dbAlgebra.dbo.TdIndicadores " "WHERE (Fecha = " + fecha_str(fecha) + ")) ICP1 CROSS JOIN (" "SELECT ICP, UF FROM dbAlgebra.dbo.TdIndicadores " "WHERE (Fecha = " + fecha_str(fecha_cupon_anterior) + ")) " "ICP0") vpv = pd.io.sql.read_sql(vpv, cn) vpv = vpv.Cupon[0] flujos_v = proyectar_flujos_tabla(fecha, fecha, vpv, hora, fecha_efectiva, fecha_venc, frecuencia, moneda, 0, "Local", ajuste_feriados, cn) # Simulamos los insert a base de datos col_flujos_derivados = ['Fecha', 'Administradora', 'Fondo', 'Contraparte', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFixing', 'FechaFlujo', 'FechaPago', 'Moneda', 'Flujo', 'Amortizacion', 'Interes', 'Sensibilidad', 'InteresDevengado', 'Id_Key_Cartera'] col_flujos_nosensibles = ['Fecha', 'Administradora', 'Fondo', 'Contraparte', 'Tipo', 'ID', 'ActivoPasivo', 'FechaFlujoNoSensible', 'Moneda', 'FlujoNoSensible', 'Id_Key_Cartera'] flujos_derivados = pd.DataFrame(columns=col_flujos_derivados) flujos_nosensibles = pd.DataFrame(columns=col_flujos_nosensibles) for i in flujos_v: flujos_derivados = flujos_derivados.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SUC', id, -factor_recibo_fijo, i[0], i[0], i[2], moneda, i[1] / 100 * nocional, i[3] / 100 * nocional, i[4] / 100 * nocional, i[5] / 100 * nocional, i[6] / 100 * nocional, id_key]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SUC', id, -factor_recibo_fijo, max(fecha, fecha_efectiva), moneda, vpv * nocional, id_key]], columns=col_flujos_nosensibles)) for i in flujos_f: flujo_fijo = i[1] / 100 * nocional amortizacion = i[3] / 100 * nocional interes_fijo = i[4] / 100 * nocional fecha_flujo_f = i[0] devengo = i[6] / 100 * nocional fecha_pago = siguiente_habil_paises(add_days(fecha_flujo_f, -1), paises_feriados, cn) flujos_derivados = flujos_derivados.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SUC', id, factor_recibo_fijo, fecha_flujo_f, fecha_flujo_f, fecha_pago, moneda, flujo_fijo, amortizacion, interes_fijo, 0, devengo, id_key]], columns=col_flujos_derivados)) flujos_nosensibles = flujos_nosensibles.append(pd.DataFrame([[fecha, admin, fondo, contraparte, 'SUC', id, factor_recibo_fijo, fecha_flujo_f, moneda, flujo_fijo, id_key]], columns=col_flujos_nosensibles)) self.flujos_nosensibles = flujos_nosensibles self.flujos_derivados = flujos_derivados self.set_status("INFO: Flujos generados para SUC con ID " + str(self.info_cartera.ID.iloc[0]))