# -*- coding: utf-8 -*- """ Created on Thu Apr 15 16:14:54 2021 @author: turinici """ import numpy as np import matplotlib.pyplot as plt import seaborn as sns T=1.0 #N=52 N=255*8 M=3000 # nombre de scenarios dt = T/N W0=0 timerange = np.linspace(0,T,N+1,endpoint=True) timerange=timerange[:,None] dW= np.sqrt(dt)*np.random.randn(N,M) W=np.zeros((N+1,M)) W[0,:]=W0 W[1:,:]=W0+np.cumsum(dW,0) S0=100. mu=0.1 sigma=0.15 taux_r=0.03 def st(mu,sigma,t,wt): return np.exp((mu-sigma**2/2.)*t + sigma*wt) St = st(mu,sigma,timerange,W)*S0 plt.figure(1) for ii in range(15): plt.plot(timerange,St[:,ii]) V0=1000 P0=950 m=5 Pt=np.zeros(N+1) Pt[0]=P0 Ct=np.zeros_like(St) Xt=np.zeros_like(St) Mt=np.zeros_like(St) Vt=np.zeros_like(St) #mise en place de la strategie Vt[0,:]=V0 Pt[0]=P0 Ct[0,:]=V0-P0 Xt[0,:]=m*Ct[0,:] Mt[0,:]=Vt[0,:]-Xt[0,:] for jj in range(N): Pt[jj+1] =Pt[jj]*np.exp(taux_r*dt)#actualisation de P Mt[jj+1,:] =Mt[jj,:]*np.exp(taux_r*dt)#actualisation de M Xt[jj+1,:] =Xt[jj,:]*St[jj+1,:]/St[jj,:]#mise a jour partie risquee avec St Vt[jj+1,:] =Xt[jj+1,:]+Mt[jj+1,:] # calcul de valeur du portfeuille Ct[jj+1,:] =Vt[jj+1,:]-Pt[jj+1] #calcul du coussin # re-allocation selon les prescriptions de la regle CPPI: Xt[jj+1,:]=m*Ct[jj+1,:] Mt[jj+1,:]=Vt[jj+1,:]-Xt[jj+1,:] #livraison cash = Xt[-1,:]+Mt[-1,:] # calcul de la valeur finale plt.figure(10,figsize=(9, 3)) plt.subplot(1,3,1) plt.hist(cash*100/V0) plt.title('Vt/V0, Pfinal='+np.str(np.round(Pt[-1],2))) plt.subplot(1,3,2) #plt.figure(8) sns.distplot(np.log((Ct[1:,:]/Ct[0:-1,:]).flatten()),hist=True,kde=True,bins=50) plt.title('hist du rdt de Ct') plt.subplot(1,3,3) #plt.figure(9) plt.title('evolution du Vt p/r au plafond Pt') plt.plot(timerange,Vt[:,0:10]) plt.plot(timerange,Pt,'-ro') plt.legend(['Vt','Pt'])