# -*- coding: utf-8 -*- """ 3/5/2021 @author: turinici """ import numpy as np import matplotlib.pyplot as plt import seaborn as sns T=1.0 #N=52 N=255 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 lambda_cm=0.5 Xt=np.zeros_like(St) Mt=np.zeros_like(St) Vt=np.zeros_like(St) #mise en place de la strategie Vt[0,:]=V0 Xt[0,:]=lambda_cm*Vt[0,:] Mt[0,:]=(1.0-lambda_cm)*Vt[0,:] for jj in range(N): 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 # re-allocation selon les prescriptions de la regle CPPI: Xt[jj+1,:]=lambda_cm*Vt[jj+1,:] Mt[jj+1,:]=(1.0-lambda_cm)*Vt[jj+1,:] plt.figure(10,figsize=(9, 3)) plt.subplot(1,3,1) plt.title('evolution du St') plt.plot(timerange,St[:,0:10]) plt.legend(['St']) plt.subplot(1,3,2) #plt.figure(9) plt.title('evolution du Vt/V0*100') plt.plot(timerange,Vt[:,0:10]*100/V0) plt.legend(['Vt']) plt.subplot(1,3,3) #plt.figure(8) sns.distplot(np.log((Vt[1:,:]/Vt[0:-1,:]).flatten()),hist=True,kde=True,bins=50) plt.title('rendement constant-mix')