Example #1
0
np.random.seed(111)
ls = np.random.choice(linestyles, size=loss_frame.shape[0])
for i, beta_ in enumerate(loss_frame.iloc[:, :-1].values):
    ls_ = ls[i]
    if (beta_ == beta_best).all():
        draw_points = True
        linewidth = 2
    else:
        draw_points = False
        linewidth = 1
    draw(beta_,
         filtered_data,
         theor_maturities,
         title_date=CONFIG.SETTLE_DATE,
         longest_maturity_year=longest_maturity_year,
         draw_points=draw_points,
         weight_scheme=CONFIG.WEIGHT_SCHEME,
         ax=ax,
         ls=ls_,
         linewidth=linewidth,
         shift=True)
ax.set_ylim(filtered_data.ytm.min() - 0.01, filtered_data['ytm'].max() + 0.01)
ax.legend(loc='upper right')
plt.savefig(
    f'spot_path_{CONFIG.WEIGHT_SCHEME}_{CONFIG.SETTLE_DATE}_{loss.__name__}.png',
    dpi=400)

#numerical loss
print('final loss is {loss} and yield MAE is {mae}'.format(
    loss=loss_frame['loss'].min(),
    mae=MAE_YTM(beta_best,
Example #2
0
options = {'maxiter': 500, 'eps': 9e-5, 'disp': True}

#Tuple of arguments for loss function            
loss_args = (filtered_data, coupons_cf, streak_data, CONFIG.RHO, CONFIG.WEIGHT_SCHEME)

#defining loss
loss = yield_Loss

filtered_data['weight'] = weight([1, 1, 1, 1], filtered_data, CONFIG.WEIGHT_SCHEME)

###### OPTIMIZATION
print('start optimization\n')
res_ = iter_minimizer(Loss=loss, beta_init=x0, 
                loss_args=loss_args, method='SLSQP',  
                bounds=bounds,
                constraints=constr,
                max_deal_span=max_deal_span, options=options)
beta_best = res_.x
print('end optimization\n')

### Showing results of work

draw(beta_best, filtered_data, theor_maturities, f'{CONFIG.SETTLE_DATE:%d.%m.%Y}', 
     longest_maturity_year, draw_points=True, 
     weight_scheme=CONFIG.WEIGHT_SCHEME, label='Spot rate curve',
     alpha=0.8, shift=True)
     
plt.ylim(0, filtered_data.ytm.max() + 0.01)
plt.savefig(f'zero_curve_{date:%d.%m.%Y}.png', dpi=400);
plt.close()