# -*- coding: utf-8 -*- """ Spyder Editor Code Constant Mix """ #import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns T=1 # temps final N=255 dt=T/N timerange = np.linspace(0,T,N+1,endpoint=True) timerange=timerange[:,None] print(timerange.shape) M=1000 #no de realisations #construction de Wt: Wt=np.zeros((N+1,M)) W0=0 dW=np.sqrt(dt)*np.random.randn(N,M) Wt[0,:]=W0 Wt[1:,:]=W0+np.cumsum(dW,0) plt.figure() plt.subplot(1,2,1) plt.plot(Wt) plt.title('Realisations du brownien') S0=100.0 U0=np.log(S0) lambda_cm=0.5 taux_r=0.05 #mu=0.1 #sigma=0.35 theta2=12*2. theta3=0.35 theta1=theta2*U0#- theta3**2/2 #calcul de U_t dans Ornstein-Uhlenbeck Ut=np.zeros((N+1,M)) Ut[0,:]=U0 for jj in range(N): Ut[jj+1,:]=Ut[jj,:]+(theta1-theta2*Ut[jj,:])*dt + theta3*dW[jj,:] St= np.exp(Ut) plt.subplot(1,2,2) plt.plot(St[:,12:15]) plt.title('Realisations du sous-jacent') plt.savefig("realisations_Wt_St.jpg") V0=1000 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,:]=Vt[0,:]-Xt[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,:]=Vt[jj+1,:]-Xt[jj+1,:] plt.figure('constant mix',figsize=(9, 3)) plt.hist(Vt[-1,:]*100/V0,bins=int(np.sqrt(M))) plt.title('Vt/V0') sns.displot(np.log((Vt[1:,:]/Vt[0:-1,:]).flatten()),kde=True, stat='density',bins=int(np.sqrt(M))) plt.title('hist du rdt de Vt')