group-telegram.com/c0ldness/2107
Create:
Last Update:
Last Update:
🐍 Вермишельный график ожиданий из свопов ROISfix: Рецепт приготовления
from nelson_siegel_svensson import NelsonSiegelCurve🫡 Спасибо за посещение нашего научного макротелеграм-семинара
from nelson_siegel_svensson.calibrate import calibrate_ns_ols
import numpy as np
from datetime import datetime as dt
from datetime import timedelta
df_roisfix = # IMPORT ROISFIX DATA
# FIXED EXCESS RETURN FOR FIXED LEG (ANNUALIZED)
term_prem = 0.028*12
maturities = [1/52,2/52,1/12,2/12,3/12,6/12,1,2]
li_term_prem = [x*term_prem for x in maturities]
df_roisfix_ex_exret = df_roisfix.sub(li_term_prem,axis=1).copy(deep=True)
col_mat = np.linspace(1,180,30)
col_date = df_roisfix_ex_exret_resample.index.to_list()
ix_date = pd.date_range(start=dt(2011,1,1), end=dt(2023,9,13) + timedelta(days=300),freq='D')
df_rates = pd.DataFrame(columns=col_date,index=ix_date)
for ix, row in df_roisfix_ex_exret_resample.iterrows():
try:
vals = row.dropna().values
curve_fit, status = calibrate_ns_ols(np.array( maturities[:len(vals)]),vals)
NSS_Fwd = NelsonSiegelCurve.forward(curve_fit,np.array([x/360 for x in col_mat]))
df_rates.loc[pd.date_range(start=ix+ timedelta(days=6), end=ix + timedelta(days=180),freq='6D'),ix] = NSS_Fwd
# print(ix)
except:
pass
df_rates.tail()
@c0ldness
BY ХОЛОДНЫЙ РАСЧЕТ ∅

Share with your friend now:
group-telegram.com/c0ldness/2107