4 votos

Bootstrapping OIS Curva con datos de diferentes días de datos

Tengo el siguiente problema al iniciar la curva OIS del JPY. El bootstrapping en sí mismo funciona cuando se tiene un conjunto de datos, por ejemplo, para la fecha 2017-02-09 . Tengo todos mis instrumentos y, como dije, el bootstrapping y la recepción de la curva OIS. Si extiendo el conjunto de datos a una segunda fecha 2017-02-10 Recibo todos los datos en mi bootstrapper, lo que no tiene sentido con el mensaje de error:

más de un instrumento con pilar 10 de febrero de 2017

que resulta en los mismos vencimientos debido a los datos de diferentes fechas como se explicó anteriormente. Tengo que hacer un bucle sobre las fechas pero no tengo ni idea de cómo podría funcionar en ese contexto. Se agradecería la ayuda.

import QuantLib as ql
import pandas as pd
import matplotlib.pyplot as plt

def Convert(Period):
    unit =[]
    if Period[-1:] == 'D':
        unit = ql.Days
    elif Period[-1:] == 'M':
        unit = ql.Months
    elif Period[-1:] == 'W':
        unit = ql.Weeks
    elif Period[-1:] == 'Y':
        unit = ql.Years
    period_object = ql.Period(int(Period[:-1]), unit)
    return period_object

date = ql.Date(9, ql.February, 2017)
ql.Settings.instance().evaluationDate = date

data = pd.read_csv('C:/Data_JPY_Playing.csv').fillna('')

data_selected = data[['fdate', 'ptype' ,'maturity','fixing','values']].to_records(index=False)  

Rate_Helper_Full_Disc = [] 

for fdate, ptype, maturity, fixing, values in data_selected:
    if row['ptype'] == 'Deposit':
        helper_disc = ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(row['values']/100)),
                                           Convert(row['maturity']), 
                                           int(row['fixing']),
                                           ql.Japan(), 
                                           ql.ModifiedFollowing, 
                                           False, 
                                           ql.Actual365Fixed())

        Rate_Helper_Full_Disc.append(helper_disc) 

disc_curve = ql.PiecewiseCubicZero(date, Rate_Helper_Full_Disc, ql.Actual365Fixed())
disc_curve.enableExtrapolation()

3voto

Andrew Koester Puntos 260

Una curva se utiliza para realizar cálculos (por ejemplo, el descuento de los flujos de caja) a partir de una fecha comercial determinada. La creación de una curva solo curva para dos diferentes fechas de comercio no tiene sentido. Con el primer conjunto de datos se debe hacer un bootstrap de la curva OIS para la fecha de negociación 2017-02-09, con el segundo conjunto de datos se debe hacer un bootstrap de la curva OIS para la fecha de negociación 2017-02-10.

0 votos

¿Por qué no dividir su archivo de datos en 2, un archivo por fecha de comercio, y luego ejecutar dos veces su código, una para la fecha = ql.Date(9, ql.February, 2017), una para la fecha = ql.Date(10, ql.February, 2017) ? Así es como se haría en un sistema de la vida real.

0 votos

de alguna manera tienes que filtrar tu data = pd.read_csv('C:/Data_JPY_Playing.csv').fillna('') para que conserve sólo los datos indexados por fecha . No sé cómo se hace en python pero probablemente sea fácil de hacer.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X